Wenn Sie eine Aktion im Navigationsdiagramm
mit Kotlin DSL definieren,
Die Navigation generiert eine entsprechende NavAction
-Klasse, die das Ereignis
Konfigurationen, die für diese Aktion definiert wurden, einschließlich der folgenden:
- Ziel:Die Ressourcen-ID des Ziels.
- Standardargumente:
android.os.Bundle
mit Standardwerten für das Ziel, falls angegeben. - Navigationsoptionen:Navigationsoptionen, dargestellt als
NavOptions
Diese Klasse enthält die gesamte spezielle Konfiguration für Wechsel vom Ziel zum Ziel und zurück, einschließlich Animation Ressourcenkonfiguration, Pop-Verhalten und ob das Ziel im Single-Top-Modus eingeführt.
Optionen bei „Schreiben“
Standardmäßig fügt navigate()
das neue Ziel dem Back Stack hinzu. Sie können
Verhalten von navigate()
ändern, indem Sie zusätzliche Navigationsoptionen an
dein navigate()
-Anruf.
Du kannst eine Instanz von NavOptions
mit einer einfachen Lambda-Funktion erstellen. Bestanden
navigate()
sind die Argumente, die Sie andernfalls explizit an den
NavOptions.Builder
. Betrachten Sie die folgenden Beispiele:
Beispiele für die Übergabe von Optionen finden Sie im Back-Stack-Leitfaden.
an navigate()
im Kontext.
Optionen mit XML
Das folgende Beispieldiagramm mit zwei Bildschirmen und einer Aktion um von einer Seite zum anderen zu wechseln:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/a">
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
android:label="a"
tools:layout="@layout/a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment android:id="@+id/b"
android:name="com.example.myapplication.FragmentB"
android:label="b"
tools:layout="@layout/b">
<action android:id="@+id/action_b_to_a"
app:destination="@id/a"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/a"
app:popUpToInclusive="true"/>
</fragment>
</navigation>
Wenn das Navigationsdiagramm
aufgebläht ist, werden diese Aktionen geparst
entsprechende NavAction
-Objekte mit den definierten Konfigurationen generiert werden,
im Diagramm. action_b_to_a
ist z. B. definiert als die Navigation von
Ziel b
bis Ziel a
. Die Aktion umfasst Animationen sowie
popTo
-Verhalten, bei dem alle Ziele aus dem Backstack entfernt werden. Alle genannten
werden als NavOptions
erfasst und an NavAction
angehängt.
Um diesem NavAction
zu folgen, verwenden Sie NavController.navigate()
und übergeben Sie die ID von
Aktion ausführen, wie im folgenden Beispiel gezeigt:
navController.navigate(R.id.action_b_to_a)
Optionen programmatisch anwenden
Die vorherigen Beispiele zeigen, wie NavOptions
in der Navigation angegeben wird
Graph-XML. Spezifische Optionen können jedoch abhängig von Einschränkungen variieren,
während der Build-Erstellung unbekannt ist. In solchen Fällen muss die NavOptions
erstellt und festgelegt werden.
wie im folgenden Beispiel gezeigt:
Kotlin
findNavController().navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
In diesem Beispiel wird eine erweiterte Form von navigate()
verwendet und es sind zusätzliche
Argumente Bundle
und NavOptions
. Alle Varianten von navigate()
wurden verlängert
Versionen, die ein NavOptions
-Argument akzeptieren.
Sie können NavOptions
auch programmatisch anwenden, wenn Sie zu „Implizit“
Deeplinks:
Kotlin
findNavController().navigate(
deepLinkUri,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
deepLinkUri,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
Diese Variante von navigate()
verwendet Uri
für die implizite tiefe
Link sowie die Instanz NavOptions
.