Ich verwende das Kompatibilitätspaket, um Fragmente mit Android 2.2 zu verwenden. Wenn Sie Fragmente verwenden und Übergänge zwischen ihnen zum Backstack hinzufügen, möchte ich das gleiche Verhalten wie onResume einer Aktivität erzielen, dh immer dann, wenn ein Fragment nach dem Verlassen des Stacks in den "Vordergrund" (für den Benutzer sichtbar) gebracht wird Backstack, ich möchte, dass eine Art Rückruf innerhalb des Fragments aktiviert wird (um beispielsweise bestimmte Änderungen an einer gemeinsam genutzten UI-Ressource vorzunehmen).
Ich habe gesehen, dass es innerhalb des Fragment-Frameworks keinen eingebauten Rückruf gibt. Gibt es eine gute Praxis, um dies zu erreichen?
onCreateView
dem nach einem Pop nach dem Fragment gerufen wird.Antworten:
Da es keine bessere Lösung gibt, funktioniert dies für mich: Angenommen, ich habe 1 Aktivität (MyActivity) und wenige Fragmente, die sich gegenseitig ersetzen (jeweils nur eines ist sichtbar).
Fügen Sie in MyActivity diesen Listener hinzu:
(Wie Sie sehen, verwende ich das Kompatibilitätspaket).
getListener-Implementierung:
MyFragment.onFragmentResume()
wird aufgerufen, nachdem ein "Zurück" gedrückt wurde. Einige Einschränkungen:FragmentTransaction.addToBackStack()
)quelle
Ich habe die vorgeschlagene Lösung ein wenig geändert. Funktioniert bei mir so besser:
quelle
getFragments()
in SupportFragmentManager aufgerufen wird ... -1: - /Nach a können
popStackBack()
Sie den folgenden Rückruf verwenden:onHiddenChanged(boolean hidden)
innerhalb Ihres Fragmentsquelle
Der folgende Abschnitt bei Android Developers beschreibt einen Kommunikationsmechanismus, der Ereignisrückrufe für die Aktivität erstellt . Um eine Zeile daraus zu zitieren:
Bearbeiten: Das Fragment hat eine,
onStart(...)
die aufgerufen wird, wenn das Fragment für den Benutzer sichtbar ist. Ebenso einonResume(...)
wenn sichtbar und aktiv laufend. Diese sind an ihre Aktivitätsgegenstücke gebunden. Kurzum: verwendenonResume()
quelle
In meiner Aktivität onCreate ()
Verwenden Sie diese Methode, um ein bestimmtes Fragment abzufangen und onResume () aufzurufen.
quelle
Ein wenig verbessert und in eine Manager-Lösung eingewickelt.
Dinge zu beachten. FragmentManager ist kein Singleton, sondern verwaltet nur Fragmente innerhalb der Aktivität, sodass es in jeder Aktivität neu ist. Bei dieser Lösung wird ViewPager bisher nicht berücksichtigt, da die Methode setUserVisibleHint () aufgerufen wird, um die Sichtbarkeit von Fragmenten zu steuern.
Wenn Sie sich mit diesem Problem befassen, können Sie die folgenden Klassen verwenden (verwendet Dagger2-Injektion). Aktivität aufrufen:
FragmentBackstackStateManager.java:
FragmentBackstackChangeListenerImpl.java:
BackstackCallback.java:
quelle
Wenn ein Fragment auf den Backstack gelegt wird, zerstört Android einfach seine Ansicht. Die Fragmentinstanz selbst wird nicht getötet. Eine einfache Möglichkeit zum Starten besteht darin, das Ereignis onViewCreated abzuhören und dort die Logik "onResume ()" zu platzieren.
quelle
Dies ist die richtige Antwort, die Sie onResume () aufrufen können, sofern das Fragment an die Aktivität angehängt ist. Alternativ können Sie onAttach und onDetach verwenden
quelle
onResume () für das Fragment funktioniert gut ...
quelle
und schließlich Umfang dein Frament von RootFragment, um Wirkung zu sehen
quelle
Meine Problemumgehung besteht darin, den aktuellen Titel der Aktionsleiste im Fragment abzurufen, bevor Sie den neuen Titel festlegen. Auf diese Weise kann ich nach dem Aufspringen des Fragments wieder zu diesem Titel zurückkehren.
quelle
Ich habe enum verwendet
FragmentTags
, um alle meine Fragmentklassen zu definieren.bestehen
FragmentTags.TAG_FOR_FRAGMENT_A.name()
als Fragment - Tag.und jetzt weiter
quelle