Ich habe einen Kundencode. Es gibt nur eine Aktivität für alle Fragmente, dh die einzelne Aktivität verwaltet alle Fragmente.
Diese Aktivität enthält den folgenden Code für jedes Fragment am Methodenende dieses Fragments.
Zum Beispiel - Fragment MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
So,
1) Was bedeutet addToBackStack(null)
a commit()
?
2) Warum müssen Sie einen Nullparameter übergeben addToBackStack
?
3) Wie bekomme ich dieses Fragment, nachdem es so hinzugefügt wurde?
Dieser Code scheint nutzlos zu sein, da ich den Code ohne die letzte Zeile ausgeführt habe .addToBackStack(null).commit()
und er ohne Probleme ausgeführt wurde.
android
android-fragments
Mein Gott
quelle
quelle
Antworten:
Zitieren von Dokumenten:
Die Reihenfolge, in der Sie Änderungen an einer FragmentTransaction hinzufügen, spielt keine Rolle, außer:
Sie müssen
commit()
zuletzt anrufen . Wenn Sie demselben Container mehrere Fragmente hinzufügen, bestimmt die Reihenfolge, in der Sie sie hinzufügen, die Reihenfolge, in der sie in der Ansichtshierarchie angezeigt werden.Sie müssen sich also zuletzt festlegen.
Es muss nicht null sein, es kann eine Zeichenfolge sein. Wenn Sie nicht möchten, übergeben Sie einfach null.
Über:
Wenn Sie zum vorherigen Fragment navigieren möchten, fügen Sie es dem Backstack hinzu. Es hängt also davon ab, ob Sie das Fragment zum Backstack hinzufügen möchten.
Sie haben bereits die Fragmentinstanz
firstFragment
. Ich weiß also nicht, was Sie damit meinen, dass Sie das Fragment später erhalten.Mehr Informationen @
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)
quelle
getFragmentManager().popBackStackImmediate()
wenn die Zurück-Schaltfläche dies allein mit / ohne Parameterübergabe tun kann? Siehe die Antwort von - stackoverflow.com/questions/21156153/…Die
tag
Zeichenfolge inaddToBackStack(String name)
gibt eine Möglichkeit, den Backstack für einen späteren Pop direkt an dieser Position zu lokalisieren. Es sollte in der Methode verwendet werdenpopToBackStack(String name, int flags)
:Mit anderen Worten, es wird Ihren Backstack platzen lassen, bis es das Fragment findet, das vom
name
in hinzugefügt wurdeaddToBackStack(String name)
.Wenn Sie beispielsweise dem Fragmentmanager eine Reihe von Ergänzungen oder Ersetzungen mit den Namen "frag1", "frag2", "frag3", "frag4" vornehmen und später direkt zu dem mit addToBackStack ("hinzugefügten Fragment 2 zurückkehren möchten) frag2 "), rufst du an
popToBackStack("frag2", 0)
.So,
Verwendung
.addToBackStack("fragName")
: Wenn Sie späterpopToBackStack(String name, int flags)
mehr als einen Backstack ablegen möchten .Verwendung
.addToBackStack(null)
: Wenn Sie später nicht mehr als einen Backstack einfügen möchten, aber dennoch einen nach dem anderen einfügen möchten. Tun Sie dies auch dann, wenn Sie popToBackStack () nicht explizit aufrufen, sondern stattdessen die Back-Press-Standardimplementierung den Back-Stack verarbeiten lassen.Verwendung
.disallowAddToBackStack()
: Wenn Sie nicht möchten, drücken Sie zurück oder rufen Sie popBackStack () explizit auf. Dadurch wird sichergestellt, dass kein Teil des Codes .addToBackStack () verwendet.quelle
Ihre Antworten sind veraltet. Wenn Sie dem Backstack keine Fragmente hinzufügen möchten, sollten Sie den folgenden Codeausschnitt verwenden:
Unten haben Sie ein süßes Beispiel, wie man es benutzt:
quelle
disallowAddToBackStack
, dann werden Sie zukünftig Anrufe addToBackStack Illegal werfen. Wenn addToBackStack bereits aufgerufen wurde, löst diese Methode eine IllegalStateException aus.