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

Per aggiungere Safe Args al progetto, includi il seguente classpath nel file build.gradle di primo livello:

Groovy

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

Kotlin

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

Devi anche applicare uno dei due plug-in disponibili.

Per generare codice in linguaggio Java adatto per moduli Java o misti Java e Kotlin, aggiungi questa riga al file build.gradle della tua app o del tuo modulo:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

In alternativa, per generare codice Kotlin adatto per i moduli solo Kotlin, aggiungi:

Groovy

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

Kotlin

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

Devi avere android.useAndroidX=true nel file gradle.properties come indicato in Migrazione ad 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 . 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.

Per aggiungere Safe Args al progetto, includi il seguente classpath nel file build.gradle di primo livello:

Groovy

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

Kotlin

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

Devi anche applicare uno dei due plug-in disponibili.

Per generare codice in linguaggio Java adatto per moduli Java o misti Java e Kotlin, aggiungi questa riga al file build.gradle della tua app o del tuo modulo:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

In alternativa, per generare codice Kotlin adatto per i moduli solo Kotlin, aggiungi:

Groovy

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

Kotlin

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

Devi avere android.useAndroidX=true nel file gradle.properties come indicato in Migrazione ad 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.