Navigationsaktionen und Fragmente verwenden

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.

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>

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>