Utilizzare le azioni di navigazione e i frammenti

Puoi creare connessioni tra frammenti utilizzando le azioni di navigazione. L'evocazione di un l'azione di navigazione porta l'utente da una destinazione a un'altra. Questa guida spiega cosa sono le azioni e come è possibile crearle e utilizzarle.

Panoramica

Ogni azione ha un ID univoco e può contenere attributi aggiuntivi, come destinazione. La destinazione definisce la schermata a cui l'app indirizza l'utente quando attivano l'azione. L'azione può anche utilizzare argomenti per trasportare i dati da una destinazione a un'altra.

Esempi

Definisci le azioni nel file XML del grafico di navigazione utilizzando i tag <action>. La il seguente snippet implementa un'azione che rappresenta una transizione Da FragmentA a FragmentB.

<fragment
    android:id="@+id/fragmentA"
    android:name="com.example.FragmentA">
    <action
        android:id="@+id/action_fragmentA_to_fragmentB"
        app:destination="@id/fragmentB" />
</fragment>

Per navigare utilizzando questa azione, chiama NavController.navigate() e superi è id dell'azione:

navController.navigate(R.id.action_fragmentA_to_fragmentB)

Azioni globali

Puoi utilizzare azioni globali per raggiungere una destinazione ovunque ti trovi.

Per qualsiasi destinazione dell'app a cui è possibile accedere tramite più di un percorso, definisci un'azione globale corrispondente che conduce a quell'azione destinazione.

Considera il seguente esempio. results_winner e game_over entrambe le destinazioni devono apparire nella destinazione di casa. La L'azione action_pop_out_of_game consente di farlo; action_pop_out_of_gameè un'azione globale esterna a uno specifico frammento. Ciò significa che puoi farvi riferimento e chiamarlo ovunque all'interno 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>