Usar ações de navegação e fragmentos

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.

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>

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>