Menggunakan tindakan Navigation dan Fragment

Anda dapat membuat koneksi antar-fragmen menggunakan tindakan navigasi. Memicu tindakan navigasi dapat membawa pengguna dari satu tujuan ke tujuan lainnya. Panduan ini menjelaskan apa yang dimaksud dengan tindakan serta menunjukkan cara membuat dan menggunakannya.

Ringkasan

Setiap tindakan memiliki ID unik dan dapat berisi atribut tambahan, seperti tujuan. Tujuan menentukan layar tujuan aplikasi mengarahkan pengguna saat mereka memicu tindakan. Tindakan ini juga dapat menggunakan argumen untuk membawa data dari satu tujuan ke tujuan lainnya.

Contoh

Tentukan tindakan di file XML grafik navigasi menggunakan tag <action>. Cuplikan berikut menerapkan tindakan yang mewakili transisi dari FragmentA ke FragmentB.

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

Untuk menavigasi menggunakan tindakan ini, panggil NavController.navigate() dan teruskan id tindakan:

navController.navigate(R.id.action_fragmentA_to_fragmentB)

Tindakan global

Anda dapat menggunakan tindakan global untuk menavigasi ke tujuan dari mana saja.

Untuk setiap tujuan di aplikasi Anda yang dapat diakses melalui lebih dari satu jalur, tentukan tindakan global terkait yang menavigasi ke tujuan tersebut.

Perhatikan contoh berikut. Tujuan results_winner dan game_over harus muncul ke tujuan asal. Tindakan action_pop_out_of_game memberikan kemampuan untuk melakukannya; action_pop_out_of_game adalah tindakan global di luar fragmen tertentu. Itu berarti Anda dapat mereferensikan dan memanggilnya di mana saja dalam 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>