คอมโพเนนต์การนำทางทำงานร่วมกับระบบปฏิบัติการ Android เพื่อบำรุงรักษา back Stack ในฐานะผู้ใช้ ไปยังส่วนต่างๆ ในแอป ในบางกรณี การคงรักษาพารามิเตอร์ กลับไปสแต็กในเวลาเดียวกัน โดยให้ผู้ใช้ย้ายไปมาระหว่างเซลล์ทั้งสอง ตัวอย่างเช่น หากแอปของคุณมี bottom การนำทาง หรือการนำทาง ลิ้นชัก ด้านหลังหลายช่อง การรองรับสแต็กช่วยให้ผู้ใช้สลับไปมาในแอปได้อย่างอิสระ โดยไม่สูญเสียตำแหน่งเหล่านั้นในทุกที่
คอมโพเนนต์การนำทางมี API ที่รองรับสแต็กย้อนกลับหลายชุดโดย
การบันทึกและคืนค่าสถานะของจุดหมายในการนำทาง
กราฟ
ชั้นเรียน NavigationUI
ประกอบด้วย
จัดการเรื่องนี้โดยอัตโนมัติ แต่คุณยังสามารถใช้ API ที่เกี่ยวข้อง
ด้วยตนเองเพื่อการปรับการใช้งาน
ที่เหมาะสมมากขึ้น
ใช้การสนับสนุนโดยอัตโนมัติด้วย NavigationUI
ชั้นเรียน NavigationUI
มี API ที่บันทึกและคืนค่าสถานะของรายการในเมนูโดยอัตโนมัติเป็น
ผู้ใช้สลับใช้งานระหว่างกันได้ API เหล่านี้ใช้การสนับสนุนสแต็กย้อนกลับหลายอย่างโดย
ตามค่าเริ่มต้นในกรณีต่อไปนี้
- เมื่อคุณใช้โอเวอร์โหลดที่เหมาะสม
setupWithNavController()
เพื่อเชื่อมโยงอินสแตนซ์ของNavigationView
หรือBottomNavigationView
กับ อินสแตนซ์NavController
เป็น อธิบายไว้ใน เพิ่มการนำทาง ลิ้นชัก หรือด้านล่าง การนำทาง - เมื่อคุณใช้
onNavDestinationSelected()
เพื่อสร้างเมนูการนำทางที่กำหนดเอง UI ที่เชื่อมโยงกับปลายทางที่โฮสต์ ตามอินสแตนซ์NavController
API เหล่านี้ไม่จำเป็นต้องเปลี่ยนแปลงโค้ดเพิ่มเติมเพื่อติดตั้งใช้งาน Back Stack หลายรายการ และเป็นวิธีที่แนะนำในการรองรับแบ็กสแต็กจำนวนมากใน แอป
ใช้การสนับสนุนด้วยตนเองกับ API ที่เกี่ยวข้อง
หากองค์ประกอบจาก NavigationUI
ไม่เป็นไปตามข้อกำหนด คุณ
สามารถใช้ API ที่สำคัญเพื่อบันทึกและกู้คืนสแต็กย้อนกลับผ่านหนึ่งใน
แพลตฟอร์ม API อื่นๆ จากคอมโพเนนต์การนำทาง
XML การนำทาง
ใน XML การนำทาง องค์ประกอบ <action>
ในกราฟการนำทางสามารถใช้
app:popUpToSaveState
เพื่อบันทึกสถานะของปลายทางที่
แสดงการดำเนินการจาก app:popUpTo
แล้ว และยังใช้app:restoreState
เพื่อคืนค่าสถานะที่บันทึกไว้ก่อนหน้านี้สำหรับปลายทางที่กำหนดไว้ใน
app:destination
คุณใช้แอตทริบิวต์เหล่านี้เพื่อรองรับแบ็กสแต็กได้หลายรายการ เมื่อการนำทาง
การดำเนินการต้องย้ายผู้ใช้จากกองหลังหนึ่งไปยังอีกกลุ่มหนึ่ง ให้ตั้งค่าทั้ง
app:popUpToSaveState
และ app:restoreState
เป็น true
ใน
องค์ประกอบ <action>
ด้วยวิธีนี้ การทำงานจะบันทึกสถานะของตำแหน่งย้อนกลับในปัจจุบัน
ซ้อนกันขณะที่คืนค่าสถานะที่บันทึกไว้ก่อนหน้านี้ของปลายทางด้วย
ซ้อนกัน หากมี
ตัวอย่างต่อไปนี้แสดงการดำเนินการที่ใช้ทั้ง 2 แอตทริบิวต์นี้
<action
android:id=”@+id/swap_stack”
app:destination=”@id/second_stack”
app:restoreState=”true”
app:popUpTo=”@id/first_stack_start_destination”
app:popUpToSaveState=”true” />
ตัวเลือกการนำทาง
ชั้นเรียน NavOptions
ช่วยให้คุณส่งตัวเลือกการนำทางพิเศษเพื่อบันทึกและคืนค่าสแต็กย้อนกลับได้
เมื่อคุณนำทางโดยใช้ NavController
ซึ่งจะเป็นเช่นนี้ไม่ว่าคุณจะสร้าง
อินสแตนซ์ของ NavOptions
ที่ใช้ Kotlin
DSL หรือการใช้
NavOptions.Builder
:
Kotlin
// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
Java
NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตัวเลือกการนำทางผ่าน โปรดดูใช้ NavOptions แบบเป็นโปรแกรม
แหล่งข้อมูลเพิ่มเติม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการรองรับสแต็กแบ็กสแต็กหลายรายการด้วยคอมโพเนนต์การนำทาง โปรดดูแหล่งข้อมูลเพิ่มเติมต่อไปนี้
บล็อกโพสต์
- ทักษะ MAD: ไปยังส่วนต่างๆ ของสแต็กย้อนกลับหลายรายการ ใน Medium
- การนำทาง: เจาะลึกกลุ่มส่วนหลังหลายส่วน ใน Medium
ตัวอย่าง
- พร้อมใช้งานแล้วใน Android แอป ใน GitHub
- Jetnews ใน GitHub
- Jetsnack ใน GitHub