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.
- Args sicuri: utilizzando le azioni, puoi sostituire gli ID risorsa con Sicuro Operazioni generate da Args, che forniscono ulteriore sicurezza in fase di compilazione.
- Animazioni: puoi anche animare le transizioni tra le destinazioni. Per ulteriori informazioni, consulta l'articolo Animare le transizioni tra le destinazioni.
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>
Navigare usando un'azione
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>