navigationevent
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 24 กันยายน 2025 | - | - | - | 1.0.0-alpha09 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน NavigationEvent คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha09" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha09") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
ไม่มีบันทึกประจำรุ่นสำหรับอาร์ติแฟกต์นี้
รุ่น 1.0
เวอร์ชัน 1.0.0-alpha09
24 กันยายน 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha09 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- ใช้
NavigationEventTransitionState.Idleออบเจ็กต์ Singleton โดยตรงแทนการสร้างอินสแตนซ์Idle()(Ic7d9e, b/444734264) - สร้างตัวสร้างความสะดวกภายใน รับอินสแตนซ์ผ่าน
NavigationEventDispatcher.historyสาธารณะแทนการสร้างโดยตรง (I3b7e0, b/444734264) - ต้องสร้าง
NavigationEventStateผ่านrememberNavigationEventStateตอนนี้เครื่องมือสร้างอยู่ภายใน (Ie143c, b/444734264) - ใช้การใช้งาน
onBackCompletedFallbackแทนfallbackOnBackPressedและพารามิเตอร์ของตัวสร้าง ลักษณะการทำงานไม่เปลี่ยนแปลง โดยจะเรียกใช้เฉพาะในเหตุการณ์ย้อนกลับที่เสร็จสมบูรณ์แล้วและไม่ได้จัดการ (Idabe9, b/444734264) - ตอนนี้ตัวสร้างหลักของ
NavigationEventHistory(mergedHistory, currentIndex)คือinternalผู้ใช้ภายนอกต้องใช้ตัวสร้างสาธารณะ (ตัวสร้างที่ว่างเปล่าหรือตัวสร้างที่อิงตามพาร์ติชัน) เพื่อสร้างอินสแตนซ์ (I1c047, b/444734264) - ทำให้
View.setViewTreeNavigationEventDispatcherOwnerยอมรับเจ้าของที่กำหนดให้เป็น Null ได้ (Ic9eb6, b/444436762) - ตอนนี้
NavigationEventInfoเป็นabstract classแล้วไม่ใช่interfaceอัปเดตการติดตั้งใช้งานที่กำหนดเองทั้งหมดให้รับค่าจากคลาส (เช่นdata class MyInfo : NavigationEventInfo()) (I1e59c, b/444734264) - ระบบได้นำพร็อพเพอร์ตี้
NavigationEventDispatcher.stateเดิมและฟังก์ชันgetState<T>()ออกแล้ว ใช้โฟลว์dispatcher.transitionState(สำหรับความคืบหน้าของท่าทางสัมผัส) และdispatcher.history(สำหรับสแต็กการนำทาง) ใหม่ที่แยกกัน (Ic2ceb, b/444734264) - ระบบจะแทนที่
NavigationEventInput.onInfoChanged(...)การเรียกกลับ ใช้onHistoryChanged(history: NavigationEventHistory)การเรียกกลับใหม่เพื่อรับการอัปเดตเป็นออบเจ็กต์NavigationEventHistoryเดียว (I23e0b, b/444734264) - เปิดตัว
NavigationEventDispatcher.historyStateFlowใหม่ทั่วโลก โฟลว์ที่ไม่ใช่โฟลว์ทั่วไปนี้ช่วยให้ผู้สังเกตการณ์ติดตามเฉพาะการเปลี่ยนแปลงในสแต็กการนำทางและยังคงเสถียรในระหว่างความคืบหน้าของท่าทางสัมผัส ซึ่งเป็นฟังก์ชันที่เทียบเท่ากับtransitionState(I1db10, b/444734264) - เปิดตัว
NavigationEventDispatcher.transitionStateStateFlowใหม่ทั่วโลก โฟลว์ที่ไม่ใช่โฟลว์ทั่วไปนี้ช่วยให้ผู้สังเกตการณ์ติดตามเฉพาะสถานะท่าทางสัมผัส (ไม่ได้ใช้งาน/กำลังดำเนินการ) แยกจากประวัติได้ (I171fa, b/444734264) - แนะนำ
NavigationEventHistoryStateชั้นเรียน ซึ่งจะทำหน้าที่เป็น API หลักในการสังเกตประวัติข้อมูลการนำทาง โดยแยกจากสถานะท่าทางสัมผัส (I81ca5, b/444734264) NavigationEventตอนนี้จะทําเครื่องหมายเป็น@Immutableซึ่งช่วยให้คอมไพเลอร์ Compose เพิ่มประสิทธิภาพการเขียนใหม่ได้ (If78c7, b/444734264)navigationevent-composeAPI ตัวแฮนเดิลได้รับการอัปเดตแล้ว ตอนนี้NavigationEventHandlerและNavigationBackHandler(และตัวแปร) รองรับการโอเวอร์โหลดใหม่ที่ยอมรับNavigationEventStates ที่ยกขึ้น ระบบจะยังคงใช้การโอเวอร์โหลดแบบง่าย (ใช้currentInfo) และใช้โมเดลสถานะใหม่นี้ภายใน (Ic3251, b/444734264)- เพิ่มตัวยึดสถานะ
@StableNavigationEventState<T>ใหม่ลงในไลบรารีnavigationevent-composeออบเจ็กต์นี้รวมประวัติในเครื่องเข้ากับสถานะท่าทางสัมผัสในเครื่อง และจะเป็นลิงก์หลักระหว่างrememberNavigationEventStateกับNavigationEventHandler(Ifb69f, b/444734264) - เพิ่มพร็อพเพอร์ตี้
transitionState: TransitionStateใหม่แบบสาธารณะและแบบอ่านอย่างเดียวไปยังNavigationEventHandlerตอนนี้ตัวแฮนเดิลจะรักษาสถานะการเปลี่ยนของตัวเอง ซึ่งระบบภายนอกสามารถสังเกตได้ (I9acd2, b/444734264) - ขอแนะนำคลาสที่ปิดผนึกใหม่ของ
TransitionStateซึ่งจะเป็น API หลักสำหรับการสังเกตสถานะท่าทางสัมผัส โดยแยกจากประวัติการนำทาง (Id4beb, b/444734264) - แสดง
currentInfo,backInfoและforwardInfoเป็นพร็อพเพอร์ตี้แบบสาธารณะที่อ่านได้อย่างเดียวในNavigationEventHandler(Ia7636, b/444734264) - ตอนนี้การใช้งาน
NavigationEventHandlerต้องระบุค่าinitialInfo: Tให้กับตัวสร้างฐาน (Idcfea, b/444734264) - แทนที่
OnBackInvokedInputด้วยOnBackInvokedOverlayInputหรือOnBackInvokedDefaultInput(I5323f, b/428948766) - ทำเครื่องหมาย
NavigationEventStateเป็น@Immutableซึ่งจะช่วยปรับปรุงประสิทธิภาพของ Compose โดยทำให้มั่นใจว่า Composables ที่สังเกตสถานะนี้จะข้ามการจัดองค์ประกอบใหม่ได้อย่างถูกต้อง (I399c8) - เปลี่ยนชื่อ
NavigationEventInfo.NotProvidedเป็นNavigationEventInfo.None;เพื่ออัปเดตการอ้างอิง ไม่มีการเปลี่ยนแปลงลักษณะการทำงาน (I5e2d4) NavigationEventInfoตอนนี้จะทําเครื่องหมายเป็น@Immutableซึ่งช่วยให้คอมไพเลอร์ Compose เพิ่มประสิทธิภาพการเขียนใหม่ได้ (I7c112)- ปรับปรุงการยศาสตร์ของ Java ด้วยอินเทอร์เฟซที่สนุกสนานสำหรับการสำรองการดำเนินการย้อนกลับ (I8a860)
- เปลี่ยนชื่อ
onHasEnabledHandlerChangedเป็นonHasEnabledHandlersChangedซึ่งจะอธิบายว่ารายงานการเรียกกลับเกี่ยวกับสถานะการเปิดใช้โดยรวมของแฮนเดิลทั้งหมด ไม่ใช่เพียงแฮนเดิลเดียว (I1af61, b/443711297) - นำ
hasEnabledHandler()ออกจากNavigationEventDispatcher;แล้วใช้NavigationEventInput.onHasEnabledHandlersChangedแทน (Idef72, b/443711297) - เพิ่ม
onInfoChangedการเรียกกลับไปยังNavigationEventInputเพื่อแจ้งให้ผู้ฟังทราบถึงการเปลี่ยนแปลงในประวัติการนำทาง ซึ่งจะให้บริบททั้งหมดของสแต็กปัจจุบัน ย้อนกลับ และไปข้างหน้า ทำให้อินพุตตอบสนองต่อข้อมูลตามบริบทได้ (I69a8b, b/443282983) - สร้าง
NavigationEventswipeEdgeให้เป็น@IntDef(Icee54, b/443950342) - เพิ่มพารามิเตอร์
priorityลงในNavigationEventDispatcher.addInputเพื่อกำหนดขอบเขตของตัวจัดส่งให้มีความสำคัญระดับเดียว เหตุการณ์ต่างๆ เช่นonHasEnabledCallbacksChangedจะเริ่มทำงานเมื่อมีการเปลี่ยนแปลงการเรียกกลับที่ระดับความสำคัญนั้นเท่านั้น (I3e488, b/443711297) - เปลี่ยนชื่อพารามิเตอร์
NavigationEventDispatcherจากparentDispatcherเป็น parent เพื่อความชัดเจน (Id4f1f, b/443801782) - นำ
NavigationEventPriorityออกเพื่อแทนที่ด้วย@IntDefสำหรับผู้ใช้ Java (I10a9f, b/440514265) - บังคับใช้สัญญาตัวแฮนเดิลการนำทาง หาก
NavigationEventHandlerตั้งค่าisBackEnabledหรือisForwardEnabledเป็นtrueตอนนี้คุณต้องลบล้างonBackCompletedหรือonForwardCompletedตามลำดับ ตอนนี้การติดตั้งใช้งานเริ่มต้นจะส่งข้อยกเว้นเพื่อป้องกันไม่ให้เกิดข้อผิดพลาดแบบเงียบ (I17c62) - บังคับใช้ค่าลำดับความสำคัญที่ถูกต้องเมื่อเพิ่มตัวแฮนเดิลเหตุการณ์การนำทาง ตอนนี้การเรียกใช้
addHandlerที่มีลำดับความสำคัญที่ไม่รองรับจะทำให้เกิดIllegalArgumentExceptionซึ่งจะให้ความคิดเห็นทันทีสำหรับการใช้งานที่ไม่ถูกต้องในแพลตฟอร์มเป้าหมายทั้งหมด (I3c474)
การแก้ไขข้อบกพร่อง
- ทำให้
addHandlerIdempotent และไม่สนใจการลงทะเบียนที่ซ้ำกัน (I052aa, b/444734264) - ซิงค์พร็อพเพอร์ตี้
NavigationEventStateไว้ในระหว่างการจัดองค์ประกอบใหม่ (Ib3b4d, b/444734264) - ตรวจสอบว่า
NavigationEventInputsได้รับข้อมูลบริบทปัจจุบัน (ปัจจุบัน ย้อนกลับ ไปข้างหน้า) ทันทีที่ลงทะเบียน (Ie65bf, b/443282983)
เวอร์ชัน 1.0.0-alpha08
10 กันยายน 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- เปิดตัว
NavigationEventHandlerAPI ที่ใช้ Lambda ซึ่งจะมาแทนที่ตัวแฮนเดิลที่อิงตามโฟลว์ จัดการท่าทางสัมผัสย้อนกลับและไปข้างหน้าด้วยการเรียกกลับแบบง่ายแทนการรวบรวมโฟลว์ ซึ่งจะช่วยลดข้อความเทมเพลตที่ต้องใช้บ่อยๆ และหลีกเลี่ยงปัญหาการยกเลิก จัดหาNavigationBackHandlerและNavigationForwardHandlerเป็น API ที่กำหนดเป้าหมายเพื่อความสะดวก นำNavigationEventHandlerที่อิงตามโฟลว์ออก แล้วย้ายข้อมูลไปยังการเรียกกลับใหม่ (I23bac, b/436248277) - อนุญาตให้ผู้ฟังที่ไม่ได้โต้ตอบเข้าถึง Back Stack ของการนำทางทั้งหมดผ่านข้อมูลย้อนกลับที่รวมกัน เปิดใช้ UI เพื่อแสดงตัวอย่างและประวัติการนำทางที่ซ้อนกันแทนที่จะจำกัดไว้ที่การเรียกกลับระดับบนสุด (I7a510, b/436248277)
- เปิดตัวโมเดลย้อนกลับ/ปัจจุบัน/ไปข้างหน้าอย่างชัดเจนเพื่อชี้แจงสถานะการนำทางและรองรับการนำทางไปข้างหน้าด้วยตัวแฮนเดิลที่ซ้อนกัน (Ib86da, b/420443609)
- เพิ่มวิธีการ
onForward*และisForwardEnabledลงในNavigationEventCallback(Ic100f, b/436248290) - เพิ่มการรองรับการนำทางไปข้างหน้าใน
NavigationEventInput(I5734b)
การเปลี่ยนแปลง API
- เปิดใช้การทดสอบเหตุการณ์การนำทางไปข้างหน้าด้วย
TestNavigationEventCallbackใช้ฮุกisForwardEnabledและonForward*(I21fb5, b/420443609) - เปลี่ยนชื่อการเรียกกลับ
onEvent*เป็นonBack*ในNavEvent(I228b3, b/436248290) - แปลง
SwipeEdgeเป็นคลาสแบบอินไลน์ (Id5e01) - ทำให้
navigationeventไลบรารีทำงานร่วมกับ Java ได้ ตอนนี้โค้ด Java สามารถเข้าถึง API สาธารณะทั้งหมดได้อย่างเต็มรูปแบบ ซึ่งช่วยให้ผสานรวมเข้ากับโปรเจ็กต์ที่ใช้หลายภาษาหรือโปรเจ็กต์ที่ใช้ Java เท่านั้นได้อย่างราบรื่น (Ibc944,I5465f, I9fb1e, b/440532890b/443040294) - ชี้แจงบทบาท API โดยเปลี่ยนชื่อ
NavigationEventCallbackเป็นNavigationEventHandlerการเปลี่ยนแปลงนี้แสดงให้เห็นถึงวัตถุประสงค์ของคลาสในการจัดการท่าทางสัมผัสการนำทางแบบหลายขั้นตอนได้ดียิ่งขึ้น ตอนนี้เมธอดaddCallbackที่เกี่ยวข้องคือaddHandler(I2492a, b/443040331)
การแก้ไขข้อบกพร่อง
- ป้องกันไม่ให้การย้อนกลับสำรองทำงานในการไปยังส่วนต่างๆ ไปข้างหน้า (I74814, b/436248290)
- เพิ่มการรองรับการนำทางไปข้างหน้าแบบคาดการณ์
NavigationEventตอนนี้ API จัดการทั้งท่าทางสัมผัสย้อนกลับและไปข้างหน้าแล้ว ซึ่งช่วยให้การเคลื่อนไหวสอดคล้องกันสำหรับทิศทางการนำทางทั้ง 2 แบบ (Idc98c, b/436248290) - ป้องกันไม่ให้
IllegalStateExceptionขัดข้องระหว่างการจัดองค์ประกอบใหม่เมื่อนำNavigationEventDispatcherOwnerขององค์ประกอบออก (Iff50c, b/412629020) - ตอนนี้ผู้ฟังที่ไม่ได้โต้ตอบจะเข้าถึงสแต็กการนำทางย้อนกลับทั้งหมดได้ผ่านข้อมูลย้อนกลับที่รวมกัน ซึ่งช่วยให้ UI แสดงตัวอย่างและประวัติการนำทางที่ซ้อนกันได้แทนที่จะจำกัดไว้ที่การเรียกกลับระดับบนสุด (I7a510, b/436248277)
เวอร์ชัน 1.0.0-alpha07
27 สิงหาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- นำ
NavigationEventDispatcher.onHasEnabledCallbacksChangedออก (I50e97) - ทำให้
NavigationEventCallback.onEventCompleted()เป็นนามธรรม (I36b38) - เปลี่ยนวิธีการ
NavigationEventCallback#on*เป็นprotectedอัปเดตรหัสการโทรเพื่อลบล้าง (I6b691) - เปลี่ยนชื่อฟังก์ชัน
DirectNavigationEventInput(Iffb62) - เปลี่ยนชื่อ
NavigationEventInput.onAttachเป็นonAdded(I2d0b8) - เปลี่ยนชื่อ
NavigationEventInput.onDetachเป็นonRemoved(I2d0b8) - เปลี่ยนชื่อ
NavigationEventInputHandlerเป็นNavigationEventInput(I676a4) - เพิ่ม
@EmptySuperไปยังNavigationEventInput.onHasEnabledCallbacksChanged(If9853) - ใช้
onAttachในNavigationEventInputHandler(I03648) - ใช้
onDetachในNavigationEventInputHandler(I03648) - ค่าเริ่มต้น
NavigationEventCallbackจะเปิดใช้เมื่อสร้าง (Ic0188) - แทนที่
NavigationEventInput.addOnHasEnabledCallbacksChangedCallbackด้วยNavigationEventInput.onHasEnabledCallbacksChanged(I64e93) - ต้องใช้เทรดหลักสำหรับ
NavigationEventDispatcher.addInput(Ic2930) - ต้องใช้เทรดหลักสำหรับ
NavigationEventDispatcher.removeInput(Ic2930) - นำ
Dispatcher.addOnHasEnabledCallbacksChangedCallbackออก แทนที่ด้วยDispatcher.onHasEnabledCallbacksChanged(Ida3e3, b/436530096)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การเพิ่มแฮนเดิลที่แนบแล้วหรือการนำแฮนเดิลที่ไม่ได้แนบออกทำให้ตรรกะวงจรที่ถูกต้องทำงาน (I9e47b)
เวอร์ชัน 1.0.0-alpha06
13 สิงหาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
Passive Listeners API
ตอนนี้คุณสามารถส่งข้อมูลบริบทที่กำหนดเองจากโฮสต์การนำทางใดก็ได้ และรับฟังแบบพาสซีฟการเปลี่ยนแปลงสถานะท่าทางสัมผัสจากที่ใดก็ได้ใน UI ซึ่งจะเปิดใช้ภาพเคลื่อนไหวที่รับรู้บริบทสำหรับการย้อนกลับแบบคาดเดาและการนำทางอื่นๆ ที่ขับเคลื่อนด้วยท่าทางสัมผัส
ฟีเจอร์นี้มี 2 ส่วน ได้แก่
- การระบุข้อมูล - ใช้
NavigationEventInfoเพื่อส่งข้อมูลที่กำหนดเอง - สถานะการใช้งาน - ใช้
dispatcher.state(NavigationEventState) เพื่อสังเกตความคืบหน้าและบริบทของท่าทางสัมผัส
- ตอนนี้
NavigationEventCallbackได้เปิดเผยเมธอดsetInfo(currentInfo, previousInfo)เพื่อตั้งค่าบริบทของท่าทางสัมผัสในการเรียกครั้งเดียว (I1d5e7, b/424470518) NavigationEventHandlerเพิ่มการโอเวอร์โหลดใหม่ที่ยอมรับcurrentInfoและpreviousInfoซึ่งทําให้เป็น API หลักสําหรับการระบุบริบทในแอป Compose (I6ecd3, b/424470518)
ตัวอย่าง
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcherตอนนี้แสดงdispatcher.stateและdispatcher.getState<T>()(If7fae, Ia90ca, b/424470518) แล้ว API ที่อิงตามStateFlowเหล่านี้ช่วยให้ UI ใดก็ตามสังเกตความคืบหน้าของท่าทางสัมผัสและข้อมูลตามบริบทได้โดยไม่ต้องจัดการเหตุการณ์โดยตรง
ตัวอย่าง
val gestureState by LocalNavigationEventDispatcherOwner.current!!
.navigationEventDispatcher
.state
.collectAsState()
val progress = gestureState.progress // Returns latestEvent.progress or 0F
when (val state = gestureState) {
is InProgress -> {
val toScreen = state.currentInfo as MyScreenInfo
val fromScreen = state.previousInfo as MyScreenInfo
println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
}
is Idle -> { /* Idle state */ }
}
เพิ่มพร็อพเพอร์ตี้
progressลงในNavigationEventState(I7b196) ที่แสดงผลlatestEvent.progressเมื่อดำเนินการอยู่ หรือ0Fในกรณีอื่นๆval progress = state.progressเพิ่ม
NavigationEventDispatcherOwnercomposable เพื่อสร้าง ลิงก์ และทิ้งอินสแตนซ์NavigationEventDispatcherตามลำดับชั้น เปิดใช้การควบคุมแบบไดนามิกของสถานะที่เปิดใช้ของ Dispatcher และการล้างข้อมูลอัตโนมัติ@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
การเปลี่ยนแปลง API
- พารามิเตอร์
isPassthroughถูกนำออกจากNavigationEventCallbackแล้ว (I99028, b/424470518) - ตอนนี้ตัวสร้าง
NavigationEventStateเป็นแบบภายในแล้ว สำหรับการทดสอบ ให้อัปเดตสถานะ (ค่าเริ่มต้นคือIdle) ผ่านDirectNavigationEventInputHandlerเรียกใช้handleOnStartedหรือhandleOnProgressedเพื่อตั้งค่าสถานะเป็นInProgressและเรียกใช้handleOnCompletedหรือhandleOnCancelledเพื่อเปลี่ยนกลับเป็นIdleหากต้องการอัปเดตNavigationEventInfoให้ใช้NavigationEventCallback.setInfo(I93dca, b/424470518) - เพิ่มพารามิเตอร์เริ่มต้นลงใน
NavigationEventเพื่อให้สร้างอินสแตนซ์ได้ง่ายขึ้นและลดความซับซ้อนของการทดสอบ ซึ่งควรใช้แทนTestNavigationEvent(I5dc49, I232f4) - เพิ่ม
TestNavigationEventCallbackสำหรับทดสอบเหตุการณ์การนำทางที่มีสถานะปัจจุบัน/ก่อนหน้าเฉพาะ (Idd22e, b/424470518) NavigationEventInputHandlerได้รับการเปลี่ยนเป็นคลาสแบบนามธรรมเพื่อแทนที่AbstractNavigationEventInputHandlerก่อนหน้าด้วยการติดตั้งใช้งานในDirectNavigationEventInputHandler(Iadde5, Ifed40I3897c, b/432616296, b/435416924)- ฟังก์ชัน
send*ในNavigationEventInputHandlerมีการเปลี่ยนชื่อคำนำหน้าเป็นhandle*(Iffcaf) - ตอนนี้
OnBackInvokedInputHandlerได้ขยายเวลาabstractNavigationInputHandlerที่เพิ่งเปิดตัว (Ib45aa) - เปลี่ยน
NavigationEventDispatcherOwnerให้ต้องมี Dispatcher หลักที่คุณต้องส่งnullอย่างชัดเจนเพื่อสร้าง Dispatcher รูท (Ia6f64, b/431534103)
การแก้ไขข้อบกพร่อง
- เพิ่มประสิทธิภาพด้วยการหลีกเลี่ยงการคัดลอกคอลเล็กชันใน
NavigationEventDispatcher.dispose()(I4ab09) - แก้ไขปัญหาที่
NavigationEventHandlerไม่ตอบสนองต่อการเปลี่ยนแปลงสถานะที่เปิดใช้อย่างถูกต้อง (Ia5268,I19bec, I5be5c, b/431534103)
ข้อมูลอัปเดตเกี่ยวกับเอกสาร
- KDocs สำหรับ
NavigationEventได้รับการขยายความเพื่อชี้แจงบทบาทในฐานะเครื่องมือรวมเหตุการณ์และลักษณะการทำงานของพร็อพเพอร์ตี้รายละเอียดในประเภทการนำทางต่างๆ (ท่าทางสัมผัส การคลิก) (I91e8d) - อัปเดตเอกสารประกอบสำหรับ Compose API ของการจัดการการกลับของระบบ (
BackHandler,PredictiveBackHandler,NavigationEventHandler) เพื่อเรียกใช้ลักษณะการทำงานโดยเฉพาะเกี่ยวกับลำดับการเรียกกลับ (I7ab94, )
การอัปเดตการขึ้นต่อกัน
NavigationEventตอนนี้ขึ้นอยู่กับ Compose Runtime 1.9.0-beta03 ซึ่งช่วยให้ชิ้นงานnavigationevent-composeรองรับเป้าหมาย KMP ทั้งหมดได้ (Ia1b87)
เวอร์ชัน 1.0.0-alpha05
30 กรกฎาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีการคอมมิตเหล่านี้
การรองรับลำดับชั้นหลัก-ย่อย:
ตอนนี้ NavigationEventDispatcher สามารถมีตัวจัดสรรหลักและย่อย ซึ่งจะสร้างโครงสร้างแบบต้นไม้ตามลำดับชั้น ซึ่งจะช่วยให้เหตุการณ์การนำทางเผยแพร่และจัดการได้อย่างยืดหยุ่นมากขึ้นในคอมโพเนนต์ UI ของ Compose ที่ซับซ้อนโดยการแสดงลําดับชั้นโครงสร้างของ UI ผ่าน Dispatcher ที่เชื่อมโยงกัน (I194ac)
// Create a parent dispatcher that will manage navigation events at a higher level.
val parentDispatcher = NavigationEventDispatcher()
// Create a child dispatcher linked to the parent, forming a hierarchy.
val childDispatcher = NavigationEventDispatcher(parentDispatcher)
isEnabledพร็อพเพอร์ตี้แบบลำดับชั้นช่วยให้ควบคุมผู้จัดส่งจากบนลงล่างได้ เมื่อตั้งค่า isEnabled เป็น false ใน Dispatcher ระบบจะปิดใช้ Dispatcher ทั้งหมดที่สืบทอดมาจาก Dispatcher นั้นโดยอัตโนมัติ ฟีเจอร์นี้ช่วยให้ปิดทั้งกิ่งก้านของระบบเหตุการณ์การนำทางได้อย่างมีประสิทธิภาพ (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
นอกจากนี้ พร็อพเพอร์ตี้ isEnabled ใน NavigationEventCallback จะพิจารณาสถานะที่เปิดใช้ของเครื่องมือจัดส่งที่เชื่อมโยงแล้ว ซึ่งหมายความว่าระบบจะถือว่ามีการเปิดใช้การเรียกกลับก็ต่อเมื่อมีการเปิดใช้ทั้งการเรียกกลับเองและตัวจัดสรร (รวมถึงบรรพบุรุษ) เพื่อให้มั่นใจว่ามีการควบคุมแบบลำดับชั้นที่สอดคล้องกันในการเปิดใช้งานการเรียกกลับ (I1799a)
// Create a test callback and add it to the child dispatcher.
val callback1 = TestNavigationEventCallback(isEnabled = true)
childDispatcher.addCallback(callback1)
// Since the childDispatcher is disabled, the callback is effectively disabled as well.
assertThat(callback1.isEnabled).isFalse()
เราได้เปิดตัวdispose()วิธีใหม่สำหรับการล้างข้อมูลที่เหมาะสมของ Dispatcher และกระบวนการย่อย การเรียกใช้ dispose() จะหยุดการทำงานของ Listener เพื่อป้องกันการรั่วไหลของหน่วยความจำ ยกเลิกการจัดสรร Dispatcher ย่อยทั้งหมดแบบเรียกซ้ำ นำ Callback ทั้งหมดที่ลงทะเบียนไว้กับ Dispatcher ออก และยกเลิกการลิงก์ Dispatcher กับ Dispatcher หลัก ซึ่งจะช่วยให้มั่นใจได้ว่าระบบจะปล่อยทรัพยากรอย่างถูกต้องเมื่อไม่จำเป็นต้องใช้ Dispatcher อีกต่อไป (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
หากมีการเรียกใช้เมธอดสาธารณะใน Dispatcher ที่ถูกทิ้ง ระบบจะส่ง IllegalStateException ทันที ซึ่งจะช่วยป้องกันไม่ให้เกิดข้อผิดพลาดแบบเงียบๆ และช่วยให้นักพัฒนาแอปทราบถึงการใช้งานที่ไม่เหมาะสมในระหว่างการพัฒนา (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
หมายเหตุ: เราจะเปิดตัว NavigationEventDispatcherOwner Composable ใหม่ที่จะจัดการ Dispatcher ของ Child ภายใน Compose UI โดยอัตโนมัติใน aosp/3692572 อย่างไรก็ตาม การเปลี่ยนแปลงนี้ไม่ได้รวมอยู่ในการเปิดตัวปัจจุบัน และมีแผนที่จะรวมไว้ในการเปิดตัวครั้งถัดไป
คลังการทดสอบการนำทาง
- เพิ่ม
navigationevent-testingโมดูลเพื่อจัดเตรียมยูทิลิตีการทดสอบเฉพาะสำหรับไลบรารีnavigationevent(0e50b6) - เพิ่มคลาสยูทิลิตีปลอม
TestNavigationEventCallbackสำหรับการทดสอบ โดยจะบันทึกการเรียกเมธอด Callback และจัดเก็บรายการNavigationEventที่ได้รับเพื่อรองรับการยืนยัน (4a0246) - เพิ่มฟังก์ชันยูทิลิตีปลอม
TestNavigationEventเพื่อสร้างอินสแตนซ์NavigationEventที่มีค่าเริ่มต้น ซึ่งจะช่วยลดความซับซ้อนของการทดสอบหน่วยสำหรับการประมวลผลเหตุการณ์การนำทาง (3b63f5) - เพิ่มคลาสยูทิลิตีปลอม
TestNavigationEventDispatcherOwnerสำหรับการทดสอบ โดยจะติดตามจำนวนเหตุการณ์สำรองและเหตุการณ์การเปลี่ยนสถานะที่เปิดใช้เพื่อรองรับการยืนยันการโต้ตอบในการทดสอบ (c8753e)
การเปลี่ยนแปลง API
- ย้าย
NavigationEventInputHandlerจากandroidMainไปยังcommonMainเพื่อให้พร้อมใช้งานในโค้ดทั่วไปของ KMP เพิ่มpublic send*วิธีใหม่สำหรับการส่งเหตุการณ์ เปลี่ยนฟังก์ชันการเรียกใช้ในNavigationEventDispatcherจากpublicเป็นinternalตอนนี้ผู้ใช้ต้องใช้NavigationEventInputHandlerเพื่อส่งเหตุการณ์ (Ia7114) - เปลี่ยนชื่อ
NavigationInputHandlerเป็นOnBackInvokedInputHandler(I63405)
การแก้ไขข้อบกพร่อง
- ทำการรีแฟกเตอร์
NavigationEventDispatcherเพื่อลดโอเวอร์เฮดโดยหลีกเลี่ยงการจัดสรรรายการกลางและปรับปรุงประสิทธิภาพการเรียกกลับ (I82702, I1a9d9) - เพิ่มคำอธิบายประกอบ
@FloatRangeลงในฟิลด์touchX,touchYและprogressในNavigationEventเพื่อบังคับใช้ช่วงค่าที่ถูกต้องในเวลาคอมไพล์และปรับปรุงความปลอดภัยของ API (Iac0ec)
เวอร์ชัน 1.0.0-alpha04
2 กรกฎาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ใช้
implementedInJetBrainsForkเพื่อnavigationevent-composeและเพิ่มเป้าหมายcommonStubsให้ตรงกับรูปแบบของ Compose ขอเปลี่ยนแปลงโดย JetBrains (f60c79) - แก้ไขการใช้ปลั๊กอินคอมไพเลอร์ Compose สำหรับ Kotlin/Native เพื่อให้มั่นใจว่ามีการสร้าง Stub ที่ถูกต้อง ไม่มีผลต่อ API สาธารณะหรือลักษณะการทำงาน (1890c9)
เวอร์ชัน 1.0.0-alpha03
18 มิถุนายน 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เปิดตัว
navigationevent-composeโมดูลใหม่เพื่อรองรับฟีเจอร์ Jetpack Compose ในไลบรารีnavigationevent(980d78) NavigationEventCompose ได้เพิ่มLocalNavigationEventDispatcherOwnerการเรียบเรียงเพลงในพื้นที่ใหม่ โดยจะแสดงผลค่าที่อนุญาตให้เป็น Null เพื่อให้ระบุได้ดียิ่งขึ้นว่าค่าดังกล่าวพร้อมใช้งานในองค์ประกอบปัจจุบันหรือไม่ ตอนนี้NavigationEventHandlerจะแสดงข้อผิดพลาดหากไม่พบเจ้าของที่เกี่ยวข้อง (62ffda)NavigationEventCompose ได้เพิ่มNavigationEventHandlerComposable ใหม่เพื่อจัดการเหตุการณ์ (ท่าทางสัมผัสย้อนกลับแบบคาดการณ์) โดยจะให้Flowของออบเจ็กต์NavigationEventที่ต้องรวบรวมใน Lambda ที่ระงับซึ่งคุณระบุ c42ba6 :
NavigationEventHandler { progress: Flow<NavigationEvent> ->
// This block is executed when the back gesture begins.
try {
progress.collect { backEvent ->
// Handle gesture progress updates here.
}
// This block is executed if the gesture completes successfully.
} catch (e: CancellationException) {
// This block is executed if the gesture is cancelled
throw e
} finally {
// This block is executed either the gesture is completed or cancelled
}
}
การเปลี่ยนแปลง API
- ตอนนี้คุณจะลงทะเบียน
NavigationEventCallbackแต่ละรายการกับNavigationEventDispatcherได้เพียงรายการเดียวในแต่ละครั้ง การเพิ่มลงในผู้จัดส่งหลายรายจะทำให้เกิดIllegalStateExceptionโปรดทราบว่าลักษณะการทำงานนี้แตกต่างจากOnBackPressedDispatcherซึ่งอนุญาตให้มีผู้จัดส่งหลายราย (e82c19) - ทำให้
isPassThroughเป็นvalเพื่อป้องกันการเปลี่ยนแปลงระหว่างการนำทาง ซึ่งอาจทำให้การส่งของNavigationEventทำงานไม่ได้ (I0b287)
เวอร์ชัน 1.0.0-alpha02
4 มิถุนายน 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แทนที่ตัวสร้างรองของ
NavigationEventDispatcherด้วยอาร์กิวเมนต์เริ่มต้น (I716a0) - นำพร็อพเพอร์ตี้ที่มีลำดับความสำคัญออกจาก
NavigationEventCallbackส่งต่อลำดับความสำคัญไปยังNavigationEventDispatcher.addCallback()แทน (I13cae)
การแก้ไขข้อบกพร่อง
- แก้ไข
ConcurrentModificationExceptionที่อาจเกิดขึ้นเมื่อมีการเรียกNavigationEventCallback.remove()เนื่องจากการแก้ไขรายการภายในของรายการที่ปิดได้พร้อมกัน (b/420919815)
เวอร์ชัน 1.0.0-alpha01
20 พฤษภาคม 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ไลบรารี
androidx.navigationeventมี API ที่ใช้ KMP เป็นอันดับแรกสำหรับการจัดการการย้อนกลับของระบบและการย้อนกลับแบบคาดการณ์NavigationEventDispatcherทำหน้าที่เป็น API ทั่วไปสำหรับการลงทะเบียนอินสแตนซ์NavigationEventCallbackอย่างน้อย 1 รายการเพื่อรับเหตุการณ์ย้อนกลับของระบบ - เลเยอร์นี้อยู่ใต้ API ที่เปิดตัวก่อนหน้านี้ใน
androidx.activityและมีจุดมุ่งหมายเพื่อเป็นตัวแทนที่ยืดหยุ่นกว่าในการใช้ Activity API ในคอมโพเนนต์ระดับสูงขึ้น หรือใช้ API ของเฟรมเวิร์ก AndroidOnBackInvokedDispatcherโดยตรง เราได้เขียน API ของandroidx.activityใหม่โดยใช้ Navigation Event API เป็นส่วนหนึ่งของ Activity 1.12.0-alpha01