Für die Navigation zwischen Zielen wird die Verwendung des Safe Args Gradle-Plug-ins empfohlen. Dieses Plug-in generiert Objekt- und Builder-Klassen, die eine typsichere Navigation zwischen Zielen ermöglichen. Verwenden Sie Safe Args zum Navigieren und Übergeben von Daten zwischen Zielen.
Sichere Argumente aktivieren
Fügen Sie die folgende classpath
in die build.gradle
-Datei der obersten Ebene ein, um Ihrem Projekt Safe Args hinzuzufügen:
Groovig
buildscript { repositories { google() } dependencies { def nav_version = "2.7.7" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.7.7" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Sie müssen außerdem eines von zwei verfügbaren Plug-ins anwenden.
Wenn Sie Java-Sprachcode generieren möchten, der für Java oder gemischte Java- und Kotlin-Module geeignet ist, fügen Sie diese Zeile in die Datei build.gradle
Ihrer App oder Ihres Moduls ein:
Groovig
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Zum Generieren von Kotlin-Code, der nur für Kotlin-basierte Module geeignet ist, können Sie alternativ Folgendes hinzufügen:
Groovig
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Wie unter Zu AndroidX migrieren beschrieben, muss android.useAndroidX=true
in Ihrer gradle.properties
-Datei enthalten sein.
Generierter Code
Nachdem Sie Safe Args aktiviert haben, enthält der generierte Code Klassen und Methoden für jede von Ihnen definierte Aktion sowie Klassen, die jedem Sende- und Empfangsziel entsprechen.
Safe Args generiert eine Klasse für jedes Ziel, von dem eine Aktion ausgeht. Durch den generierten Klassennamen wird dem Namen der ursprünglichen Zielklasse "Directions" hinzugefügt. Lautet das Ursprungsziel beispielsweise SpecifyAmountFragment
, heißt die generierte Klasse SpecifyAmountFragmentDirections
.
Die generierte Klasse enthält eine statische Methode für jede Aktion, die im Ausgangsziel definiert ist. Diese Methode verwendet alle definierten Aktionsparameter als Argumente und gibt ein NavDirections
-Objekt zurück, das Sie direkt an navigate()
übergeben können.
Beispiel für sichere Argumente
Angenommen, ein Navigationsdiagramm mit einer einzelnen Aktion verbindet die beiden Ziele SpecifyAmountFragment
und ConfirmationFragment
. Für ConfirmationFragment
wird ein einzelner float
-Parameter verwendet, den Sie als Teil der Aktion angeben.
Safe Args generiert eine SpecifyAmountFragmentDirections
-Klasse mit der einzelnen Methode actionSpecifyAmountFragmentToConfirmationFragment()
und einer inneren Klasse namens ActionSpecifyAmountFragmentToConfirmationFragment
. Die innere Klasse wird von NavDirections
abgeleitet und speichert die zugehörige Aktions-ID und den Parameter float
. Das zurückgegebene NavDirections
-Objekt kann dann direkt an navigate()
übergeben werden, 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 Safe Args finden Sie unter Use Safe Args to pass data with type safety.
Typsicherheit durch Verwendung von Safe Args sicherstellen
Mit dem Safe Args Gradle-Plug-in können Sie zwischen Zielen wechseln. Dieses Plug-in generiert einfache Objekt- und Builder-Klassen, die eine typsichere Navigation und die Argumentübergabe zwischen Zielen ermöglichen.
Fügen Sie die folgende classpath
in die build.gradle
-Datei der obersten Ebene ein, um Ihrem Projekt Safe Args hinzuzufügen:
Groovig
buildscript { repositories { google() } dependencies { def nav_version = "2.7.7" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.7.7" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Sie müssen außerdem eines von zwei verfügbaren Plug-ins anwenden.
Wenn Sie Java-Sprachcode generieren möchten, der für Java oder gemischte Java- und Kotlin-Module geeignet ist, fügen Sie diese Zeile in die Datei build.gradle
Ihrer App oder Ihres Moduls ein:
Groovig
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Zum Generieren von Kotlin-Code, der nur für Kotlin-basierte Module geeignet ist, können Sie alternativ Folgendes hinzufügen:
Groovig
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Wie unter Zu AndroidX migrieren beschrieben, muss android.useAndroidX=true
in Ihrer gradle.properties
-Datei enthalten sein.
Nachdem Sie Safe Args aktiviert haben, generiert das Plug-in Code, der Klassen und Methoden für jede von Ihnen definierte Aktion enthält. Safe Args generiert für jede Aktion außerdem eine Klasse für jedes Ausgangsziel, d. h. das Ziel, von dem die Aktion ausgeht. Der generierte Klassenname ist eine Kombination aus dem Namen der ursprünglichen Zielklasse und dem Wort "Directions". Lautet das Ziel beispielsweise SpecifyAmountFragment
, heißt die generierte Klasse SpecifyAmountFragmentDirections
. Die generierte Klasse enthält eine statische Methode für jede Aktion, die im ursprünglichen Ziel definiert ist. Diese Methode verwendet alle definierten Aktionsparameter als Argumente und gibt ein NavDirections
-Objekt zurück, das Sie an navigate()
übergeben können.
Angenommen, wir haben ein Navigationsdiagramm mit einer einzelnen Aktion, die das Ursprungsziel SpecifyAmountFragment
mit dem empfangenden Ziel ConfirmationFragment
verbindet.
Safe Args generiert eine SpecifyAmountFragmentDirections
-Klasse mit der einzelnen Methode actionSpecifyAmountFragmentToConfirmationFragment()
, die ein NavDirections
-Objekt zurückgibt. Das zurückgegebene NavDirections
-Objekt kann dann direkt an navigate()
übergeben werden, 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 zum Übergeben von Daten zwischen Zielen mit Safe Args finden Sie unter Daten zwischen Zielen weitergeben unter Safe Args zum Übergeben von Daten mit Typsicherheit verwenden.