Gegeben die Anwendungsfluss in der Grafik zeigen und im folgenden Text beschrieben.Fragment, das im Backstack nicht am höchsten ist, wird wieder aufgenommen
- Fragment 1 ist das niedrigste Fragment, aber nicht in der Backstack durch
disallowAddToBackStack
Einstellung. - Fragment 2 wird unter Verwendung von
fragmentTransaction.addToBackStack()
auf den Stapel geschoben. - Eine neue Instanz von Fragment 1 wird auf den Stapel geschoben.
- Das oberste Fragment (Fragment 1) wird aus dem Stapel entnommen.
- Aktivität 2 wird Vordergrund.
- Aktivität 1 wird Vordergrund.
Hier ist die verallgemeinerte Methode I verwenden Fragmente zu handhaben:
private void changeContainerViewTo(int containerViewId, Fragment fragment,
Activity activity, String backStackTag) {
if (fragmentIsAlreadyPresent(containerViewId, fragment, activity)) { return; }
final FragmentTransaction fragmentTransaction =
activity.getFragmentManager().beginTransaction();
fragmentTransaction.replace(containerViewId, fragment);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (backStackTag == null) {
fragmentTransaction.disallowAddToBackStack();
} else {
fragmentTransaction.addToBackStack(backStackTag);
}
fragmentTransaction.commit();
}
Problem
Wenn Aktivität 1 wieder aufgenommen in der letzten Stufe die niedrigste Instanz von Fragment 1 auch wieder aufnimmt. Zu diesem Zeitpunkt gibt Fragment 1 null
an getActivity()
zurück.
Frage
- Warum ein Fragment ist, das wieder nicht die oberste auf dem Stapel ist?
- Wenn die Fortsetzung des Fragments korrekt ist - wie soll ich ein losgelöstes Fragment behandeln?
Sind das erste Fragment1 und das Fragment2 dieselbe Containeransicht und welche Transaktion verwenden Sie im zweiten Schritt? – Evos
Ja, Fragment1 und Fragment2 verwenden dieselbe Containeransicht. – JJD
Und was ist mit Transaktionstyp: "ersetzen", "hinzufügen"? – Evos