Ich verwende die Android-Kompatibilitätsbibliothek, um Fragmente zu implementieren, und habe das Layoutbeispiel so erweitert, dass ein Fragment eine Schaltfläche enthält, die ein anderes Fragment auslöst.
Im Auswahlbereich links habe ich 5 auswählbare Elemente - A B C D E
.
Jeder lädt ein Fragment (via FragmentTransaction:replace
) in das Detailfenster -a b c d e
Jetzt habe ich das Fragment e
um eine Schaltfläche erweitert , die ein weiteres Fragment e1
auch im Detailbereich lädt . Ich habe dies mit der e
onClick-Methode von fragment wie folgt gemacht:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Wenn ich folgende Auswahl treffe:
E - e - e1 - D - E
Dann e
befindet sich das Fragment im Detailbereich. Das ist in Ordnung und was ich will. Wenn ich jedoch back
an dieser Stelle auf den Knopf drücke, geschieht nichts. Ich muss zweimal darauf klicken, weil e1
es noch auf dem Stapel ist. Außerdem habe ich nach dem Klicken eine Nullzeiger-Ausnahme in onCreateView erhalten:
Um dieses Problem zu lösen, habe ich bei jeder A B C D E
Auswahl Folgendes hinzugefügt :
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Sie fragen sich nur, ob dies die richtige Lösung ist oder ob ich etwas anderes tun sollte?