Die empfohlene Methode zum Navigieren zwischen Zielen ist die Verwendung des Safe Args-Gradle-Plug-ins. Dieses Plug-in generiert Objekt- und Builder-Klassen, die eine typsichere Navigation zwischen Zielen ermöglichen. Verwenden Sie Safe Args für die Navigation und Datenübergabe zwischen Zielen.
Safe Args aktivieren
Wenn Sie Safe Args in Ihr Projekt einfügen möchten, fügen Sie die folgende classpath in Ihre build.gradle-Datei auf oberster Ebene ein:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.8" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.8" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Außerdem müssen Sie 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 build.gradle-Datei Ihrer App oder Ihres Moduls ein:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Wenn Sie stattdessen Kotlin-Code generieren möchten, der für reine Kotlin-Module geeignet ist, fügen Sie Folgendes hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Gemäß Zu AndroidX migrieren muss android.useAndroidX=true in Ihrer gradle.properties-Datei vorhanden 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 für jedes Ziel, von dem eine Aktion ausgeht, eine Klasse. Dem Namen der ursprünglichen Zielklasse wird „Directions“ hinzugefügt. Wenn das ursprüngliche Ziel beispielsweise SpecifyAmountFragment heißt, wird die generierte Klasse SpecifyAmountFragmentDirections genannt.
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 direkt an navigate() übergeben können.
Beispiel für Safe Args
Angenommen, Sie haben ein Navigationsdiagramm mit einer einzelnen Aktion, die zwei Ziele, SpecifyAmountFragment und ConfirmationFragment, verbindet. Für ConfirmationFragment wird ein einzelner float-Parameter verwendet, den Sie als Teil der Aktion angeben.
Safe Args generiert eine SpecifyAmountFragmentDirections-Klasse mit einer 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 zum Übergeben von Daten zwischen Zielen mit Safe Args finden Sie unter Safe Args zum typensicheren Übergeben von Daten verwenden.
Typsicherheit mit Safe Args gewährleisten
Mit dem Safe Args-Gradle-Plugin können Sie zwischen Zielen wechseln. Mit diesem Plug-in werden einfache Objekt- und Builder-Klassen generiert, die eine typsichere Navigation und Argumentübergabe zwischen Zielen ermöglichen.
Wenn Sie Safe Args in Ihr Projekt einfügen möchten, fügen Sie die folgende classpath in Ihre build.gradle-Datei auf oberster Ebene ein:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.8" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.8" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Außerdem müssen Sie 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 build.gradle-Datei Ihrer App oder Ihres Moduls ein:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Wenn Sie stattdessen Kotlin-Code generieren möchten, der für reine Kotlin-Module geeignet ist, fügen Sie Folgendes hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Gemäß Zu AndroidX migrieren muss android.useAndroidX=true in Ihrer gradle.properties-Datei vorhanden 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. Für jede Aktion generiert Safe Args auch eine Klasse für jedes Ausgangsziel, also das Ziel, von dem die Aktion ausgeht. Der generierte Klassenname ist eine Kombination aus dem Namen der ursprünglichen Zielklassen und dem Wort „Directions“. Wenn das Ziel beispielsweise SpecifyAmountFragment heißt, lautet der Name der generierten 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 ursprüngliche Ziel SpecifyAmountFragment mit dem empfangenden Ziel ConfirmationFragment verbindet.
Safe Args generiert eine SpecifyAmountFragmentDirections-Klasse mit einer einzelnen Methode, actionSpecifyAmountFragmentToConfirmationFragment(), die ein NavDirections-Objekt zurückgibt. Dieses 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 Safe Args zum Übergeben von Daten mit Typsicherheit verwenden im Abschnitt Daten zwischen Zielen übergeben.