Puoi creare connessioni tra frammenti utilizzando le azioni di navigazione. L'attivazione di un'azione di navigazione porta l'utente da una destinazione all'altra. Questa guida spiega cosa sono le azioni e come puoi crearle e utilizzarle.
Panoramica
Ogni azione ha un ID univoco e può contenere attributi aggiuntivi, come una destinazione. La destinazione definisce la schermata a cui l'app indirizza l'utente quando attiva l'azione. L'azione può usare gli argomenti anche per trasportare i dati da una destinazione all'altra.
- Args sicuri: utilizzando le azioni, puoi sostituire gli ID risorsa con operazioni generate da Args sicuri, fornendo ulteriore sicurezza in fase di compilazione.
- Animazioni: puoi anche animare le transizioni tra le destinazioni. Per ulteriori informazioni, consulta la sezione Animare le transizioni tra le destinazioni.
Esempi
Definisci le azioni nel file XML del grafico di navigazione utilizzando i tag <action>
. Lo
snippet seguente 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 utilizzando un'azione
Per navigare utilizzando questa azione, chiama NavController.navigate()
e trasmetti
il id
dell'azione:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
Azioni globali
Puoi utilizzare le azioni globali per raggiungere una destinazione da qualsiasi luogo.
Per qualsiasi destinazione nella tua app accessibile tramite più percorsi, definisci un'azione globale corrispondente che indirizzi a quella destinazione.
Considera il seguente esempio. Le destinazioni results_winner
e game_over
devono apparire insieme alla destinazione di casa. L'azione action_pop_out_of_game
consente di eseguire questa operazione; action_pop_out_of_game
è un'azione globale esterna a ogni frammento specifico.
Ciò significa che puoi farvi riferimento e chiamarlo ovunque all'interno di 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>