Ich habe ein gestapeltes ActionBar / viewpager Layout mit drei Zungen sagen , A , B , und C . In Tab C Registerkarte (Fragment), ich bin das Hinzufügen eines weiteren Fragment sagen Fragment D . mit
DFragment f= new DFragment();
ft.add(android.R.id.content, f, "");
ft.remove(CFragment.this);
ft.addToBackStack(null);
ft.commit();
Ich ändere die Aktionsleiste in DFragments onResume, um die Schaltfläche hinzuzufügen:
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);
Wenn ich jetzt in DFragment die Zurück-Taste für Hardware (Telefon) drücke, kehre ich mit ausgewähltem CFragment zum ursprünglichen Layout mit Registerkarten (ABC) zurück. Wie kann ich diese Funktionalität mit der Aktionsleiste erreichen?
android
android-fragments
android-actionbar
SohailAziz
quelle
quelle
Antworten:
Implementieren
OnBackStackChangedListener
Sie diesen Code und fügen Sie ihn Ihrer Fragmentaktivität hinzu.quelle
onSupportNavigateUp()
"Methode überschreibt Methode nicht aus ihrer Oberklasse".onOptionsItemSelected
, können Sie auch nach der itemId suchen,android.R.id.home
anstatt sie hinzuzufügenonSupportNavigateUp
.ActionBar
? Ich sehe keinen, wenn ich diesen Code implementiere. Ich kann nur auf das Symbol klicken, aber es macht nichts. Android 4.0+.Ich habe es verstanden. Überschreiben Sie einfach onOptionsItemSelected in der Hosting-Aktivität und öffnen Sie den Backstack, z
Rufen Sie an
getActionBar().setDisplayHomeAsUpEnabled(boolean);
und melden Sie sichgetActionBar().setHomeButtonEnabled(boolean);
an,onBackStackChanged()
wie in einer Antwort unten erläutert.quelle
switch
Anweisung mit dem Fall einfügenandroid.R.id.home
.Wenn Sie eine übergeordnete Aktivität haben und möchten, dass diese Aufwärtsschaltfläche als Zurückschaltfläche fungiert, können Sie diesen Code verwenden:
Fügen Sie dies zu onCreate in Ihrer Hauptaktivitätsklasse hinzu
und fügen Sie dann onOptionsItemSelected wie folgt hinzu:
Ich benutze das im Allgemeinen die ganze Zeit und scheint ziemlich legitim zu sein
quelle
Activity
von mir zu verwenden, in der Hoffnung, dass er zu dem Fragment zurückkehren würde, von dem er ausgegangen ist. Die Schaltfläche "Zurück" wird neben meinem App-Symbol angezeigt, wenn ich zu "Mein" gehe.Activity
Ich klicke jedoch auf das Symbol und es passiert nichts (es sollte zum Fragment zurückkehren). Irgendeine Idee warum? Vielen Dank.Sie können mit der Aufwärts-Taste wie der Zurück-Taste zurückgehen.
quelle
Ich weiß, dass diese Frage alt ist, aber vielleicht braucht sie auch jemand (wie ich).
Wenn Ihre Aktivität AppCompatActivity erweitert , können Sie eine einfachere (zweistufige) Lösung verwenden:
1 - Wenn Sie ein Nicht-Home-Fragment hinzufügen, zeigen Sie direkt nach dem Festschreiben der Fragmenttransaktion die Schaltfläche Nach oben an. So was:
2 - Wenn Sie dann die UP-Taste drücken, verstecken Sie sie.
Das ist es.
quelle
Ich habe eine Kombination aus den Antworten von Roger Garzon Nieto und Sohailaziz verwendet . Meine App verfügt über eine einzelne MainActivity und Fragmente A, B, C, die in sie geladen werden. Mein "Home" -Fragment (A) implementiert OnBackStackChangedListener und überprüft die Größe des BackStacks. Wenn es weniger als eins ist, wird die UP-Taste ausgeblendet. Die Fragmente B und C laden immer den Zurück-Button (in meinem Design wird B von A und C von B aus gestartet). Die MainActivity selbst öffnet den Backstack beim Tippen auf die UP-Schaltfläche und verfügt über Methoden zum Anzeigen / Ausblenden der Schaltfläche, die die Fragmente aufrufen:
Hauptaktivität:
fragmentA (implementiert FragmentManager.OnBackStackChangedListener):
Fragment B, Fragment C:
quelle
Das hat bei mir funktioniert. Überschreiben Sie beispielsweise onSupportNavigateUp und onBackPressed (Code in Kotlin);
Nun im Fragment, wenn Sie den Aufwärtspfeil anzeigen
Wenn Sie darauf klicken, kehren Sie zur vorherigen Aktivität zurück.
quelle
Kotlin:
quelle
Dies ist eine sehr gute und zuverlässige Lösung: http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/
Der Typ hat ein abstraktes Fragment erstellt, das das backPress-Verhalten behandelt und mithilfe des Strategiemusters zwischen den aktiven Fragmenten wechselt.
Für einige von euch gibt es vielleicht einen kleinen Nachteil in der abstrakten Klasse ...
In Kürze sieht die Lösung aus dem Link folgendermaßen aus:
Und Verwendung in der Aktivität:
quelle