erstellt eine App mit mehreren Fragmenten, die ein einfaches Ändern von Fragment-Tabs erfordert, deren BackStack-Eintrag beibehalten werden muss. Beim Benutzerklick muss das Fragment sofort geöffnet werden. Ich denke, BackStack neu zu sortieren ist die beste Option. Kann jemand BackStack neu anordnen?
Ich habe 5 Fragmente A, B, C, D, E. wenn der Benutzer ein Fragment wie A öffnet --- & gt; B --- & gt; C --- & gt; D --- & gt; E. mit Standard-Back-Stack, Back-Taste funktioniert es gut. Aber wenn Benutzer öffnet A --- & gt; B --- & gt; C --- & gt; D --- & gt; E --- & gt; B. Danach, wenn der Benutzer zurückklickt, geht der Standard-Backstack zu A.
Verwenden Sie nicht-swipable Viewpager und auf AddOnPageChangeListener erstellen Sie Arraylist und speichern Sie alle geöffneten Seiten. onBackPressed vergleicht Arraylist- und Show-Seiten.
Der Benutzer folgt dem Pfad A ---> B ---> C ---> D ---> E
, dann möchte er zu B
kommen. Was Sie also tun sollten, ist:
B
bereits im Backstack ist oder nicht. popBackStackImmediate
, um zu B
zurückzukehren
B
normal hinzu. So ersetzen Fragment sollte etwa so sein:
%Vor% Denken Sie daran, dass dies zum vorherigen Status von B
zurückkehrt.
TIPP: Da Sie keine zwei Instanzen eines Fragments wollen, versuchen Sie, eine Singleton-Instanz von ihnen zu erstellen. Wenn Sie eine neue Instanz des Fragments erstellen und dieses Fragment bereits im Backstack vorhanden ist, wird die neue Instanz ignoriert (weil Sie in den vorherigen Zustand zurückkehren).
Es gibt keine API für diesen Anwendungsfall, aber es gibt andere Möglichkeiten, dies zu tun:
Sie können das versuchen ...
%Vor%onBackpressed
%Vor%für zurück Stapel entfernen
Kann nur addToBackstack () aufgerufen werden, wenn das Fragment nicht vor
hinzugefügt wurdeAngenommen, in Ihrem Fall befindet sich der Benutzer in Fragment E und wenn der Benutzer Fragment B aufruft, prüfen Sie, ob das Fragment B bereits im Backstack hinzugefügt wurde
Wenn ja, dann rufe addToBackstack nicht für diese FragmentTransaction auf.
sonst rufen Sie addToBackstack ()
aufüberprüfe meinen Beispielcode:
%Vor%Platziere diesen Code einfach in deiner MainActivity
%Vor% Hier überprüft getFragmentManager().getBackStackEntryCount() == 0
, ob der Stapeleintrag auf 0 steht oder nicht, wenn er auf 0 steht, wird die Aktivität beendet.
In Ihrem Fall A - & gt; B - & gt; C - & gt; D - & gt; E - & gt; B
A wird auf 0 sein,
B wird auf 1 sein,
C auf 2,
D auf 3,
E auf 4,
B auf 5
Wenn Sie also auf "Zurück" klicken, überprüft die Bedingung if
, ob der Backstack-Zähler auf 0 gesetzt ist.
Tags und Links android android-fragments instance fragment-backstack