ใช้การดำเนินการและส่วนย่อยในการนำทาง

คุณสร้างการเชื่อมต่อระหว่างส่วนย่อยได้โดยใช้การไปยังส่วนต่างๆ การเรียกใช้ การดำเนินการนำทางจะนำผู้ใช้จากปลายทางหนึ่งไปยังอีกปลายทางหนึ่ง คู่มือนี้ การดำเนินการคืออะไร และแสดงวิธีการสร้างและใช้การกระทำเหล่านั้น

ภาพรวม

การดำเนินการแต่ละรายการจะมีรหัสที่ไม่ซ้ำกันและอาจประกอบด้วยแอตทริบิวต์เพิ่มเติม เช่น ปลายทาง ปลายทางจะเป็นตัวกำหนดหน้าจอที่แอปจะพาผู้ใช้ไป เมื่อเรียกใช้การดำเนินการ การดำเนินการนี้จะใช้อาร์กิวเมนต์เพื่อถ่ายโอนข้อมูลได้ จากปลายทางหนึ่งไปยังอีกจุดหมายหนึ่ง

ตัวอย่าง

กำหนดการทำงานในไฟล์ 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)

การดำเนินการส่วนกลาง

คุณสามารถใช้การดำเนินการส่วนกลางเพื่อนำทางไปยังปลายทางได้จากทุกที่

สำหรับปลายทางในแอปที่เข้าถึงได้ผ่านเส้นทางมากกว่า 1 เส้นทาง กำหนดการดำเนินการส่วนกลางที่เกี่ยวข้องซึ่งไปยัง ปลายทาง

ลองดูตัวอย่างต่อไปนี้ results_winner และ game_over ปลายทางทั้ง 2 อย่างจะต้องป๊อปอัปไปยังปลายทางที่บ้าน การดำเนินการ 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>