A maneira recomendada de navegar entre destinos é usar o plug-in Safe Args do Gradle. Esse plug-in gera classes de objetos e builders que permitem a navegação com segurança de tipos entre destinos. Use o Safe Args para navegar e transmitir dados entre destinos.
Ativar o Safe Args
Para adicionar Safe Args
ao seu projeto, inclua o seguinte classpath
no seu arquivo build.gradle
de nível 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") } }
Você também precisa aplicar um dos dois plug-ins disponíveis.
Para gerar um código de linguagem Java adequado para módulos Java ou Java e Kotlin mistos, adicione
esta linha ao arquivo build.gradle
do seu app ou módulo:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Como alternativa, para gerar o código Kotlin adequado para módulos somente Kotlin, adicione:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Você precisa ter android.useAndroidX=true
no
arquivo gradle.properties
, como mostrado em
Migrar para o AndroidX.
Código gerado
Depois de ativar o Safe Args, o código gerado contém classes e métodos para cada ação definida, bem como classes correspondentes a cada destino de envio e recebimento.
O Safe Args gera uma classe para cada destino de origem de uma ação. O
nome da classe gerada adiciona "Directions" ao nome da classe de destino
de origem. Por exemplo, se o destino de origem tem o nome de
SpecifyAmountFragment
, a classe gerada será chamada
SpecifyAmountFragmentDirections
.
A classe gerada contém um método estático para cada ação definida no
destino de origem. Esse método usa qualquer parâmetro de ação definido como
argumento e retorna um objeto NavDirections
que você pode transmitir diretamente
para navigate()
.
Exemplo de Safe Args
Por exemplo, considere um gráfico de navegação com uma única ação que conecta dois
destinos, SpecifyAmountFragment
e ConfirmationFragment
. O
ConfirmationFragment
usa um único parâmetro float
fornecido
como parte da ação.
O Safe Args gera uma classe SpecifyAmountFragmentDirections
com um único
método, actionSpecifyAmountFragmentToConfirmationFragment()
, e uma classe interna
chamada ActionSpecifyAmountFragmentToConfirmationFragment
. A classe
interna é derivada de NavDirections
e armazena o ID de ação associado e o parâmetro
float
. O objeto NavDirections
retornado pode ser transmitido
diretamente para navigate()
, conforme mostrado no exemplo a seguir.
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);
}
Para conferir mais informações sobre como transmitir dados entre destinos com o Safe Args, consulte Usar o Safe Args para transmitir dados com segurança de tipos.
Garantir a segurança de tipos usando Safe Args
Navegue entre destinos usando o plug-in Safe Args do Gradle. Esse plug-in gera classes de builders e objetos simples que permitem transmitir argumentos e fazer a navegação com segurança de tipos entre destinos.
Para adicionar Safe Args
ao seu projeto, inclua o seguinte classpath
no seu arquivo build.gradle
de nível 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") } }
Você também precisa aplicar um dos dois plug-ins disponíveis.
Para gerar um código de linguagem Java adequado para módulos Java ou Java e Kotlin mistos, adicione
esta linha ao arquivo build.gradle
do seu app ou módulo:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Como alternativa, para gerar o código Kotlin adequado para módulos somente Kotlin, adicione:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Você precisa ter android.useAndroidX=true
no
arquivo gradle.properties
, como mostrado em
Migrar para o AndroidX.
Depois que o plug-in Safe Args é ativado, ele gera um código que contém classes e
métodos para cada ação que você definiu. Para cada ação, o Safe Args também
gerará uma classe para cada destino de origem, que é o destino
de origem da ação. O nome da classe gerada é uma combinação do
nome da classe de destino de origem e da palavra "Directions". Por exemplo,
se o destino tem o nome de SpecifyAmountFragment
, a classe gerada terá
o nome SpecifyAmountFragmentDirections
. A classe gerada contém um método estático
para cada ação definida no destino de origem. Esse método usa
qualquer parâmetro de ação definido como argumento e retorna um objeto NavDirections
que você pode transmitir para navigate()
.
Como exemplo, vamos supor que temos um gráfico de navegação com uma única ação que
conecta o destino de origem, SpecifyAmountFragment
, a um destino de recebimento,
ConfirmationFragment
.
O Safe Args gera uma classe SpecifyAmountFragmentDirections
com um único
método, actionSpecifyAmountFragmentToConfirmationFragment()
, que retorna um objeto
NavDirections
. Esse objeto NavDirections
retornado pode ser transmitido
diretamente para navigate()
, como mostrado no exemplo abaixo.
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); }
Para mais informações sobre como transmitir dados entre destinos com o Safe Args, consulte Usar o Safe Args para transmitir dados com segurança de tipos em Transmitir dados entre destinos.