Verbindungen zwischen Fragmenten können mithilfe von Navigationsaktionen erstellt werden. Durch das Aufrufen einer Navigationsaktion werden Nutzende von einem Ziel zum anderen weitergeleitet. In diesem Leitfaden wird erläutert, was Aktionen sind und wie Sie sie erstellen und verwenden können.
Übersicht
Jede Aktion hat eine eindeutige ID und kann zusätzliche Attribute enthalten, z. B. ein Ziel. Das Ziel definiert den Bildschirm, zu dem die App den Nutzer weiterleitet, wenn er die Aktion auslöst. Die Aktion kann auch Argumente verwenden, um Daten von einem Ziel zu einem anderen zu übertragen.
- Safe Args:Mithilfe von Aktionen können Sie Ressourcen-IDs durch von Safe Args generierte Vorgänge ersetzen, um für zusätzliche Sicherheit bei der Kompilierung zu sorgen.
- Animationen:Sie können auch Übergänge zwischen den Zielen animieren. Weitere Informationen finden Sie unter Übergänge zwischen Zielen animieren.
Beispiele
Definieren Sie mithilfe der <action>
-Tags Aktionen in der XML-Datei für die Navigationsgrafik. Mit dem folgenden Snippet wird eine Aktion implementiert, die einen Übergang von FragmentA
zu FragmentB
darstellt.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
Mit einer Aktion navigieren
Zum Navigieren mit dieser Aktion rufen Sie NavController.navigate()
auf und übergeben das id
der Aktion:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
Globale Aktionen
Mit globalen Aktionen können Sie von überall aus zu einem Ziel navigieren.
Definieren Sie für jedes Ziel in Ihrer Anwendung, auf das über mehr als einen Pfad zugegriffen werden kann, eine entsprechende globale Aktion, die zu diesem Ziel führt.
Sehen Sie sich das folgende Beispiel an. Sowohl results_winner
als auch game_over
müssen am Ziel „Zuhause“ angezeigt werden. Die action_pop_out_of_game
-Aktion bietet die Möglichkeit dazu. action_pop_out_of_game
ist eine globale Aktion außerhalb eines bestimmten Fragments.
Das bedeutet, dass Sie sie überall innerhalb von in_game_nav_graph
referenzieren und aufrufen können.
<?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>