Option A: Verwenden Sie die Übergangs-API.
Legen Sie einfach Animator-Animationen direkt in nav_graph-Aktionen fest:
Code: Select all
Code: Select all
enterTransitionCode: Select all
// Fragment's OnViewCreated
returnTransition = Slide(Gravity.END)
Es bietet Methoden zur Vorhersage des Zurück-Fortschritts, mit denen Sie manuell animieren können (Codebeispiel).
Was ist, wenn ich die Vorhersage des Zurück-Vorgangs für Fragmente implementieren möchte, aber unterschiedliche Übergangsanimationen abspielen möchte, je nachdem, wo die Zurück-Geste begonnen hat (zumindest auf der Seite des Bildschirms)?
Option B bietet uns handleOnBackStarted-Methode mit BackEventCompat-Parameter, der uns mit der getSwipeEdge-Methode eine Seite der Geste geben kann, und handleOnBackProgressed-Methode zum Animieren. Es gibt jedoch eine Einschränkung (in den Dokumenten erwähnt): „Benutzer können das vorherige Fragment nicht sehen, wenn sie zurückwischen“ – d. h. kein Suchen. Daher ist es fast sinnlos, diese Option für die Implementierung des prädiktiven Zurücksetzens zu verwenden – wenn der Benutzer mit der Animation fortfährt, sieht er einen leeren Bildschirm statt des vorherigen Fragments.
Option A funktioniert gut, die Suche wird unterstützt, aber es gibt keine Möglichkeit, die Seite und die Startkoordinaten der Geste mit diesem Ansatz zu erkennen.
Das Kombinieren von Optionen funktioniert auch nicht, da das Hinzufügen von OnBackPressedCallback die Kontrolle über die Suche übernimmt Übergangs-API zum Rückruf und definierte Übergangsanimation werden einfach nach handleOnBackPressed abgespielt.
Einige andere Optionen, über die ich nachgedacht habe:
- Erstellen Sie einen benutzerdefinierten FragmentNavigator, um das Hinzufügen und Verbergen von FragmentTransaction zu verwenden und dann die vorherige Fragmentansicht für die Suche in OnBackPressedCallback verwenden zu können. Es scheint ein Aufwand zu sein, alle vorherigen Fragmente im Speicher zu behalten.
- Übergeben Sie irgendwie die aktuelle Fragmentansicht an das nächste Fragment und verwenden Sie sie in OnBackPressedCallback für die Suche. Möglicherweise ist auch der Speicher ineffizient.
- Rufen Sie das vorherige Fragment OnCreateView manuell auf, um die Ansicht für die Suche in OnBackPressedCallback zu erhalten. Erstellung von Doppelansichten, Anzeigeinkonsistenzen, Speicherprobleme usw.
- Erkennen Sie die Zurück-Geste mithilfe unsichtbarer Ansichten an den Seiten des Bildschirms – die Erkennung erfolgt, nachdem die Vorhersage zurück gestartet wurde.
Mobile version