Ich bin ziemlich neu in der Android-Entwicklung und laufe jetzt auf seltsames Verhalten ein.
Hier ist mein Code
%Vor%Wenn der Benutzer zum ersten Mal die Taste drückt, verhält es sich wie erwartet, füge ein neues Fragment zum Container hinzu. Aber wenn der Benutzer das zweite Mal die Taste drückt, während der Behälter noch ein Fragment enthält, wird anstelle eines Ersatzes ein neues hinzugefügt. Also, 2 Fragmente im Container, 2 zurück drücken, um alle Fragmente zu entfernen.
Ich habe festgestellt, dass wenn ich die Zeile entfernen
%Vor%Und überarbeiten Sie die onBackPress () Methode wie folgt, es funktioniert wieder wie ich erwartet habe (1 Fragment in Container zu einem Zeitpunkt)
Im Grunde genommen entfernen Sie das Fragment manuell anstelle der popFromBackStack-Methode
%Vor%Also, meine Frage ist
Schätzen Sie alle Kommentare und Vorschläge.
addToBackstack
erstellt eine Momentaufnahme Ihres Fragmentstatus. Das heißt, wenn Sie die Zurück-Taste drücken, kehren Sie tatsächlich zum letzten Zustand zurück, in dem addToBackstack
aufgerufen wurde.
In Ihrem Fall fügen Sie ein Fragment hinzu. Der Zurück-Knopf würde dieses hinzugefügte Fragment entfernen. Wenn Sie replace aufrufen und erneut zum Backstack hinzufügen, haben Sie jetzt zwei Zustände auf dem Backstack (1. wenn Sie das erste Fragment hinzugefügt hatten, 2. wenn Sie keine Fragmente hinzugefügt hatten). Wenn Sie die Zurück-Schaltfläche verwenden, um das aktuelle Fragment zu entfernen, verwenden Sie nicht addToBackstack. Verwenden Sie nur addToBackstack, wenn Sie den Status von Fragmenten in einer Ansicht beibehalten möchten.
Für diejenigen, die noch nach einer Lösung suchen.
In der Hauptklasse Activity
(die die Fragmente hostet) überschreiben Sie einfach onBackPressed()
.
Es gibt keine onBackPressed()
-Methode im Fragment, und diese Methode ist nur für activity
. Wenn wir also die Zurück-Taste drücken, wird das Standardverhalten von activity
angezeigt, welches
Sie gehen entweder zur vorherigen Aktivität (falls vorhanden) oder zur App wird beendet.
Jetzt müssen wir diese Methode überschreiben, um activity
zu sagen, dass wenn wir die Back-Taste drücken, wenn Fragmente im Back-Stack sind, diese herauskommen (und das ist, wenn addToBackStack()
ins Bild kommt). Andernfalls folgen Sie dem Standardverhalten.
Weitere Details finden Sie hier hier
Tags und Links android android-fragments fragmenttransaction