Safe Args

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.