Navigationsaktionen und Fragmente verwenden

Mithilfe von Navigationsaktionen können Sie Verbindungen zwischen Fragmenten herstellen. Durch Aufrufen eines Navigationsaktion Nutzende von einem Ziel zu einem anderen führt. Dieser Leitfaden wird erklärt, 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, wie z. B. Ziel. Das Ziel definiert den Bildschirm, zu dem die App den Nutzer weiterleitet. wenn sie die Aktion auslösen. Die Aktion kann auch Argumente verwenden, um Daten zu übertragen von einem Ziel zum anderen.

Beispiele

Definieren Sie mithilfe der <action>-Tags Aktionen in der XML-Datei des Navigationsdiagramms. Die implementiert das folgende Snippet eine Aktion, die einen Übergang von FragmentA in FragmentB.

<fragment
    android:id="@+id/fragmentA"
    android:name="com.example.FragmentA">
    <action
        android:id="@+id/action_fragmentA_to_fragmentB"
        app:destination="@id/fragmentB" />
</fragment>

Wenn Sie mit dieser Aktion navigieren möchten, rufen Sie NavController.navigate() auf und übergeben die Aktion id ist:

navController.navigate(R.id.action_fragmentA_to_fragmentB)

Globale Aktionen

Mit globalen Aktionen können Sie von überall aus zu einem Ziel navigieren.

Für jedes Ziel in Ihrer App, das über mehr als einen Pfad zugänglich ist, eine entsprechende globale Aktion zu definieren, Ziel.

Betrachten Sie das folgende Beispiel. results_winner und game_over müssen beide Ziele an der Zielanwendung "Zuhause" angezeigt werden. Die Die Aktion „action_pop_out_of_game“ 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 im 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>