Vous pouvez établir des connexions entre fragments à l'aide des actions de navigation. Lorsque vous appelez une action de navigation, l'utilisateur passe d'une destination à une autre. Ce guide explique en quoi consistent les actions, comment les créer et les utiliser.
Présentation
Chaque action possède un identifiant unique et peut contenir des attributs supplémentaires, tels qu'une destination. La destination définit l'écran sur lequel l'application redirige l'utilisateur lorsqu'il déclenche l'action. L'action peut également utiliser des arguments pour transférer des données d'une destination à une autre.
- Safe Args : à l'aide d'actions, vous pouvez remplacer les ID de ressource par des opérations générées par Safe Args, ce qui offre une sécurité supplémentaire au moment de la compilation.
- Animations : vous pouvez également animer des transitions entre les destinations. Pour en savoir plus, consultez Animer des transitions entre les destinations.
Exemples
Définissez des actions dans le fichier XML de votre graphique de navigation à l'aide des balises <action>
. L'extrait de code suivant implémente une action qui représente une transition de FragmentA
vers FragmentB
.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
Naviguer à l'aide d'une action
Pour naviguer à l'aide de cette action, appelez NavController.navigate()
et transmettez-lui l'id
de l'action :
navController.navigate(R.id.action_fragmentA_to_fragmentB)
Actions générales
Vous pouvez utiliser des actions générales pour accéder à une destination depuis n'importe quel emplacement.
Pour toute destination au sein de votre appli accessible via plusieurs chemins, définissez une action globale correspondante permettant d'accéder à cette destination.
Prenons l'exemple suivant : les destinations results_winner
et game_over
doivent toutes deux apparaître dans la destination d'accueil. L'action action_pop_out_of_game
étant une action globale en dehors action_pop_out_of_game
d'un fragment spécifique, elle permet de le faire.
Cela signifie que vous pouvez la référencer et l'appeler n'importe où au sein de 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>