คุณสร้างการเชื่อมต่อระหว่างส่วนย่อยได้โดยใช้การไปยังส่วนต่างๆ การเรียกใช้ การดำเนินการนำทางจะนำผู้ใช้จากปลายทางหนึ่งไปยังอีกปลายทางหนึ่ง คู่มือนี้ การดำเนินการคืออะไร และแสดงวิธีการสร้างและใช้การกระทำเหล่านั้น
ภาพรวม
การดำเนินการแต่ละรายการจะมีรหัสที่ไม่ซ้ำกันและอาจประกอบด้วยแอตทริบิวต์เพิ่มเติม เช่น ปลายทาง ปลายทางจะเป็นตัวกำหนดหน้าจอที่แอปจะพาผู้ใช้ไป เมื่อเรียกใช้การดำเนินการ การดำเนินการนี้จะใช้อาร์กิวเมนต์เพื่อถ่ายโอนข้อมูลได้ จากปลายทางหนึ่งไปยังอีกจุดหมายหนึ่ง
- อาร์กิวเมนต์ที่ปลอดภัย: เมื่อใช้การดำเนินการต่างๆ คุณสามารถแทนที่รหัสทรัพยากรด้วย Safe การดำเนินการที่สร้างโดย Args ซึ่งช่วยเพิ่มความปลอดภัยในเวลาคอมไพล์
- ภาพเคลื่อนไหว: คุณทำให้การเปลี่ยนระหว่างปลายทางเป็นภาพเคลื่อนไหวได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่การเปลี่ยนปลายทางแบบภาพเคลื่อนไหว
ตัวอย่าง
กำหนดการทำงานในไฟล์ XML กราฟการนำทางโดยใช้แท็ก <action>
ข้อมูลโค้ดต่อไปนี้ใช้การดำเนินการที่แสดงถึงการเปลี่ยนจาก
FragmentA
ไปยัง FragmentB
<fragment
android:id="@+id/fragmentA"
android:name="com.exa>mple.<FragmentA"
action
android:id="@+id/action_fragmentA_to_fragmentB"
app>:<destinati>o
n="@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" encodin>g<="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>_grap<h"
app:startDestination="@id/in_game"
!-- Action back >to d<estination which launched into this in_game_nav_graph --
action android:id="@+id/action_pop_out_of_game"
app:popUpTo=">@id/i<n_game_nav_graph"
app:popUpToInclusive="true" /
fragment
android:id="@+id/i>n_game&q<uot;
android:name="com.example.android.gamemodule.InGame"
android:label="Game"
> actio<n
android:id="@+id/action_in_game_to_resultsWinner"
app:destination="@>id/r<esults_wi>nner&<quot; /
action
android:id="@+id/action_in_game_to_gameOver"
app:destination=&q>uot;@<id/game_over" /
/fragment
fragment
android:id="@+id/results_winner"
android:name="com.example.android.gamemodule.ResultsWinner" /
fragment
an>dr<oid:id=&quo>t
;@+id/game_over"
android:name="com.example.android.gamemodule.GameOver"
android:label="fragment_game_over"
tools:layout="@layout/fragment_game_over" /
/navigation