Gibt es trotzdem einen Fragment BackStack-Eintrag zu tauschen oder neu anzuordnen?

9

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.

    
Bincy Baby 08.09.2016, 01:10
quelle

6 Antworten

1

Verwenden Sie nicht-swipable Viewpager und auf AddOnPageChangeListener erstellen Sie Arraylist und speichern Sie alle geöffneten Seiten. onBackPressed vergleicht Arraylist- und Show-Seiten.

    
Bincy Baby 30.09.2016, 05:23
quelle
2

Der Benutzer folgt dem Pfad A ---> B ---> C ---> D ---> E , dann möchte er zu B kommen. Was Sie also tun sollten, ist:

  • Überprüfen Sie, ob B bereits im Backstack ist oder nicht.
  • Wenn es dort ist, dann popBackStackImmediate , um zu B zurückzukehren
  • Wenn es nicht vorhanden ist, fügen Sie das Fragment 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).

    
Rohit Arya 19.09.2016 12:20
quelle
1

Es gibt keine API für diesen Anwendungsfall, aber es gibt andere Möglichkeiten, dies zu tun:

Beispiel

FragmentBackStackModifyActivity

    
Gnanendra Kumar 08.09.2016 02:07
quelle
0

Sie können das versuchen ...

  

onBackpressed

%Vor%
  

für zurück Stapel entfernen

%Vor%     
Arjun saini 21.09.2016 05:31
quelle
0

Kann nur addToBackstack () aufgerufen werden, wenn das Fragment nicht vor

hinzugefügt wurde

Angenommen, 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%     
Rissmon Suresh 22.09.2016 09:30
quelle
0

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.

    
MashukKhan 23.09.2016 09:50
quelle