Zalecanym sposobem poruszania się między miejscami docelowymi jest używanie bezpiecznych argumentów Wtyczka Gradle. Ta wtyczka generuje klasy obiektów i konstruktora, które umożliwiają bezpieczną nawigację między miejscami docelowymi. Używaj bezpiecznych argumentów do nawigacji i przekazywania danych między miejscami docelowymi.
Włącz bezpieczne argumenty
Aby dodać bezpieczne argumenty,
w swoim projekcie umieść w pliku build.gradle
najwyższego poziomu ten element: classpath
:
Odlotowe
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Musisz też zastosować jedną z dwóch dostępnych wtyczek.
Aby wygenerować kod w języku Java odpowiedni dla modułów Java lub mieszanych Javy i Kotlin, dodaj
ten wiersz do pliku build.gradle
aplikacji lub modułu:
Odlotowe
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Aby wygenerować kod Kotlin odpowiedni dla modułów wyłącznie Kotlin, dodaj:
Odlotowe
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Musisz mieć android.useAndroidX=true
w
gradle.properties
plik zgodnie z
Migracja na AndroidaX
Wygenerowany kod
Po włączeniu bezpiecznych argumentów wygenerowany kod będzie zawierał klasy i metody dla wszystkie zdefiniowane działania i klasy odpowiadające poszczególnym działaniom wysyłającym. i miejsce docelowe odbioru.
Bezpieczne argumenty generują klasę dla każdego miejsca docelowego, z którego pochodzi działanie.
wygenerowana nazwa zajęć dodaje pozycję „Wskazówki dojazdu” do początkowej klasy docelowej
imię i nazwisko. Jeśli na przykład miejsce docelowe jest nazwane
SpecifyAmountFragment
, wygenerowana klasa ma nazwę
SpecifyAmountFragmentDirections
Wygenerowana klasa zawiera statyczną metodę dla każdego działania zdefiniowanego w
miejsca docelowego. Ta metoda przyjmuje wszystkie zdefiniowane parametry działań jako
i zwraca obiekt NavDirections
, który można przekazać bezpośrednio
do navigate()
.
Przykład bezpiecznych argumentów
Weźmy np. wykres nawigacyjny przedstawiający jedno działanie, które łączy dwa
miejsca docelowe: SpecifyAmountFragment
i ConfirmationFragment
.
Funkcja ConfirmationFragment
korzysta z pojedynczego parametru float
podanego przez Ciebie w ramach
danego działania.
Bezpieczne argumenty generują klasę SpecifyAmountFragmentDirections
z
metoda, actionSpecifyAmountFragmentToConfirmationFragment()
i element wewnętrzny
zajęcia o nazwie ActionSpecifyAmountFragmentToConfirmationFragment
. Wewnątrz
klasa jest odczytywana z NavDirections
i przechowuje powiązany identyfikator działania i
float
. Zwrócony obiekt NavDirections
można następnie przekazać
bezpośrednio do navigate()
, jak w tym przykładzie:
Kotlin
override fun onClick(v: View) {
val amount: Float = ...
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount)
v.findNavController().navigate(action)
}
Java
@Override
public void onClick(View view) {
float amount = ...;
action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount);
Navigation.findNavController(view).navigate(action);
}
Więcej informacji o przekazywaniu danych między miejscami docelowymi z użyciem bezpiecznych argumentów znajdziesz w artykule Używanie bezpiecznych argumentów do przekazywania danych z zabezpieczeniami typów.
Zapewnianie bezpieczeństwa typów za pomocą bezpiecznych argumentów
Nawigowanie między miejscami docelowymi przy użyciu bezpiecznych argumentów Wtyczka Gradle. Wtyczka ta generuje proste klasy obiektów i konstruktora, włącz nawigację bezpieczną typu i przekazywanie argumentów między miejscami docelowymi.
Aby dodać bezpieczne argumenty,
w swoim projekcie umieść w pliku build.gradle
najwyższego poziomu ten element: classpath
:
Odlotowe
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Musisz też zastosować jedną z dwóch dostępnych wtyczek.
Aby wygenerować kod w języku Java odpowiedni dla modułów Java lub mieszanych Javy i Kotlin, dodaj
ten wiersz do pliku build.gradle
aplikacji lub modułu:
Odlotowe
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Aby wygenerować kod Kotlin odpowiedni dla modułów wyłącznie Kotlin, dodaj:
Odlotowe
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Musisz mieć android.useAndroidX=true
w
gradle.properties
plik zgodnie z
Migracja na AndroidaX
Gdy włączysz Bezpieczne argumenty, wtyczka wygeneruje kod, który zawiera klasy i
dla każdego zdefiniowanego działania. W przypadku każdego działania Bezpieczne argumenty
generuje klasę dla każdego źródłowego miejsca docelowego, który jest miejscem docelowym.
skąd pochodzi działanie. Wygenerowana nazwa zajęć jest kombinacją
nazwę klasy docelowej i słowo „Trasa dojazdu”. Przykład:
jeśli miejsce docelowe nazywa się SpecifyAmountFragment
, wygenerowana klasa to
o nazwie SpecifyAmountFragmentDirections
. Wygenerowana klasa zawiera element statyczny
dla każdego działania zdefiniowanego w miejscu docelowym. Ta metoda wymaga
dowolne zdefiniowane parametry działania jako argumenty i zwracają obiekt NavDirections
które można przekazać do firmy navigate()
.
Załóżmy na przykład, że mamy wykres nawigacyjny z jednym działaniem, które
łączy miejsce docelowe (SpecifyAmountFragment
) z urządzeniem odbierającym
miejsce docelowe: ConfirmationFragment
.
Bezpieczne argumenty generują klasę SpecifyAmountFragmentDirections
z
actionSpecifyAmountFragmentToConfirmationFragment()
, która zwraca
NavDirections
obiekt. Ten zwrócony obiekt (NavDirections
) można następnie przekazać
bezpośrednio do navigate()
, jak w tym przykładzie:
Kotlin
override fun onClick(view: View) { val action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment() view.findNavController().navigate(action) }
Java
@Override public void onClick(View view) { NavDirections action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment(); Navigation.findNavController(view).navigate(action); }
Więcej informacji o przekazywaniu danych między miejscami docelowymi z użyciem bezpiecznych argumentów znajdziesz w artykule: Używaj bezpiecznych argumentów do przekazywania danych z zabezpieczeniami typu w polu Przekazuj dane między miejsca docelowe.