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.

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>