Es wird empfohlen, zur Navigation zwischen Zielorten die sicheren Args zu verwenden. Gradle-Plug-in. Dieses Plug-in generiert Objekt- und Builder-Klassen, die typsichere Navigation zwischen Zielen. Verwenden Sie sichere Argumente für Navigieren und Datenübergabe zwischen Zielen
Sichere Argumente aktivieren
Wenn Sie Ihrem Projekt Safe Args hinzufügen möchten, fügen Sie der build.gradle
-Datei auf oberster Ebene die folgende classpath
hinzu:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Außerdem müssen Sie eines der beiden verfügbaren Plug-ins anwenden.
Wenn Sie Java-Code generieren möchten, der für Java- oder gemischte Java- und Kotlin-Module geeignet ist, fügen Sie der build.gradle
-Datei Ihrer App oder Ihres Moduls diese Zeile hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternativ können Sie Kotlin-Code generieren, der für reine Kotlin-Module geeignet ist. Fügen Sie dazu Folgendes hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Gemäß der Anleitung Zu AndroidX migrieren muss android.useAndroidX=true
in Ihrer gradle.properties
-Datei enthalten sein.
Generierter Code
Nachdem Sie sichere Args aktiviert haben, enthält der generierte Code Klassen und Methoden für definierten Aktionen sowie Klassen für die einzelnen gesendeten und Empfängerziel.
Sichere Args generiert eine Klasse für jedes Ziel, von dem eine Aktion ausgeht. Die
mit dem generierten Klassennamen „Directions“ mit der ursprünglichen Zielklasse
Namen. Wenn der Ausgangsort z. B. den Namen
SpecifyAmountFragment
, die generierte Klasse hat den Namen
SpecifyAmountFragmentDirections
.
Die generierte Klasse enthält eine statische Methode für jede Aktion, die im
Ursprungsziel. Bei dieser Methode werden alle definierten Aktionsparameter als
und gibt ein NavDirections
-Objekt zurück, das Sie direkt
an navigate()
.
Sichere Args-Beispiel
Stellen Sie sich beispielsweise ein Navigationsdiagramm mit einer einzigen Aktion vor, die zwei
SpecifyAmountFragment
und ConfirmationFragment
. Die
ConfirmationFragment
verwendet einen einzelnen float
-Parameter, den Sie als Teil angeben
der Handlung.
Sichere Args generiert eine SpecifyAmountFragmentDirections
-Klasse mit einem einzelnen
actionSpecifyAmountFragmentToConfirmationFragment()
und einer inneren
Klasse namens ActionSpecifyAmountFragmentToConfirmationFragment
. Das innere
Klasse wird von NavDirections
abgeleitet und speichert die zugehörige Aktions-ID und
float
-Parameter. Das zurückgegebene NavDirections
-Objekt kann dann
direkt an navigate()
, wie im folgenden Beispiel gezeigt:
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);
}
Weitere Informationen zur Übergabe von Daten zwischen Zielen mit sicheren Argumenten finden Sie unter Sichere Args verwenden, um Daten mit Typsicherheit zu übergeben
Typsicherheit durch Verwendung von Safe Args gewährleisten
Mithilfe von sicheren Args zwischen Zielen navigieren Gradle-Plug-in. Dieses Plug-in generiert einfache Objekt- und Builder-Klassen, typsichere Navigation und Argumentübergabe zwischen Zielen aktivieren
Wenn Sie Ihrem Projekt Safe Args hinzufügen möchten, fügen Sie der build.gradle
-Datei auf oberster Ebene die folgende classpath
hinzu:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Außerdem müssen Sie eines der beiden verfügbaren Plug-ins anwenden.
Wenn Sie Java-Code generieren möchten, der für Java- oder gemischte Java- und Kotlin-Module geeignet ist, fügen Sie der build.gradle
-Datei Ihrer App oder Ihres Moduls diese Zeile hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternativ können Sie Kotlin-Code generieren, der für reine Kotlin-Module geeignet ist. Fügen Sie dazu Folgendes hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Gemäß der Anleitung Zu AndroidX migrieren muss android.useAndroidX=true
in Ihrer gradle.properties
-Datei enthalten sein.
Nachdem Sie sichere Args aktiviert haben, generiert das Plug-in Code, der Klassen und
Methoden für jede von Ihnen definierte Aktion anwenden. Bei jeder Aktion werden
generiert eine Klasse für jedes Startziel, d. h. das Ziel
von dem die Handlung ausgeht. Der generierte Klassenname ist eine Kombination aus
den Namen der Ausgangsklasse und das Wort „Directions“. Beispiel:
Wenn das Ziel den Namen SpecifyAmountFragment
hat, lautet die generierte Klasse
mit dem Namen SpecifyAmountFragmentDirections
. Die generierte Klasse enthält eine statische
-Methode für jede im Ursprungsziel definierte Aktion. Diese Methode nimmt
beliebige festgelegte Aktionsparameter als Argumente und gibt ein NavDirections
-Objekt zurück
die Sie an navigate()
übergeben können.
Nehmen wir als Beispiel an, wir haben ein Navigationsdiagramm mit einer einzigen Aktion,
verbindet das Ausgangsziel SpecifyAmountFragment
mit einem empfangenden
Ziel: ConfirmationFragment
.
Sichere Args generiert eine SpecifyAmountFragmentDirections
-Klasse mit einem einzelnen
actionSpecifyAmountFragmentToConfirmationFragment()
, die eine
NavDirections
-Objekt. Dieses zurückgegebene NavDirections
-Objekt kann dann
direkt an navigate()
, wie im folgenden Beispiel gezeigt:
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); }
Weitere Informationen zur Übergabe von Daten zwischen Zielen mit sicheren Argumenten finden Sie unter Verwenden Sie sichere Args zur Weitergabe von Daten mit dem Typ "Sicherheit" in Daten übertragen zwischen Ziele