Você pode criar conexões entre fragmentos usando ações de navegação. Chamar uma ação de navegação leva o usuário de um destino para outro. Este guia explica o que são ações e mostra como as criar e usar.
Visão geral
Cada ação tem um ID exclusivo e pode conter atributos adicionais, como um destino. O destino define a tela mostrada pelo app ao usuário quando ele aciona a ação. A ação também pode usar argumentos para transportar dados de um destino para outro.
- Safe Args: com ações, é possível substituir IDs de recursos por operações geradas pelo Safe Args, proporcionando mais segurança no momento da compilação.
- Animações: também é possível animar as transições entre os destinos. Para saber mais, consulte Animar transições entre os destinos.
Exemplos
Defina as ações no arquivo XML do gráfico de navegação usando as tags <action>
. O
snippet a seguir implementa uma ação que representa uma transição de
FragmentA
para FragmentB
.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
Navegar usando uma ação
Para navegar usando essa ação, chame NavController.navigate()
e transmita
o id
da ação:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
Ações globais
Você pode usar ações globais para navegar até um destino a partir de qualquer lugar.
Para qualquer destino no app que possa ser acessado por mais de um caminho, defina uma ação global correspondente que navegue até esse destino.
Confira o exemplo a seguir. Os destinos results_winner
e game_over
precisam aparecer no destino inicial. A
ação action_pop_out_of_game
possibilita isso.
action_pop_out_of_game
é uma ação global fora de qualquer fragmento específico.
Isso significa que é possível referenciar e chamar a função em qualquer lugar da
in_game_nav_graph
.
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/in_game_nav_graph"
app:startDestination="@id/in_game">
<!-- Action back to destination which launched into this in_game_nav_graph -->
<action android:id="@+id/action_pop_out_of_game"
app:popUpTo="@id/in_game_nav_graph"
app:popUpToInclusive="true" />
<fragment
android:id="@+id/in_game"
android:name="com.example.android.gamemodule.InGame"
android:label="Game">
<action
android:id="@+id/action_in_game_to_resultsWinner"
app:destination="@id/results_winner" />
<action
android:id="@+id/action_in_game_to_gameOver"
app:destination="@id/game_over" />
</fragment>
<fragment
android:id="@+id/results_winner"
android:name="com.example.android.gamemodule.ResultsWinner" />
<fragment
android:id="@+id/game_over"
android:name="com.example.android.gamemodule.GameOver"
android:label="fragment_game_over"
tools:layout="@layout/fragment_game_over" />
</navigation>