Angenommen, ich habe eine Aktivität, bei der Fragmente programmgesteuert hinzugefügt wurden:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Was ist der beste Weg, um zum vorherigen sichtbaren Fragment zurückzukehren?
Ich habe die Trigger-Back-Button-Funktion beim Klicken auf eine Schaltfläche in Android gefunden, aber ich denke, dass die Simulation eines Back-Key-Ereignisses nicht der richtige Weg ist (und ich kann es auch nicht zum Laufen bringen):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Das Anrufen finish()
schließt nur die Aktivität, an der ich nicht interessiert bin.
Gibt es einen besseren Weg, dies zu tun?
android
android-fragments
back-stack
Fragen Sie B.
quelle
quelle
getFragmentManager().popBackStackImmediate();
hat den Trick gemacht. Vielen Dank.Um auf die anderen Antworten einzugehen, ist dies meine Lösung (in einer Aktivität platziert):
quelle
fm.getBackStackEntryCount() > 1
, um die Aktivität zurückzurufen, wenn nur das erste Fragment im Stapel vorhanden ist.Wenn wir die Fragmente aktualisieren / hinzufügen,
Sollte die enthalten
.addToBackStack()
.Wenn wir danach den
getFragments.popBackStackImmediate()
Willen geben, wird true zurückgegeben, wenn wir die Fragmente hinzufügen / aktualisieren und zum aktuellen Bildschirm zurückkehren.quelle
Fügen Sie diese Zeile Ihrer onBackPressed () -Methode hinzu. Mit der popBackStackImmediate () -Methode kehren Sie zum vorherigen Fragment zurück, wenn sich ein Fragment auf dem Backstack befindet
`
quelle
Diese Lösung eignet sich perfekt für die Fragmentnavigation in der unteren Leiste, wenn Sie die App schließen möchten, wenn Sie das primäre Fragment zurückdrücken.
Wenn Sie dagegen das sekundäre Fragment (Fragment in Fragment) öffnen, das in meinem Code als "DetailedPizza" definiert ist, wird der vorherige Status des primären Fragments zurückgegeben. Prost !
Inside Aktivitäten auf dem Rücken gedrückt setzen dies:
Und starten Sie das andere Fragment wie folgt:
quelle
Diese Antworten funktionieren nicht, wenn ich nicht addToBackStack () zu meiner Fragmenttransaktion hinzugefügt habe, aber Sie können verwenden:
von Ihrem Fragment einen Schritt zurück;
quelle
Kehren Sie programmgesteuert mit dem folgenden Code zum vorherigen Fragment zurück.
quelle
Um dieses Fragment wieder zu erhalten, fügen Sie einfach das Fragment zum Backstack hinzu, auf das Sie zurückgedrückt werden möchten. ZB:
In dem obigen Fall öffne ich,
LoginFragment
wennButton button
gedrückt wird, gerade ist der Benutzer inSignupFragment
. WennaddToBackStack(TAG)
also aufgerufen wird, woTAG = "SignupFragment"
, dann, wenn die Zurück-Taste gedrückt wirdLoginFragment
, kommen wir zurück zuSignUpFragment
.Viel Spaß beim Codieren!
quelle
Durch Hinzufügen
fragment_tran.addToBackStack(null)
des letzten Fragments kann ich zum letzten Fragment zurückkehren.neues Fragment hinzufügen :
quelle
Ich bin hierher gekommen, um die gleiche Idee zu haben, und in der Zwischenzeit habe ich mir eine eigene ausgedacht, die meiner Meinung nach nicht so schlecht ist und mit ViewPager funktioniert.
Ich habe also die onBackPressed-Methode in der übergeordneten Aktivität, die den viewPager enthält, überschrieben und so eingestellt, dass sie immer minus 1 Position zurückgeht, bis sie das erste Fragment erreicht, und dann die Aktivität schließt.
Dies kann zu einem Nachteil führen, da es jedes Mal nur in eine Richtung zurückgeht. Daher funktioniert es möglicherweise nicht gut, wenn Registerkarten vorhanden sind und Sie die Position mit übersprungenen Fragmenten wechseln (wenn Sie von 0 auf 2 gehen und dann zurück drücken, werden Sie angezogen 1 statt 0)
Für meinen Fall, mit 2 Fragmenten in viewPager ohne Tabs, macht es den Job gut.
quelle
Versuchen Sie den folgenden Code:
quelle