Safe Args

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.