Safe Args

Il modo consigliato per navigare tra le destinazioni è utilizzare il plug-in Safe Args Gradle. Questo plug-in genera classi di oggetti e builder che consentono la navigazione sicura per tipo tra le destinazioni. Utilizza Args sicuri per navigare e passare dati tra destinazioni.

Abilita Args sicuri

Per aggiungere Args sicuri al tuo progetto, includi i seguenti classpath nel file build.gradle di primo livello:

trendy

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

Kotlin

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

Devi anche applicare uno dei due plug-in disponibili.

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

trendy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

trendy

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

Kotlin

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

Devi avere android.useAndroidX=true nel file gradle.properties, in base alla migrazione ad AndroidX.

Codice generato

Dopo aver abilitato Args sicuri, il codice generato contiene classi e metodi per ogni azione che hai definito, nonché le classi che corrispondono a ciascuna destinazione di invio e ricezione.

Safe Args genera una classe per ogni destinazione in cui ha origine un'azione. Il nome della classe generato aggiunge "Indicazioni stradali" al nome della 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 nella destinazione di origine. Questo metodo prende tutti i parametri di azione definiti come argomenti e restituisce un oggetto NavDirections che puoi passare direttamente a navigate().

Esempio di Args sicuri

Ad esempio, considera un grafico di navigazione con una singola azione che collega due destinazioni, SpecifyAmountFragment e ConfirmationFragment. ConfirmationFragment prende un singolo parametro float da te fornito come parte dell'azione.

Safe Args genera una classe SpecifyAmountFragmentDirections con un singolo metodo, actionSpecifyAmountFragmentToConfirmationFragment(), e una classe interna denominata ActionSpecifyAmountFragmentToConfirmationFragment. La classe interna viene ricavata da NavDirections e memorizza l'ID azione associato e il parametro 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 saperne di più sul passaggio di dati tra destinazioni con Args sicuri, consulta Utilizzare gli Args sicuri per trasmettere dati con sicurezza del tipo.

Garantisci la sicurezza dei tipi utilizzando gli Args sicuri

Naviga da una destinazione all'altra usando il plug-in Safe Args Gradle. Questo plug-in genera semplici classi di oggetti e builder che consentono la navigazione con sicurezza tipo e il passaggio di argomenti tra le destinazioni.

Per aggiungere Args sicuri al tuo progetto, includi i seguenti classpath nel file build.gradle di primo livello:

trendy

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

Kotlin

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

Devi anche applicare uno dei due plug-in disponibili.

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

trendy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

trendy

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

Kotlin

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

Devi avere android.useAndroidX=true nel file gradle.properties, in base alla migrazione ad AndroidX.

Dopo aver abilitato Safe Args, il plug-in genera un codice che contiene classi e metodi per ogni azione definita. Per ogni azione, Safe Args genera anche una classe per ogni destinazione di origine, che è la destinazione da cui ha origine l'azione. Il nome della classe generato è una combinazione del nome della classe di destinazione di origine e della parola "Indicazioni stradali". Ad esempio, se la destinazione è denominata SpecifyAmountFragment, la classe generata è denominata SpecifyAmountFragmentDirections. La classe generata contiene un metodo statico per ogni azione definita nella destinazione di origine. Questo metodo accetta tutti i parametri di azione definiti 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 che collega la destinazione di origine, SpecifyAmountFragment, a una destinazione ricevente, ConfirmationFragment.

Safe Args genera una classe SpecifyAmountFragmentDirections con un singolo metodo, actionSpecifyAmountFragmentToConfirmationFragment(), che restituisce un oggetto NavDirections. L'oggetto NavDirections restituito può quindi essere trasmesso 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 di dati tra destinazioni con Args sicuri, consulta Utilizzare gli Args sicuri per trasmettere dati con sicurezza dei tipi in Trasmettere dati tra destinazioni.