So verzögern Sie den Navigationsübergang von Fragment

Vorwort

Es ist sehr wichtig, die Benutzererfahrung bei der Erstellung von Anwendungen zu verbessern. Für die Benutzererfahrung lässt sich eines nicht vermeiden, nämlich die Übergangsanimation beim Seitenwechsel. Da auf der letztgenannten Seite möglicherweise Daten geladen werden, ist die letztgenannte Seite beim Wechsel leer, was zu einer schlechten Benutzererfahrung führt. Wenn also die Daten der nächsten Seite wahrscheinlich schnell geladen werden, können Sie dann warten, bis der zweite Bildschirm Daten geladen hat, bevor Sie mit der Animation beginnen, um einen reibungslosen Navigationsübergang auf der obersten Ebene zu gewährleisten?

Fragment in Android bietet diese Funktion, mit der das Laden des Fragments verzögert werden kann, sodass die Schnittstellenelemente auf dem zweiten Bildschirm (normalerweise aus dem Netzwerk erhaltene Bilder) angezeigt werden können, bevor die Benutzeroberfläche durch Animation zum zweiten Bildschirm übergeht. Das ist: postponeEnterTransition()undstartPostponedEnterTransition()

verschiebenEnterTransition

Diese Funktion verzögert den Navigationsübergang des Fragments bis startPostponedEnterTransition()oder executePendingTransactions(). Diese Funktion bietet dem Fragment also die Möglichkeit, die Animation zu verzögern, bis die Daten geladen sind.

onCreateEs ist zu beachten , dass diese Funktion ausgeführt werden muss, bevor das Fragment zu FragmentTransaction hinzugefügt wird, oder während dieser Lebenszyklen ausgeführt onAttachwird onCreateView. Lediglich diese Funktion muss anschließend ausgeführt werden startPostponedEnterTransition(), executePendingTransactionssonst kann der Navigationsübergang des Fragments nicht abgeschlossen werden.

startPostponedEnterTransition

Diese Funktion postponeEnterTransition()kann in Verbindung mit „schiebeEnterTransition“ einen Navigationsübergang initiieren, der durch „schiebeEnterTransition“ verzögert wurde. Und postponeEnterTransition()es muss anschließend ausgeführt werden startPostponedEnterTransition(), executePendingTransactionsandernfalls kann der Navigationsübergang des Fragments nicht abgeschlossen werden.

Beachten Sie, dass hier executePendingTransactions()der gleiche Effekt erzielt wird. Wenn die Verzögerungszeit executePendingTransactions()mit dieser Zeit interferiert, startPostponedEnterTransition()wird die Übergangsanimation möglicherweise nicht ausgeführt oder wurde bereits vor der Ausführung ausgeführt. Daher sollte besonders darauf geachtet werden, ob es während der Anwendung zu Eingriffen kommt executePendingTransactions().

PendingTransactions ausführen

Da es nun erwähnt ist executePendingTransactions(), lassen Sie uns gemeinsam über diese Funktion sprechen.

Wenn ein Fragment zu FragmentTransaction hinzugefügt und festgeschrieben wird, wird der Navigationsübergang nicht sofort ausgeführt, sondern so angeordnet, dass er asynchron im Hauptthread ausgeführt wird (ich denke, das weiß jeder, daher stellt FragmentTransaction auch Funktionen bereit) commitNow(). Sie können executePendingTransactions()diese Aktion sofort ausführen lassen, sodass auch postponeEnterTransition()der .

Wenn Sie es verwenden, müssen Sie daher auf seine Existenz postponeEnterTransition()achten executePendingTransactions().

Zusammenfassen

Es ist relativ einfach zu verwenden, aber achten Sie darauf, es nicht zu missbrauchen. Beispielsweise enthält die Fragmentseite viele Daten und die erforderliche Netzwerkanforderung kann lange dauern. Wenn Sie sie nach Abschluss der Anforderung ausführen, bleibt der Benutzer lange auf der startPostponedEnterTransition()aktuellen Seite stehen, nachdem er darauf geklickt hat, bevor er navigiert auf eine neue Seite, was zu einer schlechten Benutzererfahrung führt. Daher eignet es sich für schnell ladende Vorgänge wie Netzwerkbilder. Auf diese Weise ist bei Navigationsübergängen, insbesondere bei gemeinsam genutzten Elementen, der entsprechende Inhalt der nächsten Seite bereit und der Animationseffekt ist besser.

おすすめ

転載: blog.csdn.net/chzphoenix/article/details/122857011