คุณสร้างการเชื่อมต่อระหว่างส่วนย่อยได้โดยใช้การไปยังส่วนต่างๆ การเรียกใช้ การดำเนินการนำทางจะนำผู้ใช้จากปลายทางหนึ่งไปยังอีกปลายทางหนึ่ง คู่มือนี้ การดำเนินการคืออะไร และแสดงวิธีการสร้างและใช้การกระทำเหล่านั้น
ภาพรวม
การดำเนินการแต่ละรายการจะมีรหัสที่ไม่ซ้ำกันและอาจประกอบด้วยแอตทริบิวต์เพิ่มเติม เช่น ปลายทาง ปลายทางจะเป็นตัวกำหนดหน้าจอที่แอปจะพาผู้ใช้ไป เมื่อเรียกใช้การดำเนินการ การดำเนินการนี้จะใช้อาร์กิวเมนต์เพื่อถ่ายโอนข้อมูลได้ จากปลายทางหนึ่งไปยังอีกจุดหมายหนึ่ง
- อาร์กิวเมนต์ที่ปลอดภัย: เมื่อใช้การดำเนินการต่างๆ คุณสามารถแทนที่รหัสทรัพยากรด้วย 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)
การดำเนินการส่วนกลาง
คุณสามารถใช้การดำเนินการส่วนกลางเพื่อนำทางไปยังปลายทางได้จากทุกที่
สำหรับปลายทางในแอปที่เข้าถึงได้ผ่านเส้นทางมากกว่า 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>