Safe Args

Il modo consigliato per navigare da una destinazione all'altra è utilizzare Safe Args Plug-in Gradle. Questo plug-in genera classi di oggetti e builder che consentono navigazione sicura per la digitazione tra le destinazioni. Utilizza Safe Args per navigazione e passaggio di dati tra destinazioni.

Attiva Safe Arg

To add Safe Args to your project, include the following classpath in your top level build.gradle file:

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

To generate Java language code suitable for Java or mixed Java and Kotlin modules, add this line to your app or module's build.gradle file:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:

Groovy

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

Kotlin

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

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to AndroidX.

Codice generato

Dopo aver attivato Safe Args, il codice generato contiene classi e metodi per ogni azione che hai definito, nonché le classi che corrispondono a ogni e la destinazione di destinazione.

Safe Args genera una classe per ogni destinazione in cui ha origine un'azione. La il nome della classe generato aggiunge "Directions" alla classe di destinazione di origine nome. Ad esempio, se la destinazione di origine è denominata SpecifyAmountFragment, la classe generata è denominata SpecifyAmountFragmentDirections.

La classe generata contiene un metodo statico per ogni azione definita nel destinazione di origine. Questo metodo utilizza tutti i parametri di azione definiti come argomenti e restituisce un oggetto NavDirections che puoi passare direttamente a navigate().

Esempio di Args sicuro

Ad esempio, considera un grafico di navigazione con una singola azione che collega due destinazioni, SpecifyAmountFragment e ConfirmationFragment. La ConfirmationFragment richiede un singolo parametro float che fornisci come parte dell'azione.

Safe Args genera una classe SpecifyAmountFragmentDirections con una singola actionSpecifyAmountFragmentToConfirmationFragment(), e un metodo interno chiamata ActionSpecifyAmountFragmentToConfirmationFragment. La parte interna deriva da NavDirections e archivia l'ID azione e float. L'oggetto NavDirections restituito può quindi essere passato direttamente a navigate(), come mostrato nell'esempio seguente:

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);
}

Per ulteriori informazioni sul trasferimento dei dati tra destinazioni con Safe Args, consulta Utilizza Safe Args per trasmettere dati con la sicurezza dei tipi.

Garantisci la sicurezza dei tipi utilizzando Safe Args

Naviga tra le destinazioni utilizzando Safe Args Plug-in Gradle. Questo plug-in genera semplici classi di oggetti e builder abilitare la navigazione sicura per il tipo e il passaggio di argomenti tra le destinazioni.

To add Safe Args to your project, include the following classpath in your top level build.gradle file:

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

To generate Java language code suitable for Java or mixed Java and Kotlin modules, add this line to your app or module's build.gradle file:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:

Groovy

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

Kotlin

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

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to AndroidX.

Una volta attivato Safe Args, il plug-in genera codice che contiene classi e per ogni azione definita. Per ogni azione, anche Safe Args Genera una classe per ogni destinazione di origine, ovvero la destinazione da cui ha origine l'azione. Il nome della classe generato è una combinazione il nome della classe di destinazione di origine e la parola "Directions". Ad esempio: Se la destinazione è denominata SpecifyAmountFragment, la classe generata è denominato SpecifyAmountFragmentDirections. La classe generata contiene un per ogni azione definita nella destinazione di origine. Questo metodo richiede qualsiasi parametro di azione definito come argomenti e restituisce un oggetto NavDirections che puoi passare a navigate().

Ad esempio, supponiamo di avere un grafico di navigazione con una singola azione collega la destinazione di origine, SpecifyAmountFragment, a un server destinazione, ConfirmationFragment.

Safe Args genera una classe SpecifyAmountFragmentDirections con una singola actionSpecifyAmountFragmentToConfirmationFragment(), che restituisce un NavDirections oggetto. Questo oggetto NavDirections restituito può quindi essere passato direttamente a navigate(), come mostrato nell'esempio seguente:

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);
}

Per ulteriori informazioni sul trasferimento dei dati tra le destinazioni con Safe Args, consulta Utilizza Safe Args per trasferire dati con la sicurezza del tipo in Trasmetti dati tra destinazioni.