Gdy zdefiniujesz działanie na wykresie nawigacyjnym za pomocą DSL Kotlin,
Nawigacja generuje odpowiednią klasę NavAction, która zawiera
konfiguracje zdefiniowane dla tego działania, w tym:
- Miejsce docelowe: identyfikator zasobu miejsca docelowego.
- Argumenty domyślne:
android.os.Bundlezawierający wartości domyślne dla miejsca docelowego (jeśli zostało podane). - Opcje nawigacji: opcje nawigacji wyświetlane jako
NavOptionsTa klasa zawiera całą konfigurację specjalną dla: przejście do i z powrotem z miejsca docelowego, łącznie z animacją konfigurację zasobów, zachowanie wyostrzenia oraz określenie, czy miejsce docelowe powinno być w trybie pojedynczego od góry.
Opcje dostępne podczas tworzenia wiadomości
Domyślnie navigate() dodaje nowe miejsce docelowe do stosu tylnego. Dostępne opcje
zmień działanie navigate(), przekazując dodatkowe opcje nawigacji do
navigate().
Za pomocą prostej funkcji lambda można utworzyć instancję NavOptions. Powodzenie
navigate() argumenty, które w innym przypadku można bezpośrednio przekazać do funkcji
NavOptions.Builder Zobacz te przykłady:
Przykłady znajdziesz w przewodniku po wstecznym stosie zawierającym przykłady przekazywania opcji przekazywania
do navigate() w kontekście.
Opcje z XML
Poniżej znajduje się przykładowy wykres składający się z 2 ekranów i działań aby przejść z jednego do drugiego:
<?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>
Jeśli wykres nawigacyjny jest większy, działania te są analizowane,
odpowiednie obiekty NavAction są generowane ze zdefiniowanymi konfiguracjami
na wykresie. Na przykład action_b_to_a oznacza nawigację z
miejsce docelowe: b do miejsca docelowego: a. Akcja zawiera animacje
Działanie popTo, które powoduje usunięcie wszystkich miejsc docelowych z backendu. Wszystkie
ustawienia są rejestrowane jako NavOptions i są dołączone do NavAction.
Aby śledzić ten element typu NavAction, użyj parametru NavController.navigate(), przekazując w nim identyfikator:
działanie, jak w tym przykładzie:
navController.navigate(R.id.action_b_to_a)
Stosowanie opcji w sposób automatyczny
Poprzednie przykłady pokazują, jak określić NavOptions w menu nawigacyjnym.
kodu XML wykresu. Jednak konkretne opcje mogą się różnić w zależności od ograniczeń
nieznane w momencie kompilacji. W takich przypadkach należy utworzyć i ustawić NavOptions
automatycznie, jak w tym przykładzie:
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()
);
W tym przykładzie użyto rozszerzonej formy ciągu navigate() i zawiera dodatkowe
Argumenty Bundle oraz NavOptions. Wszystkie warianty reklam navigate() zostały rozszerzone
wersji, które akceptują argument NavOptions.
Możesz też automatycznie zastosować NavOptions po przejściu do trybu niejawnego
precyzyjne linki:
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()
);
Ten wariant interfejsu navigate() zajmuje Uri dla niejawnego głębokiego
i instancji NavOptions.