web-dev-qa-db-de.com

Fragmentmethoden: attach (), detach (), remove (), replace (), popBackStack ()

Ich bin sehr verwirrt zwischen diesen Funktionen und ihren Zwecken. Was ich beobachtet habe, dass mit replace() das vorhandene Fragment durch ein neues ersetzt wird. Wir können addToBackStack(null) verwenden, um dieses Fragment in den Backstack zu setzen, damit wir zum zuvor gezeigten Fragment zurückkehren können. Wenn nun ein Fragment hinzugefügt (oder ersetzt) ​​wird - onAttach() -> onCreate() etc .... werden die Methoden des Fragments der Reihe nach aufgerufen.

Wenn wir nun remove() für das Fragment aus unserer Aktivität aufrufen, welche Funktionen des Fragments werden in welcher Reihenfolge aufgerufen?

Was machen attach() und detach()? Entfernt detach() das Fragment? Und wenn diese beiden attach() und detach() verwendet werden, welche Funktionen des Fragments werden in welcher Reihenfolge aufgerufen?

Und was passiert mit popBackStack() ?? Ich meine, welche Funktionen werden aufgerufen, wenn wir popBackStack() für das Fragment aus unserer Aktivität verwenden?

Und wann ruft onDestroy () auf?

Vielen Dank.

33
Vikram Gupta

Wenn wir jetzt remove () für das Fragment aus unserer Aktivität aufrufen, werden welche Funktionen des Fragments in welcher Reihenfolge aufgerufen?

Schauen Sie sich http://developer.Android.com/reference/Android/app/Fragment.html an.

Die Reihenfolge ist: onPause(), onStop(), onDestroyView(), onDestroy(), onDetach()

Was macht attach () und detach ()? Entfernt detach () das Fragment? Und wenn diese beiden Funktionen attach () und detach () verwendet werden, werden welche Funktionen des Fragments in welcher Reihenfolge aufgerufen?

attach() und detach() assoziieren bzw. trennen Fragment mit/von Activity. Beim Anhängen von Fragment wird die Lebenszyklusmethode onAttach() aufgerufen, beim Trennen wird die Lebenszyklusmethode onDetach() in Fragment aufgerufen. Weitere Informationen erhalten Sie über den obigen Link.

Und was passiert mit popBackStack ()? Ich meine, welche Funktionen werden aufgerufen, wenn wir popBackStack () für das Fragment aus unserer Aktivität verwenden?

Wenn das Fragment nicht zerstört wurde, werden auf popBackStack() die Methoden onStart() und onResume() aufgerufen. Wenn das Fragment zuvor zerstört wurde, werden die Lebenszyklusmethoden ab onAttach() aufgerufen. Es ist dasselbe wie beim Drücken der Zurück-Taste auf Activities.

24
Adam L. Mónos

Nur eine Anmerkung zu popBackStack(). Es wird kein Fragment abgelegt, sondern eine Fragmenttransaktion. Was auch immer die letzte Fragmenttransaktion war, wird umgekehrt. Wenn Sie ein FragmentA angezeigt haben und Ihre Transaktion war:

fragmentTransaction.replace(R.id.your_layout, fragmentB);
fragmentTransaction.addToBackStack(null);

Es würde FragmentA durch FragmentB ersetzen und diese Transaktion (nicht das Fragment) zum Backstack hinzufügen. Wenn Sie dann auf die Schaltfläche "Zurück" klicken, wird der Backstack geöffnet und die Transaktion abgerufen, die "Dieses FragmentA durch ein FragmentB ersetzen" lautete. Diese Transaktion wird dann rückgängig gemacht. In umgekehrter Richtung muss das aktuelle Fragment durch FragmentA ersetzt werden. Wenn das ursprüngliche FragmentA noch vorhanden ist, wird dieses verwendet. Wenn es zerstört wurde, macht es ein neues.

12
emote_control

Angenommen, Fragment A und Fragment B wurden mit den folgenden Schritten in einen Behälter gegeben:

1. Added fragment A =>  .replace(R.id.container, fragmentA) => addToBackStack(null)
2. Added fragment B =>  .replace(R.id.container, fragmentB) => addToBackStack(null)
3. Removed fragment B => fragmentManager.popBackStack();

Rückrufe beim Aufruf von fm.popBackStack ():

FragmentB: onPause()
FragmentB: onStop()
FragmentB: onDestroy()
FragmentB: onDetach()
FragmentA: onCreateView()
FragmentA: onViewCreated()
FragmentA: onActivityCreated()
FragmentA: onStart()
FragmentA: onResume()

Erläuterung: Warum wurde die Ansicht von Fragment A erneut erstellt und fortgesetzt, während Fragment B mit popBackStack () entfernt und zerstört wurde?

Antwort: Wenn Sie Fragment B hinzugefügt haben, haben Sie replace () und addToBackStack () verwendet, sodass alle Fragmente aus dem Container entfernt und Fragment B dem Container hinzugefügt wurden. Und auch diese Transaktion wurde im Backstack aufgezeichnet. Wenn also fm.popBackStack () aufgerufen wird, wird zuerst die Transaktion aus dem Backstack entfernt, und die Operationen werden von selbst zurückgesetzt. Daher wird Fragment b aus dem Container entfernt und zerstört. Alle anderen Fragmente werden hinzugefügt, da die Ansicht von Fallfragment A dem Container hinzugefügt wird. Beachten Sie auch, dass die Funktion onAttach & onCreate () von Fragment A nicht aufgerufen wird, da sie bereits erstellt und an die MainActivity angehängt wurde.

Das Zurückdrücken von Fragment B macht dasselbe:

If you press the back button, it calls fm.popBackStack() and pops the transaction.
4
Richa