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

Um sichere Argumente hinzuzufügen fügen Sie folgendes classpath in Ihre übergeordnete build.gradle-Datei ein:

Cool

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

Kotlin

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

Sie müssen außerdem eines der beiden verfügbaren Plug-ins anwenden.

Um für Java oder gemischte Java- und Kotlin-Module den Java-Sprachcode zu generieren, diese Zeile in die build.gradle-Datei Ihrer App oder Ihres Moduls ein:

Cool

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Alternativ können Sie folgenden Code hinzufügen, um Kotlin-Code zu generieren, der für reine Kotlin-Module geeignet ist:

Cool

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

Kotlin

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

android.useAndroidX=true muss in deinem gradle.properties Datei gemäß Zu AndroidX migrieren

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

Um sichere Argumente hinzuzufügen fügen Sie folgendes classpath in Ihre übergeordnete build.gradle-Datei ein:

Cool

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

Kotlin

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

Sie müssen außerdem eines der beiden verfügbaren Plug-ins anwenden.

Um für Java oder gemischte Java- und Kotlin-Module den Java-Sprachcode zu generieren, diese Zeile in die build.gradle-Datei Ihrer App oder Ihres Moduls ein:

Cool

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Alternativ können Sie folgenden Code hinzufügen, um Kotlin-Code zu generieren, der für reine Kotlin-Module geeignet ist:

Cool

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

Kotlin

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

android.useAndroidX=true muss in deinem gradle.properties Datei gemäß Zu AndroidX migrieren

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