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.
Considere este exemplo. 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 do
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>