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 arg. sicuri al tuo progetto, includi i seguenti classpath nel file build.gradle di primo livello:

Alla moda

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

Devi inoltre applicare uno dei due plug-in disponibili.

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

Alla moda

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Alla moda

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

Kotlin

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

Devi avere android.useAndroidX=true nel tuo gradle.properties file in base a 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 arg. sicuri al tuo progetto, includi i seguenti classpath nel file build.gradle di primo livello:

Alla moda

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

Devi inoltre applicare uno dei due plug-in disponibili.

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

Alla moda

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Alla moda

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

Kotlin

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

Devi avere android.useAndroidX=true nel tuo gradle.properties file in base a 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.