Ich habe 3 Fragmente in einer Aktivität, wenn eine Tablette im Hochformat gehalten wird. Allerdings habe ich nur 2 dieser Fragmente in der Landschaft. Das Problem, das ich habe, ist, dass beim Übergang vom Hoch- zum Querformat die Aktivität das 3. Fragment erstellt. Ich erhalte und Fehler, da dieses Fragment nicht erstellt werden kann.
Ich habe herausgefunden, dass dieses Fragment erstellt wird, weil es sich im Backstack befindet.
Ich habe versucht, das Fragment in der onDestroy-Methode mit zu entfernen
FragmentTransaction f = fragmentManager.beginTransaction();
f.remove(mf);
f.commit();
Es wird jedoch eine Fehlermeldung angezeigt, dass ich diese Funktion nach dem onSaveInstanceState nicht verwenden kann
Was wäre der richtige Weg, um dieses Fragment aus dem Backstack zu entfernen?
Aktualisieren
Ich sollte wahrscheinlich hinzufügen, dass das Fragment, mit dem ich Probleme habe, ein mapFragment aus dieser Bibliothek ist
https://github.com/petedoyle/android-support-v4-googlemaps
Die Art, wie ich es benutze, ist so
mf = MapFragment.newInstance(1, true);
ft = fragmentManager.beginTransaction();
ft.replace(R.id.mapContainer, mf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack("map");
ft.commit();
quelle
Antworten:
Sie fügen dem Back-Status aus dem hinzu
FragmentTransaction
und entfernen ihn mithilfe vonFragmentManager
Pop-Methoden aus dem Backstack :FragmentManager manager = getActivity().getSupportFragmentManager(); FragmentTransaction trans = manager.beginTransaction(); trans.remove(myFrag); trans.commit(); manager.popBackStack();
quelle
Ich habe einen Code erstellt, um zum gewünschten Backstack-Index zu springen. Er hat für meinen Zweck gut funktioniert.
dh. Ich habe Fragment1, Fragment2 und Fragment3, ich möchte von Fragment3 zu Fragment1 springen
Ich habe in Fragment3 eine Methode namens onBackPressed erstellt, die zu Fragment1 springt
Fragment3:
public void onBackPressed() { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.popBackStack(fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-2).getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); }
In der Aktivität muss ich wissen, ob mein aktuelles Fragment das Fragment3 ist, also rufe ich das onBackPressed meines Fragments auf und rufe stattdessen super auf
FragmentActivity:
@Override public void onBackPressed() { Fragment f = getSupportFragmentManager().findFragmentById(R.id.my_fragment_container); if (f instanceof Fragment3) { ((Fragment3)f).onBackPressed(); } else { super.onBackPressed(); } }
quelle
Sie zeigen Fragment in einem Container (mit id = fragmentcontainer), also entfernen Sie Fragment mit:
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragmentContainer); fragmentTransaction.remove(fragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();
quelle
Dann können Sie diese Funktionen verwenden
popBackStack(int arg0, int arg1);
popBackStack(String arg0, int arg1);
quelle
up to that state
werden gelöscht" lesen, damit nicht genau dieses Fragment entfernt wird, sondern alles darüber im Stapel (und das Fragment selbst, abhängig vom Flag) ).