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.Bundle
zawierający wartości domyślne dla miejsca docelowego (jeśli zostało podane). - Opcje nawigacji: opcje nawigacji wyświetlane jako
NavOptions
Ta 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
.