Ich wollte nur hinzufügen: -
Herausspringen aus dem Backstack mit folgenden Schritten
fragmentManager.popBackStack ()
Es geht nur darum, die Fragmente aus der Transaktion zu entfernen. Auf keinen Fall wird das Fragment vom Bildschirm entfernt. Im Idealfall ist es für Sie möglicherweise nicht sichtbar, aber möglicherweise sind zwei oder drei Fragmente übereinander gestapelt, und beim Drücken der Zurück-Taste sieht die Benutzeroberfläche möglicherweise überladen und gestapelt aus.
Nehmen wir nur ein einfaches Beispiel: -
Angenommen, Sie haben ein FragmentA, das Fragmnet B mit fragmentmanager.replace () lädt, und dann fügen wir AddBoStack hinzu, um diese Transaktion zu speichern. Der Fluss ist also:
SCHRITT 1 -> FragmentA-> FragmentB (wir sind zu FragmentB übergegangen, aber Fragment A befindet sich im Hintergrund und ist nicht sichtbar).
Jetzt erledigen Sie einige Arbeiten in FragmentB und klicken auf die Schaltfläche Speichern. Nach dem Speichern sollte wieder zu FragmentA zurückkehren.
SCHRITT 2-> Beim Speichern von FragmentB kehren wir zu FragmentA zurück.
SCHRITT 3 -> Ein häufiger Fehler wäre also ... in Fragment B werden wir fragment Manager.replace () fragmentB mit fragmentA ausführen.
Aber was tatsächlich passiert, wir laden Fragment A erneut und ersetzen Fragment B. Jetzt gibt es also zwei FragmentA (eines aus STEP-1 und eines aus diesem STEP-3).
Zwei Instanzen von FragmentenA sind übereinander gestapelt, was möglicherweise nicht sichtbar ist, aber vorhanden ist.
Selbst wenn wir den Backstack mit den oben genannten Methoden löschen, wird die Transaktion gelöscht, nicht jedoch die tatsächlichen Fragmente. Idealerweise müssen Sie in einem solchen speziellen Fall beim Drücken der Schaltfläche Speichern einfach zu fragmentA zurückkehren, indem Sie einfach fm.popBackStack () oder fm.popBackImmediate () ausführen .
Also richtig Step3-> fm.popBackStack () gehe zurück zu fragmentA, das sich bereits im Speicher befindet.