So löschen Sie eine bestimmte fragment von back-stack in android
Ich habe ein problem, über das entfernen eines bestimmten fragments von back-stack.Mein Szenario ist wie folgt.Fragment-1 ersetzt wird mit Fragment-2 und Fragment-2 ersetzt, mit Fragment-3.
Aufrufreihenfolge; Fragment-1-->Fragment-2-->Fragment-3.
Als Fragment-3 ist auf dem Bildschirm und dann die zurück-Taste geklickt wird, will ich gehen
Fragment-1.Das bedeutet, dass ich löschen möchte, Fragment-2 von back-stack.
Wie dies zu tun ?
Sie können leicht schalten Sie nicht löschen, Fragment .....
InformationsquelleAutor nihasmata | 2015-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den backstack Sie nicht haben
Fragment
s, aberFragmentTransaction
s. Wenn SiepopBackStack()
die Transaktion erneut angewendet, aber rückwärts. Dies bedeutet, dass (vorausgesetzt, SieaddToBackStackTrace(null)
jedes mal) in Ihrem backstack Sie habenWenn Sie nicht hinzufügen die zweite Transaktion auf den backstack das Ergebnis ist, dass Ihre backstack ist nur
und so durch drücken der zurück-Taste bewirkt die Ausführung von
2->1
führt zu einem Fehler, der durch das fragment 2 nicht da ist (Sie sind auf fragment 3).Die einfachste Lösung ist pop den backstack, bevor Sie gehen von 2 bis 3
Was ich hier mache ist diese: aus fragment 2 ich gehe zurück zu Teil 1 und dann direkt zum fragment 3. Dieser Weg, der zurück-button bringt mich wieder von 3 auf 1.
Ok, dann ist es nicht eine praktikable option... Vielleicht könnten Sie versuchen, mit popBackStack (int id, int flags), aber ich wollte es nicht probieren, ich weiß nicht, über das Verhalten mit Animationen...
Nicht arbeiten, ich sehe wie mein Gedächtnis Inkrement 😀
Wenn Sie poping backstack, bevor Sie gehen von 2 bis 3-system versucht zu zeigen, fragment 1. Jedes mal, wenn Sie poping-fragment Anzahl N es wird versucht zu zeigen, fragment-Nummer (N-1). Und wenn Sie zwingen, zu gehen, zu fragment 3 Sie erhalten NPE während der onCreateView 1 fragment...
vielen Dank für Ihre Antwort, die meine Frage.
InformationsquelleAutor Ilario
Hatte ich ein sehr ähnliches Szenario zu Euch, meine Lösung war nur die überprüfung der Höhe der backStack Transaktionen, die ich hatte.
Wenn die Transaktionen, bei denen mehr als 0 ist, dann würde ich einfach pop es sofort
also würde er es überspringen, wenn Sie back drücken.
Wäre dies erfolgreich:
Ein -> B (zurück gedrückt) -> zurück zu Einem
Ein -> B -> C (zurück gedrückt) -> zurück zu Einem
Ist der einzige Nachteil, den ich sehe, ist, dass es eine schnelle flash, wo Ein fragment angezeigt wird, bevor Sie zu fragment C.
.popStack()
wie andere vorgeschlagen - in meiner situation - dass die Anzeige automatisch wieder Ein, nachdem es ging um C - vor-zurück-button wurde gedrückt. DiepopBackStackImmediate()
hier aufgeführt ist, was machte den Unterschied in meinem Fall, und ich habe nun die zurück-Taste von C zurück zu A - keine der anderen Antworten, die ich lief über erwähnt hatte. Danke!Bitte geben Sie an, wo dieser code zu schreiben? Ich meine, das fragment.
InformationsquelleAutor Iv4n
Wenn Sie hinzufügen/starten alle drei Fragmente in der gleichen Aktivität, anstatt die
add()
Methode der FragmentTransaction für das zeigen Fragment3, verwenden Sie diereplace()
Methode der FragmentTransaction (ersetzen Fragment2 mit Fragment3). Diereplace
- Methode entfernt das aktuelle fragment aus backstack vor dem hinzufügen der neuen fragment. Wenn Sie starten, Fragment3 aus einer anderen Tätigkeit, und daher kann man nicht/nicht verwenden möchtenreplace()
entfernen Fragment2 von backstack zu Beginn der neuen Tätigkeit (fügt fragment3):InformationsquelleAutor Javad Sadeqzadeh
Fügen Sie an der Rückseite Staates aus der
FragmentTransaction
entfernen und aus dem backstack mitFragmentManager
pop-Methoden:ODER
Einfach übersprungen werden können, das fragment von hinzufügen in die fragment-Stapel, so, wenn Sie kommen zurück von
Fragment-3
es wird wieder kommen, umFragment-1
Aktualisiert :
Deaktivieren Sie die animation, die Sie außer Kraft setzen müssen
onCreateAnimation
Methode...manager.popBackStack wird die Animation fragment.Ich will nicht tun dies.Im fragment-3,wie zu entfernen fragment-2 ohne jede Aktion auf dem Bildschirm und dann, wenn darauf geklickt zurück-Taste wollen einfach nur zu gehen, fragment-1.
Kartheek,ich bin nicht mit support v4 das bedeutet, dass ich onCreateAnimator Methode des Fragment statt onCreateAnimation.
InformationsquelleAutor Kartheek
Code für Fragment Einer -> Fragment B:
Hinzufügen Fragment Eine in BackStack der Fragmente
Code für Fragment B -> Fragment C:
Nicht Hinzufügen Fragment B in BackStack der Fragmente
Wird es so funktioniert: A -> B -> C und während Rückkehr C-> Ein, wie Sie ausgenommen.
Hoffe es wird Euch helfen.
InformationsquelleAutor Hiren Patel
InformationsquelleAutor Rudee