Safe Args

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

如需将 Safe Args 添加到您的项目,请在顶层 build.gradle 文件中包含以下 classpath

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.9.0"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.0"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

您还必须应用以下两个可用插件之一。

如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块build.gradle 文件中:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

此外,如需生成仅适用于 Kotlin 模块的 Kotlin 语言代码,请添加以下行:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

根据迁移到 AndroidX 文档,您的 gradle.properties 文件中必须具有 android.useAndroidX=true

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

如需将 Safe Args 添加到您的项目,请在顶层 build.gradle 文件中包含以下 classpath

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.9.0"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.0"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

您还必须应用以下两个可用插件之一。

如需生成适用于 Java 模块或 Java 和 Kotlin 混合模块的 Java 语言代码,请将以下行添加到应用或模块build.gradle 文件中:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

此外,如需生成仅适用于 Kotlin 模块的 Kotlin 语言代码,请添加以下行:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

根据迁移到 AndroidX 文档,您的 gradle.properties 文件中必须具有 android.useAndroidX=true

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