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.