אפשר ליצור חיבור בין מקטעים באמצעות פעולות ניווט. הפעלה של פעולת הניווט מעבירה את המשתמש מיעד אחד ליעד אחר. המדריך הזה מוסבר מהן פעולות ומדגים איך אפשר ליצור אותן ולהשתמש בהן.
סקירה כללית
לכל פעולה יש מזהה ייחודי והיא יכולה לכלול מאפיינים נוספים, כמו היעד. היעד מגדיר את המסך שאליו האפליקציה מפנה את המשתמש כשהם מפעילים את הפעולה. הפעולה יכולה להשתמש גם בארגומנטים כדי להעביר נתונים מיעד אחד ליעד אחר.
- Safe Args: באמצעות פעולות אפשר להחליף את מזהי המשאבים ב-Safe פעולות שנוצרו על ידי Args, ומספקות בטיחות נוספת בזמן הידור.
- אנימציות: אפשר גם להוסיף אנימציה של מעברים בין היעדים. מידע נוסף זמין במאמר אנימציה של מעברים בין יעדים.
דוגמאות
מגדירים פעולות בקובץ ה-XML של תרשים הניווט באמצעות התגים <action>
.
קטע הקוד הבא מיישם פעולה שמייצגת מעבר
FragmentA
עד FragmentB
.
<fragment
android:id="@+id/fragmentA"
android:name="com.example.FragmentA">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB" />
</fragment>
ניווט באמצעות פעולה
כדי לנווט באמצעות הפעולה הזו, צריך לקרוא ל-NavController.navigate()
ולהעביר
כשהפעולה היא id
:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
פעולות גלובליות
אפשר להשתמש בפעולות גלובליות כדי לנווט ליעד מכל מקום.
בכל יעד באפליקציה שאפשר לגשת אליו דרך יותר מנתיב אחד: להגדיר פעולה גלובלית תואמת שמפנה אל היעד.
עיינו בדוגמה הבאה. results_winner
וגם game_over
שני היעדים צריכים להופיע בדף הבית.
הפעולה action_pop_out_of_game
מאפשרת לעשות זאת;
action_pop_out_of_game
היא פעולה גלובלית מחוץ לכל מקטע ספציפי.
זה אומר שאפשר לעיין בו ולהתקשר אליו בכל מקום
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>