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.
- Safe Args: Dengan menggunakan tindakan, Anda dapat mengganti ID resource dengan operasi yang dihasilkan Safe Args, yang memberikan keamanan waktu kompilasi tambahan.
- Animasi: Anda juga dapat menganimasikan transisi antar-tujuan. Untuk informasi selengkapnya, lihat Transisi animasi antar-tujuan.
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>
Menavigasi menggunakan tindakan
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>