שימוש בפעולות ניווט ובמקטעים

אפשר ליצור חיבור בין מקטעים באמצעות פעולות ניווט. הפעלה של פעולת הניווט מעבירה את המשתמש מיעד אחד ליעד אחר. המדריך הזה מוסבר מהן פעולות ומדגים איך אפשר ליצור אותן ולהשתמש בהן.

סקירה כללית

לכל פעולה יש מזהה ייחודי והיא יכולה לכלול מאפיינים נוספים, כמו היעד. היעד מגדיר את המסך שאליו האפליקציה מפנה את המשתמש כשהם מפעילים את הפעולה. הפעולה יכולה להשתמש גם בארגומנטים כדי להעביר נתונים מיעד אחד ליעד אחר.

דוגמאות

מגדירים פעולות בקובץ ה-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>