Para navegar entre destinos, te recomendamos que uses el complemento Safe Args de Gradle, que genera clases de objetos y compiladores que permiten la navegación de tipo seguro entre destinos. Usa Safe Args para navegar y pasar datos entre destinos.
Cómo habilitar Safe Args
Para agregar Safe Args a tu proyecto, incluye la siguiente classpath
en tu archivo build.gradle
de nivel superior:
Groovy
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") } }
También debes aplicar uno de los dos complementos disponibles.
Para generar código de lenguaje Java adecuado para Java o módulos combinados de Java y Kotlin, agrega esta línea al archivo build.gradle
de tu app o módulo:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Como alternativa, para generar el código de Kotlin adecuado para módulos solo de Kotlin, agrega lo siguiente:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Tienes que tener el objeto android.useAndroidX=true
en tu archivo gradle.properties
, según se indica en Cómo migrar a AndroidX.
Código generado
Después de que habilites Safe Args, tu código generado contendrá clases y métodos para cada acción que hayas definido, además de clases que correspondan a cada destino de envío y recepción.
Safe Args genera una clase para cada destino en el que se origina una acción. Al nombre de la clase de destino de origen se le agrega "Directions". Por ejemplo, si el destino de origen tiene el nombre SpecifyAmountFragment
, la clase generada se llamará SpecifyAmountFragmentDirections
.
La clase generada contiene un método estático para cada acción definida en el destino de origen, que toma cualquier parámetro de acción definido como argumento y muestra un objeto NavDirections
que puedes pasar directamente a navigate()
.
Ejemplo de Safe Args
Por ejemplo, imagina un gráfico de navegación con una sola acción que conecta dos destinos: SpecifyAmountFragment
y ConfirmationFragment
. ConfirmationFragment
toma un solo parámetro float
que proporcionas como parte de la acción.
Safe Args genera una clase SpecifyAmountFragmentDirections
con un solo método, actionSpecifyAmountFragmentToConfirmationFragment()
, y una clase interna llamada ActionSpecifyAmountFragmentToConfirmationFragment
. La clase interna deriva de NavDirections
y almacena el ID de acción asociado y el parámetro float
. Luego, el objeto NavDirections
que se muestra se puede pasar directamente a navigate()
, como se ve en el siguiente ejemplo:
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);
}
Si quieres obtener más información para pasar datos entre destinos con Safe Args, consulta Cómo usar Safe Args para pasar datos con seguridad de tipo.
Cómo garantizar la seguridad de tipo con Safe Args
Navega entre destinos con el complemento de Gradle Safe Args. Este complemento genera clases de objetos y compiladores simples que permiten navegar con seguridad de tipo y pasar argumentos entre destinos.
Para agregar Safe Args a tu proyecto, incluye la siguiente classpath
en tu archivo build.gradle
de nivel superior:
Groovy
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") } }
También debes aplicar uno de los dos complementos disponibles.
Para generar código de lenguaje Java adecuado para Java o módulos combinados de Java y Kotlin, agrega esta línea al archivo build.gradle
de tu app o módulo:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Como alternativa, para generar el código de Kotlin adecuado para módulos solo de Kotlin, agrega lo siguiente:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Tienes que tener el objeto android.useAndroidX=true
en tu archivo gradle.properties
, según se indica en Cómo migrar a AndroidX.
Después de habilitar Safe Args, el complemento genera código que contiene clases y métodos para cada acción que definiste. En cada acción, Safe Args también genera una clase para cada destino de origen, que es el destino desde el que se origina la acción. El nombre de clase generado es una combinación del nombre de clase del destino de origen y la palabra "Directions". Por ejemplo, si el destino se llama SpecifyAmountFragment
, la clase generada se llama SpecifyAmountFragmentDirections
. La clase generada contiene un método estático para cada acción definida en el destino de origen, que toma cualquier parámetro de acción definido como argumento y muestra un objeto NavDirections
que puedes pasar a navigate()
.
Como ejemplo, imagina que tienes un gráfico de navegación con una sola acción que conecta el destino de origen, SpecifyAmountFragment
, con un destino de recepción, ConfirmationFragment
.
Safe Args genera una clase SpecifyAmountFragmentDirections
con un solo método, actionSpecifyAmountFragmentToConfirmationFragment()
, que muestra un objeto NavDirections
. Luego, puedes pasar este objeto NavDirections
que se devolvió directamente a navigate()
, como se indica en el siguiente ejemplo:
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); }
Si quieres obtener más información para pasar datos entre destinos con Safe Args, consulta Cómo usar Safe Args para pasar datos con seguridad de tipo en Cómo pasar datos entre destinos.