การนำทาง
androidx.navigation
androidx.navigation.compose
androidx.navigation.dynamicfeatures
androidx.navigation.dynamicfeatures.fragment
androidx.navigation.dynamicfeatures.fragment.ui
androidx.navigation.fragment
androidx.navigation.fragment.compose
androidx.navigation.testing
androidx.navigation.ui
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 24 กันยายน 2025 | 2.9.5 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Navigation คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.5" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.5" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
หากต้องการเพิ่ม Safe Args ลงในโปรเจ็กต์ ให้ใส่ classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.5" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
นอกจากนี้ คุณยังต้องใช้ปลั๊กอิน 1 ใน 2 รายการที่มีให้
หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสมกับโมดูล Java หรือโมดูล Java และ Kotlin แบบผสม ให้เพิ่มบรรทัดนี้ลงในไฟล์ build.gradle ของแอปหรือโมดูล
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
หรือหากต้องการสร้างโค้ด Kotlin ที่เหมาะสมสําหรับโมดูล Kotlin เท่านั้น ให้เพิ่ม
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
คุณต้องมี android.useAndroidX=true ในไฟล์ gradle.properties ตามหัวข้อการย้ายข้อมูลไปยัง AndroidX
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบเกี่ยวกับ KTX
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.9
เวอร์ชัน 2.9.5
24 กันยายน 2025
androidx.navigation:navigation-*:2.9.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.5 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Navigation Safe Args สามารถรองรับการรองรับ Kotlin ในตัวของ AGP 9.0 ได้แล้ว (I1d9d76)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ปลั๊กอิน Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 8.4.2 แล้ว (b/431847270, I5932a)
เวอร์ชัน 2.9.4
10 กันยายน 2025
androidx.navigation:navigation-*:2.9.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.4 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ป้องกันไม่ให้เกิดข้อขัดข้องเมื่อมีการส่งเหตุการณ์ย้อนกลับแบบคาดการณ์กลางเฟรมหลังจากปิดใช้ตัวแฮนเดิลในการเปลี่ยน
NavHost(I5667c, b/384186542)
เวอร์ชัน 2.9.3
30 กรกฎาคม 2025
androidx.navigation:navigation-*:2.9.3 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.3 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดใน
NavControllerที่ทำให้เกิดConcurrentModificationExceptionเมื่อใช้OnDestinationChangedListeners(If7406, b/417784831) - แก้ไขข้อผิดพลาดเมื่อใช้
navigate(uri, navOptions,navigationExtras)ซึ่งระบบจะละเว้นส่วนเสริม (I67fb7, b/430336813)
เวอร์ชัน 2.9.2
16 กรกฎาคม 2025
androidx.navigation:navigation-*:2.9.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.2 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่รายการไม่กลับมาทำงานต่อเมื่อปิดกล่องโต้ตอบเหนือรายการ (Idb20e, b/418746335)
- แก้ไข
MissingFieldExceptionข้อผิดพลาดเมื่อทดสอบSavedStateHandleด้วยเส้นทางที่ปลอดภัยสำหรับประเภทขณะใช้NavTypesที่กำหนดเอง (I2f843, b/421002511)
เวอร์ชัน 2.9.1
2 กรกฎาคม 2025
androidx.navigation:navigation-*:2.9.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.1 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้
NavEntriesซึ่งสร้างขึ้นโดยใช้ single top ไม่เคยไปไกลกว่าสถานะ CREATED ในLifecycle.State(I043ba, b/421095236)
เวอร์ชัน 2.9.0
7 พฤษภาคม 2025
androidx.navigation:navigation-*:2.9.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.8.0
- ตอนนี้ระบบจะสร้างการดำเนินการ Navigation Safe Args ด้วยคำอธิบายประกอบ
@CheckResultเพื่อให้มั่นใจว่ามีการใช้งาน
อินเทอร์เฟซ SupportingPane
- ตอนนี้ผู้ให้บริการนำทางที่กำหนดเองสามารถทำเครื่องหมายปลายทางของตนว่าใช้
SupportingPaneอินเทอร์เฟซ ซึ่งจะระบุให้NavControllerทราบว่าปลายทางเหล่านี้จะแสดงควบคู่ไปกับปลายทางอื่นๆ การใช้อินเทอร์เฟซนี้จะช่วยให้คุณRESUMEDได้หลายปลายทางพร้อมกัน เช่น
Compose Kotlin Multiplatform
- ตอนนี้การนำทางมีฟังก์ชัน
NavController.handleDeepLink()ใหม่ที่ใช้กันทั่วไปซึ่งรับNavDeepLinkRequestแทนIntentซึ่งจะช่วยให้แพลตฟอร์มอื่นๆ นอกเหนือจาก Android จัดการ Deep Link ได้อย่างเหมาะสม ขอขอบคุณ Konstantin Tskhovrebov - ตอนนี้การนำทางมี
NavUriซึ่งเป็นฟังก์ชันตัวแยกวิเคราะห์ทั่วไปใหม่ที่เป็น API ที่เข้ากันได้สำหรับ URI ของ Android ในแพลตฟอร์มอื่นๆ ซึ่งจะช่วยให้สร้าง URI ในลักษณะที่ไม่ขึ้นกับแพลตฟอร์มได้ ขอขอบคุณ Konstantin Tskhovrebov
ฟังก์ชันที่ปลอดภัยต่อประเภท
- API ที่ปลอดภัยตามประเภทซึ่งก่อนหน้านี้เข้าถึงได้ผ่าน
reifiedเมธอดเท่านั้น เช่นcomposable<YourScreen>มีเวอร์ชันที่ไม่ใช่แบบรีฟายด์ซึ่งรับอินสแตนซ์KClassโดยตรงแล้ว - ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว
เวอร์ชัน 2.9.0-rc01
23 เมษายน 2025
androidx.navigation:navigation-*:2.9.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- นำเป้าหมายแพลตฟอร์มที่ไม่ใช่ Android ทั้งหมดออกจาก Jetpack Navigation เนื่องจากเป้าหมายเหล่านั้นใช้งานไม่ได้จริง ตอนนี้เรามี Stub สำหรับแพลตฟอร์มต่างๆ แทนแล้ว (I2877d)
เวอร์ชัน 2.9.0-beta01
9 เมษายน 2025
androidx.navigation:navigation-*:2.9.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- API ทั่วไปของ
parseStringAsNavUriได้รับการเปลี่ยนเป็นฟังก์ชันโรงงานNavUriที่รับสตริง (I4db6e, b/403616316)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารีนี้กำหนดเป้าหมายเป็นระดับภาษา Kotlin 2.0 และต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
เวอร์ชัน 2.9.0-alpha09
26 มีนาคม 2025
androidx.navigation:navigation-*:2.9.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha09 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้โมดูล
navigation-testingรองรับการใช้งานบนเดสก์ท็อป, Linux, macOS และ iOS นอกเหนือจาก Android แล้ว (I2b770, b/398265336) NavTypeรองรับการใช้งานบนเดสก์ท็อป, Linux, macOS และ iOS แล้ว นอกเหนือจาก Android (I297d8)
เวอร์ชัน 2.9.0-alpha08
12 มีนาคม 2025
androidx.navigation:navigation-*:2.9.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Navigation
2.8.9: แก้ไขการถดถอยที่พบใน Navigation 2.8.8 ซึ่งกำหนดให้ Deep Link ต้องตรงกับช่องทั้งหมดของคำขอหรือ Intent ของ Deep Link อย่างแม่นยำจึงจะถือว่าตรงกัน ซึ่งทำให้ Deep Link ที่มีการจับคู่ฟิลด์บางส่วนและไม่มีฟิลด์อื่นๆ ใช้งานไม่ได้อีกต่อไป (Ie5e36, b/399826566)
การมีส่วนร่วมภายนอก
- ฟังก์ชันตัวแยกวิเคราะห์ทั่วไปใหม่เพื่อสร้าง
NavUriขอขอบคุณ Konstantin Tskhovrebov (If0a6a)
เวอร์ชัน 2.9.0-alpha07
26 กุมภาพันธ์ 2025
androidx.navigation:navigation-*:2.9.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha07 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การพยายาม
saveStateด้วยป๊อปอัปที่ไม่ครอบคลุมจะทำให้เกิด savedState ที่เป็นค่าว่าง ซึ่งอาจทำให้เกิดข้อขัดข้องเมื่อกู้คืน (I9f3e8, b/395091644) - จาก Navigation 2.8.8: แก้ไขการ
NavDeepLinkที่ต้องตรงกันทุกประการใน uri, action และ mime สำหรับ Deep Link และคำขอ Deep Link ระบบจะไม่อนุญาตให้จับคู่หากมีช่องที่ตรงกันเพียง 1 หรือ 2 ช่อง (I3b029, b/395712033) - จาก Navigation 2.8.8: แก้ไขข้อบกพร่องที่เส้นทางที่มีเส้นทางไวลด์การ์ดไม่ตรงกับ Deep Link ที่เพิ่ม (I7ea92, b/389970341)
การมีส่วนร่วมภายนอก
- แยก API การนำทางทั่วไป, การนำทางรันไทม์ และการนำทางแบบ Compose ไปยังแพลตฟอร์มทั่วไป ขอขอบคุณ Konstantin Tskhovrebov (I1e626, Ica76f, Idf479)
ปัญหาที่ทราบ
- เนื่องจากการดำเนินการเพื่อแก้ไข b/395712033 ทำให้ระบบกำหนดให้ Deep Link ต้องมีฟิลด์ทั้งหมดเหมือนกับคำขอ Deep Link และ/หรือ
Intentอย่างไม่ถูกต้อง ดีปลิงก์ควรต้องตรงกับฟิลด์ที่มีเท่านั้น และควรละเว้นฟิลด์ที่ไม่ได้รวมไว้ ปัญหานี้ได้รับการแก้ไขแล้วสำหรับรุ่นถัดไปซึ่งเป็นส่วนหนึ่งของ b/399826566
เวอร์ชัน 2.9.0-alpha06
12 กุมภาพันธ์ 2025
androidx.navigation:navigation-*:2.9.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha06 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ระบบจะสร้างการดำเนินการ Navigation Safe Args ด้วยคำอธิบายประกอบ
@CheckResultเพื่อให้มั่นใจว่ามีการใช้งาน (I14d4c, b/356323084)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดใน
NavControllerที่พยายามกู้คืนสถานะ BackStack ลงในอาร์เรย์อย่างไม่ถูกต้องเมื่อบันทึกลงในรายการ (Idfb9b) - จาก Navigation
2.8.7: ตอนนี้ Navigation Safe Args รองรับปลายทางที่ประกอบได้แล้ว (I35320, b/362791955)
เวอร์ชัน 2.9.0-alpha05
29 มกราคม 2025
androidx.navigation:navigation-*:2.9.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้เกิดภาพเคลื่อนไหวการปรับขนาดที่ไม่คาดคิดเมื่อใช้ Navigation Compose (I480f4, b/353294030)
- จากการนำทาง
2.8.6: ป้ายกำกับNavDestinationที่ระบุผ่าน XML จะได้รับการแยกวิเคราะห์ผ่านNavType.getเพื่อให้มั่นใจว่าระบบจะใช้ตรรกะNavTypeที่กำหนดเอง (I7ec2f, b/388100796) - จากการนำทาง
2.8.6: เมื่อนำทางไปยังกิจกรรมที่มีdataPatternตอนนี้ActivityNavigatorจะพยายามเข้ารหัสค่าอาร์กิวเมนต์ด้วยNavTypeของอาร์กิวเมนต์ (I16376, b/383616432) - จากการนำทาง
2.8.5: แก้ไขปัญหาที่ทำให้เกิดภาพเคลื่อนไหวการปรับขนาดที่ไม่คาดคิดเมื่อใช้ Navigation Compose และเรียกใช้การนำทางในเฟรมเดียวกันกับที่ภาพเคลื่อนไหวปัจจุบันกำลังสิ้นสุด (I26cb1, b/353294030)
เวอร์ชัน 2.9.0-alpha04
11 ธันวาคม 2024
androidx.navigation:navigation-*:2.9.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- API ที่ปลอดภัยตามประเภทซึ่งก่อนหน้านี้เข้าถึงได้ผ่าน
reifiedเมธอดเท่านั้น เช่นcomposable<YourScreen>มีเวอร์ชันที่ไม่ใช่เวอร์ชันที่ทำให้เป็นจริงซึ่งใช้โดยตรงกับอินสแตนซ์KClass(Ia7eed, Id2879, Ibf244, I17d79, Id09d2, I54696, Ia47be, I93281, Ic1bf0, Iba4ee, If56a5, Icf969, I67644, I6f788, b/382094941, b/366291612, b/381938808)
ตารางด้านล่างแสดง API ที่ทำให้เป็นจริงและ KClass
| ทำให้เป็นรูปธรรม | KClass |
|---|---|
composable<TestClass> { } |
composable(TestClass::class) { } |
navigation<NestedGraph>(startDestination = TestClass::class) |
navigation(route = NestedGraph::class, startDestination = TestClass::class) |
dialog<TestClass> {} |
dialog(TestClass::class) {} |
navDeepLink<TestClass>(baseUri) |
navDeepLink(TestClass::class, baseUri) |
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) |
NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri) |
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } |
NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { } |
navController.getBackStackEntry<TestClass>() |
navController.getBackStackEntry(TestClass::class) |
navController.popBackStack<TestClass>(true) |
navController.popBackStack(TestClass::class, true) |
navController.clearBackStack<TestClass>() |
navController.clearBackStack(TestClass::class) |
NavOptions.setPopUpTo<TestClass>() |
NavOptions.setPopUpTo(TestClass::class) |
navOptions { popUpTo<TestClass> {...} } |
navOptions { popUpTo(TestClass::class) {...} } |
NavGraph.setStartDestination<TestClass>() |
NavGraph.setStartDestination(TestClass::class) |
NavGraph.findNode<TestClass>() |
NavGraph.findNode(TestClass::class) |
backStackEntry.toRoute<TestClass>() |
backStackEntry.toRoute(TestClass::class) |
savedStateHandle.toRoute<TestClass>() |
savedStateHandle.toRoute(TestClass::class) |
การเปลี่ยนแปลง API
NavGraph.setStartDestinationโอเวอร์โหลดเฉพาะ Kotlin เพื่อความปลอดภัยของประเภทจะซ่อนจากแหล่งที่มาของ Java (Ic640c, b/364634035)
การแก้ไขข้อบกพร่อง
- จาก Navigation
2.8.5: แก้ไขปัญหาที่NavHostอาจทำให้เกิดข้อยกเว้นภายในPredictiveBackHandlerหากมีการป๊อปแบ็กสแต็กจนเหลือ 1 รายการและมีการเรียกใช้การย้อนกลับของระบบในเฟรมเดียวกัน (I1a429, b/375343407) - จากการนำทาง
2.8.5: แก้ไขNavDestinationNullPointerExceptionเมื่ออัปเดตstartDestinationของกราฟ (I99421, b/361560785)
การมีส่วนร่วมภายนอก
- จากการนำทาง
2.8.5: ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับList<Enum>เป็นประเภทอาร์กิวเมนต์ของเส้นทางโดยไม่ต้องใช้NavTypeที่กำหนดเอง ขอขอบคุณ Csaba Kozák (GH-725, b/375559962)
เวอร์ชัน 2.9.0-alpha03
13 พฤศจิกายน 2024
androidx.navigation:navigation-*:2.9.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha03 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว (I9344a, b/374347483)
การแก้ไขข้อบกพร่อง
- แก้ไข
ConcurrentModificationExceptionที่อาจเกิดขึ้นเมื่อLifecycleObserverที่แนบมากับNavBackStackEntryทริกเกอร์การเปลี่ยนแปลงสแต็กย้อนกลับเมื่อโฮสต์LifecycleOwnerเช่น กิจกรรมหรือ Fragment ที่มีอยู่ เปลี่ยนสถานะวงจรของตัวเอง (Ia9494)
เวอร์ชัน 2.9.0-alpha02
30 ตุลาคม 2024
androidx.navigation:navigation-*:2.9.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha02 มีการเปลี่ยนแปลงเหล่านี้
การมีส่วนร่วมภายนอก
NavController.handleDeepLink(request: NavDeepLinkRequest)วิธีใหม่ที่ใช้กันทั่วไป ขอขอบคุณ Konstantin Tskhovrebov (I3e228)
เวอร์ชัน 2.9.0-alpha01
16 ตุลาคม 2024
androidx.navigation:navigation-*:2.9.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ผู้ให้บริการนำทางที่กำหนดเองสามารถทำเครื่องหมายปลายทางของตนว่าใช้
SupportingPaneอินเทอร์เฟซ ซึ่งจะระบุให้NavControllerทราบว่าปลายทางเหล่านี้จะแสดงควบคู่ไปกับปลายทางอื่นๆ การใช้อินเทอร์เฟซนี้จะช่วยให้คุณRESUMEDได้หลายปลายทางพร้อมกัน เช่น (Id5559) - จากการนำทาง
2.8.3: เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูลnavigation-common,navigation-runtimeและnavigation-composeเพื่อช่วยระบุเส้นทางที่ปลอดภัยสำหรับประเภทที่ไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย@Serializableการตรวจสอบนี้จะมีผลกับฟังก์ชันส่วนขยายทั้งหมดของNavGraphBuilderและNavDeepLinkBuilder(I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - จากการนำทาง
2.8.3: เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูลnavigation-common,navigation-runtimeและnavigation-composeเพื่อช่วยระบุเส้นทางที่ปลอดภัยสำหรับประเภทที่มีอาร์กิวเมนต์ Enum ซึ่งไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย@Keepการตรวจสอบนี้จะมีผลกับฟังก์ชันส่วนขยายทั้งหมดของNavGraphBuilderและNavDeepLinkBuilder(I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
การเปลี่ยนแปลงลักษณะการทำงาน
- การพยายามใช้
NavControllerที่DESTROYEDไปแล้วก่อนหน้านี้จะทำให้เกิดIllegalStateException(I520da, b/369616172)
การแก้ไขข้อบกพร่อง
- อัปเดตข้อยกเว้น "ไม่พบคลาส Enum" เพื่อแนะนำให้ใช้คำอธิบายประกอบ
@Keepในกรณีที่คลาส Enum ถูกลบในการสร้างที่ย่อขนาด (I90e79, b/358137294)
ปัญหาที่ทราบ
- กฎ Lint ใหม่ที่เพิ่มเข้ามาใน
Navigation 2.8.*มีปัญหาซึ่งทำให้เกิดข้อผิดพลาดObsolete custom lint checkเมื่อพยายามเรียกใช้ Lint ด้วยปลั๊กอิน Android Gradle 8.4 ขึ้นไป (b/368070326, b/371463741)
เวอร์ชัน 2.8
เวอร์ชัน 2.8.9
12 มีนาคม 2025
androidx.navigation:navigation-*:2.8.9 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.9 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยที่พบใน Navigation 2.8.8 ซึ่งกำหนดให้ Deep Link ต้องตรงกับช่องทั้งหมดของคำขอหรือ Intent ของ Deep Link อย่างแม่นยำจึงจะถือว่าตรงกัน ซึ่งทำให้ Deep Link ที่มีการจับคู่ฟิลด์บางส่วนและไม่มีฟิลด์อื่นๆ ใช้งานไม่ได้อีกต่อไป (Ie5e36, b/399826566)
เวอร์ชัน 2.8.8
26 กุมภาพันธ์ 2025
androidx.navigation:navigation-*:2.8.8 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.8 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่เส้นทางที่มีเส้นทางไวลด์การ์ดไม่ตรงกับ Deeplink ที่เพิ่ม (I7ea92, b/389970341)
- เราได้แก้ไขการจับคู่
NavDeepLinkที่ Deep Link และคำขอ Deep Link ต้องตรงกันทุกประการใน URI, การดำเนินการ และ MIME ระบบจะไม่อนุญาตให้จับคู่หากมีช่องที่ตรงกันเพียง 1 หรือ 2 ช่อง (I3227f, b/395712033)
ปัญหาที่ทราบ
- เนื่องจากการดำเนินการเพื่อแก้ไข b/395712033 ทำให้ระบบกำหนดให้ Deep Link ต้องมีฟิลด์ทั้งหมดเหมือนกับคำขอ Deep Link และ/หรือ
Intentอย่างไม่ถูกต้อง ดีปลิงก์ควรต้องตรงกับฟิลด์ที่มีเท่านั้น และควรละเว้นฟิลด์ที่ไม่ได้รวมไว้ ปัญหานี้ได้รับการแก้ไขแล้วสำหรับรุ่นถัดไปซึ่งเป็นส่วนหนึ่งของ b/399826566
เวอร์ชัน 2.8.7
12 กุมภาพันธ์ 2025
androidx.navigation:navigation-*:2.8.7 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.7 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Navigation Safe Args รองรับปลายทางที่ประกอบได้แล้ว (I35320, b/362791955)
เวอร์ชัน 2.8.6
29 มกราคม 2025
androidx.navigation:navigation-*:2.8.6 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.6 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ระบบจะแยกวิเคราะห์ป้ายกำกับ
NavDestinationที่ระบุผ่าน XML โดยใช้NavType.getเพื่อให้มั่นใจว่าระบบจะปฏิบัติตามตรรกะNavTypeที่กำหนดเอง (Id366d, b/388100796) - เมื่อไปยังกิจกรรมด้วย
dataPatternตอนนี้ActivityNavigatorจะพยายามเข้ารหัสค่าอาร์กิวเมนต์ด้วยNavTypeของอาร์กิวเมนต์ (I1a71d, b/383616432)
เวอร์ชัน 2.8.5
11 ธันวาคม 2024
androidx.navigation:navigation-*:2.8.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.5 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
NavHostอาจทำให้เกิดข้อยกเว้นภายในPredictiveBackHandlerหากมีการป๊อปสแต็กย้อนกลับลงไปที่ 1 รายการและมีการเรียกใช้การย้อนกลับของระบบในเฟรมเดียวกัน (I1a429, b/375343407) - แก้ไข
NavDestinationNullPointerExceptionเมื่ออัปเดตstartDestinationของกราฟ (I99421, b/361560785) - แก้ไขปัญหาที่ทำให้เกิดภาพเคลื่อนไหวการปรับขนาดโดยไม่คาดคิดเมื่อใช้ Navigation Compose และเรียกใช้ navigate ในเฟรมเดียวกันกับที่ภาพเคลื่อนไหวปัจจุบันสิ้นสุดลง (I26cb1, b/353294030)
- แก้ไข
ConcurrentModificationExceptionที่อาจเกิดขึ้นเมื่อLifecycleObserverที่แนบมากับNavBackStackEntryทริกเกอร์การเปลี่ยนแปลงสแต็กย้อนกลับเมื่อโฮสต์LifecycleOwnerเช่น กิจกรรมหรือ Fragment ที่มีอยู่ เปลี่ยนสถานะวงจรของตัวเอง (Ia9494)
การมีส่วนร่วมภายนอก
- ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับ
List<Enum>เป็นประเภทอาร์กิวเมนต์ของเส้นทางโดยไม่ต้องใช้NavTypeที่กำหนดเอง ขอขอบคุณ Csaba Kozák (GH-725, b/375559962)
เวอร์ชัน 2.8.4
13 พฤศจิกายน 2024
androidx.navigation:navigation-*:2.8.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.4 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- จากการนำทาง
2.9.0-alpha03: ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว (I9344a, b/374347483)
การแก้ไขข้อบกพร่อง
- จากการนำทาง
2.9.0-alpha01: การพยายามใช้NavControllerที่DESTROYEDไปแล้วก่อนหน้านี้จะทำให้เกิดIllegalStateException(I520da, b/369616172)
เวอร์ชัน 2.8.3
16 ตุลาคม 2024
androidx.navigation:navigation-*:2.8.3 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.3 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูล
navigation-common,navigation-runtimeและnavigation-composeเพื่อช่วยระบุเส้นทางที่ปลอดภัยต่อประเภทซึ่งไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย@Serializableการตรวจสอบนี้จะมีผลกับฟังก์ชันส่วนขยายทั้งหมดของNavGraphBuilderและNavDeepLinkBuilder(I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - เพิ่มการตรวจสอบ Lint ใหม่สำหรับโมดูล
navigation-common,navigation-runtimeและnavigation-composeเพื่อช่วยระบุเส้นทางที่ปลอดภัยต่อประเภทที่มีอาร์กิวเมนต์ Enum ซึ่งไม่ได้ใส่คำอธิบายประกอบอย่างถูกต้องด้วย@Keepการตรวจสอบนี้จะมีผลกับฟังก์ชันส่วนขยายทั้งหมดของNavGraphBuilderและNavDeepLinkBuilder(I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่กฎ Lint ใหม่ซึ่งเพิ่มเข้ามาใน
Navigation 2.8.*ทำให้เกิดข้อผิดพลาดObsolete custom lint checkเมื่อพยายามเรียกใช้ Lint ด้วยปลั๊กอิน Android Gradle 8.4 ขึ้นไป (I1be3d, b/368070326, b/371463741)
ปัญหาที่ทราบ
- การตรวจสอบ Lint ของการนำทางจะแสดงข้อผิดพลาดการตรวจสอบ Lint ที่กำหนดเองที่ล้าสมัยเมื่อพยายามเรียกใช้ Lint ด้วย Lint 16 (AGP 8.7) ขึ้นไป (b/371926651)
เวอร์ชัน 2.8.2
2 ตุลาคม 2024
androidx.navigation:navigation-*:2.8.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.2 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Navigation Type Safety รองรับคลาสที่ทำให้อ่านและเขียนได้ ซึ่งรวมถึง
Double,Double?,DoubleArray,DoubleArray?,List<Double>และList<Double>?โดยไม่ต้องใช้NavTypeที่กำหนดเอง (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
การแก้ไขข้อบกพร่อง
- ปรับปรุงข้อความแสดงข้อผิดพลาดในกรณีที่การนำทางไม่สามารถแมปอาร์กิวเมนต์ของเส้นทางกับ
NavTypeข้อความแสดงข้อผิดพลาดใหม่จะมีชื่ออาร์กิวเมนต์ ชื่อแบบเต็มของอาร์กิวเมนต์ และชื่อแบบเต็มของเส้นทาง (Id8416, b/346264232)
เวอร์ชัน 2.8.1
18 กันยายน 2024
androidx.navigation:navigation-*:2.8.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.1 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มกฎ Lint ใหม่เพื่อให้แน่ใจว่ามีการใช้ฟังก์ชัน
popBackStackที่ใช้ประเภทคลาสที่ทำให้เป็นจริงเมื่อพยายามpopBackStackโดยใช้ API ที่ปลอดภัยต่อประเภท (Ief161, b/358095343)
การแก้ไขข้อบกพร่อง
- ตอนนี้การนำทางกำหนดให้เส้นทางที่ส่งไปยัง
NavGraphของstartDestinationต้องมีค่าสำหรับอาร์กิวเมนต์ที่จำเป็นทั้งหมด ซึ่งรวมถึงอาร์กิวเมนต์ที่ต้องระบุค่าและไม่มีค่าเริ่มต้น (I18e74, b/362594265) - Navigation Safe Args ได้เพิ่มการรองรับสตริงที่กำหนดให้เป็นค่าว่างไม่ได้ เพื่อให้ระบบแยกวิเคราะห์ค่า "null" และจัดเก็บไว้ใน Bundle ตามเดิม ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งจะแยกวิเคราะห์ค่า "null" เป็นออบเจ็กต์ Null การเปลี่ยนแปลงนี้มีผลกับประเภท String ที่ไม่ใช่ Null เท่านั้น สตริงที่อนุญาตให้เป็นค่าว่างจะยังคงเดิม (I08b4a, b/348936238)
- ระบบจะ Deep Link ไปยัง
NavDestinationไม่ได้อีกต่อไป ยกเว้นผ่าน Deep Link ที่เพิ่มไปยังปลายทางอย่างชัดเจน ซึ่งหมายความว่าคุณจะไปยังเส้นทางของจุดหมายได้โดยใช้ฟังก์ชันการนำทางที่โอเวอร์โหลดซึ่งใช้เส้นทางสตริงเท่านั้น การเปลี่ยนแปลงนี้แก้ไขช่องโหว่ที่ทำให้สามารถ Deep Link ไปยังปลายทางที่อาจได้รับการปกป้อง (Ie30e6)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Navigation Safe Args ขึ้นอยู่กับ Kotlin 1.9.24 แทนที่จะเป็น Kotlin 2.X เพื่อให้มั่นใจว่านักพัฒนาแอปจะไม่ถูกบังคับให้อัปเดต (a4129a)
- ตอนนี้การเขียนการนำทางขึ้นอยู่กับ Compose
1.7.2แล้ว
เวอร์ชัน 2.8.0
4 กันยายน 2024
androidx.navigation:navigation-*:2.8.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 2.7.0
ความปลอดภัยของประเภท DSL ของ Kotlin สำหรับการนำทาง
- ตอนนี้การนำทางมี Type Safety สำหรับ Kotlin DSL (ใช้โดย Navigation Compose) โดยใช้ Kotlin Serialization เพื่อให้คุณกำหนดปลายทางในกราฟการนำทางผ่านออบเจ็กต์และคลาสข้อมูลที่ปลอดภัยตามประเภทได้แล้ว
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์ Navigation Compose meet Type Safety
Navigation Compose Predictive Back
- ตอนนี้ Navigation Compose รองรับการย้อนกลับในแอปที่คาดการณ์ได้ผ่าน
SeekableTransitionStateAPI ใหม่จาก compose-animation แล้ว ซึ่งช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมด้วยการเปลี่ยนฉากที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก
Composable ของ Navigation Fragment
- เพิ่ม
navigation-fragment-composeอาร์ติแฟกต์ใหม่ที่มีComposableNavHostFragmentทางเลือกแทนNavHostFragmentซึ่งช่วยให้คุณเพิ่มปลายทางที่ประกอบได้ลงในไฟล์ XML ของการนำทางcomposableปลายทางแต่ละแห่งต้องแสดงเป็นเมธอดระดับบนสุดที่ไม่มีอาร์กิวเมนต์@Composableซึ่งใช้ชื่อแบบสมบูรณ์เป็นแอตทริบิวต์android:nameในแต่ละปลายทาง เมื่อไปยังปลายทางใดปลายทางหนึ่งเหล่านี้ ระบบจะสร้าง Fragment ที่มีอยู่เพื่อแสดงเนื้อหาที่สามารถเขียนร่วมกันได้
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
การเปลี่ยนแปลงอื่นๆ
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Compose 1.7.0 แล้ว
- ตอนนี้การนำทางมี
CollectionNavType<T>คลาสใหม่ ซึ่งเป็นคลาสย่อยของNavType<T>สำหรับอาร์กิวเมนต์ที่อิงตามคอลเล็กชัน เช่น รายการ อาร์เรย์ แผนที่ ตอนนี้อาร์เรย์NavTypeเริ่มต้นทั้งหมด (IntArrayType,LongArrayType,FloatArrayType,BoolArrayTypeและStringArrayType) จะรับค่าจากคลาสใหม่นี้ NavTypeตอนนี้รองรับรายการ Int, String, บูลีน, Float และ Long ในตัวแล้ว
เวอร์ชัน 2.8.0-rc01
21 สิงหาคม 2024
androidx.navigation:navigation-*:2.8.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในการนำทางเมื่อส่งคลาส Enum ระดับบนสุดเป็นอาร์กิวเมนต์ที่ปลอดภัยต่อประเภท (I0ba76, b/358137294)
- ตอนนี้ Navigation 2.8 ทำงานร่วมกับ SDK 34 ได้อย่างถูกต้อง และจะไม่เปลี่ยนไปใช้ SDK 35 จนกว่าจะมีการเปิดตัว 2.9 พร้อมกับไลบรารี AndroidX ที่เหลือ (b/358798728)
เวอร์ชัน 2.8.0-beta07
7 สิงหาคม 2024
androidx.navigation:navigation-*:2.8.0-beta07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta07 มีการเปลี่ยนแปลงเหล่านี้
ปัญหาที่ทราบ
- เนื่องจาก b/358137294 ระบบจึงรองรับเฉพาะ Enum ที่ซ้อนอยู่ในคลาสอื่นเท่านั้น โดยจะรองรับ Enum ระดับบนสุดในรุ่นถัดไป
การแก้ไขข้อบกพร่อง
- เมื่อนำทางไปยังจุดหมายที่ซ้ำกันหรือแชร์ การนำทางจะจัดลำดับความสำคัญของการไปยังจุดหมายที่ตรงกันมากที่สุดจากตำแหน่งปัจจุบันในกราฟ (Ic89a4, b/352006850)
- การนำทางใน Safe Args มี
NavType.EnumTypeใหม่เพิ่มเข้ามาแล้ว ซึ่งหมายความว่าEnumประเภทต่างๆ ไม่จำเป็นต้องมีNavTypeที่กำหนดเองอีกต่อไป โปรดทราบว่าEnumSerialNameต้องเป็นชื่อแบบสมบูรณ์เริ่มต้น (I66d22, b/346475493) - การนำทางใน Safe Args ได้เพิ่มการรองรับในตัวสำหรับประเภทอาร์กิวเมนต์ที่อนุญาตให้เป็น Null ซึ่งรวมถึง
Int?,Long?,Float?,Boolean?และEnum<*>?(I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - ตอนนี้
startDestinationของNavGraphจะใช้ค่าอาร์กิวเมนต์เริ่มต้นหากเส้นทางstartDestinationที่ส่งไปยังNavGraphตรงกับstartDestination.routeทุกประการ (I13762, b/354046047)
เวอร์ชัน 2.8.0-beta06
24 กรกฎาคม 2024
androidx.navigation:navigation-*:2.8.0-beta06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta06 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
WrongStartDestinationTypeการตรวจสอบ Lint ไม่ได้ตรวจสอบออบเจ็กต์ Companion ในประเภทคลาสที่ส่งเข้ามา ทำให้ Lint ตรวจหาข้อผิดพลาดไม่สำเร็จ (I92b09)
เวอร์ชัน 2.8.0-beta05
10 กรกฎาคม 2024
androidx.navigation:navigation-*:2.8.0-beta05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta05 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
singleTopข้อขัดข้องในการนำทางเมื่อNavGraphsที่ซ้อนกันใช้เส้นทางstartDestinationเดียวกัน (I17b94, b/294408596)
เวอร์ชัน 2.8.0-beta04
26 มิถุนายน 2024
androidx.navigation:navigation-*:2.8.0-beta04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta04 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การนำทางรองรับการนำทางด้วยสตริงว่างในอาร์กิวเมนต์เส้นทางแล้ว (Ic5dbd, b/339481310)
- ปรับปรุงข้อความแสดงข้อผิดพลาดสำหรับซีเรียลไลเซอร์ที่กำหนดเองซึ่งประกาศโดยตรงในฟิลด์คลาสผ่าน
@Serializable(with =...)เพื่อชี้แจงว่าขณะนี้ฟีเจอร์นี้ยังไม่รองรับ (I052b0, b/341319151) SavedStateHandleFactoryตอนนี้สามารถใช้ test api ในการทดสอบที่ไม่ใช่ Android ได้แล้ว แต่จะต้องใช้ Robolectric เพื่อรองรับการแยกวิเคราะห์อาร์กิวเมนต์ด้วย Bundle (I76cdc, b/340966212)- แก้ไขข้อขัดข้องจากการคืนค่าสถานะเมื่อกลับมาใช้แอปต่อหลังจากกระบวนการสิ้นสุดลงด้วยการใช้การนำทางที่ปลอดภัยต่อประเภทใน Compose (Ia8f38, b/341801005)
- แก้ไขปัญหาใน Navigation Compose ซึ่งหลังจากยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์แล้ว
NavBackStackEntryที่ผู้ใช้กลับไปจะไม่กลับไปที่สถานะวงจรของRESUMEDอีก นอกจากนี้ยังช่วยให้มั่นใจว่าปลายทางที่กลับมาจะเคลื่อนไหวกลับเข้ามาอย่างถูกต้องแทนที่จะเลื่อนกลับมาในตำแหน่งเดิมหลังจากที่เลื่อน (I97a0c, b/346608857) - เมื่อใช้การย้อนกลับแบบคาดการณ์กับ Navigation Compose ตอนนี้ปลายทางที่ถูกป๊อปอัปจะมีลำดับ Z ที่เหมาะสม โดยจะเคลื่อนไหวอย่างถูกต้องที่ด้านบนของปลายทางที่เข้ามา (I2077b, b/345993681)
เวอร์ชัน 2.8.0-beta03
12 มิถุนายน 2024
androidx.navigation:navigation-*:2.8.0-beta03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta03 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
CollectionNavTypeมีemptyCollection()วิธีการใหม่ในการดึงข้อมูล ลบล้างเพื่อจัดการคอลเล็กชันที่ว่างเปล่าซึ่งส่งผ่านเป็นอาร์กิวเมนต์ (Ie4d84, b/341723133)
การแก้ไขข้อบกพร่อง
- เพิ่มเอกสารประกอบเกี่ยวกับ
NavType.serializeAsValueและserializeAsValuesเพื่อเน้นว่าเอาต์พุตสุดท้ายควรมีการเข้ารหัส Uri (Ida6bd, b/344943214) - แก้ไขข้อขัดข้องเมื่อเรียก
toRoute<T>โดยมีอาร์กิวเมนต์CollectionNavTypeเป็นค่าว่าง เมื่อไปยังส่วนต่างๆ ด้วยCollectionNavTypeที่เป็นค่าว่าง อาร์กิวเมนต์เอาต์พุตจะเป็นค่าเริ่มต้นที่ประกาศไว้ในคลาส Serializable หรือค่าที่ส่งคืนของemptyCollection()หากไม่มีค่าเริ่มต้น (I84158, Id630f, b/342672856)
เวอร์ชัน 2.8.0-beta02
29 พฤษภาคม 2024
androidx.navigation:navigation-*:2.8.0-beta02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
ClassCastExceptionการขัดข้องเมื่อใช้NavBackStackEntry.toRouteกับNavTypeที่กำหนดเองซึ่งยอมรับค่า Null ได้ (I1c29b, b/342239473) - แก้ไขปัญหาการกู้คืนสถานะ Back Stack ของการนำทางที่เกิดขึ้นเมื่อพยายามกู้คืนรายการ Back Stack ที่เข้าถึงไม่ได้ผ่านรหัสจากปลายทางปัจจุบัน เนื่องจากเส้นทางได้รับการสนับสนุนโดยรหัส ปลายทางที่สร้างด้วยเส้นทางจึงได้รับผลกระทบด้วย นอกจากนี้ยังแก้ไขข้อขัดข้องที่เกิดจากการเรียกใช้
clearBackStack()ซึ่งมีปัญหาพื้นฐานเดียวกันด้วย (I423c3, b/339908057)
เวอร์ชัน 2.8.0-beta01
14 พฤษภาคม 2024
androidx.navigation:navigation-*:2.8.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
SavedStateHandle.toRoute()ตอนนี้รับพารามิเตอร์typeMapสำหรับประเภทอาร์กิวเมนต์ที่กำหนดเองแล้ว (Ie39fb, b/339026523)- เพิ่ม API สำหรับทดสอบใน
navigation-testingเพื่อสร้างSavedStateHandleจากออบเจ็กต์ Kotlin Serializable (Id4867, b/339080702)
การแก้ไขข้อบกพร่อง
- เพิ่มเอกสารพารามิเตอร์ที่ขาดหายไปสำหรับฟังก์ชัน Navigation Kotlin DSL แล้ว (I26a36)
เวอร์ชัน 2.8.0-alpha08
1 พฤษภาคม 2024
androidx.navigation:navigation-*:2.8.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้
Safe Args ใน Navigation Compose
- เราได้ดำเนินการรองรับความปลอดภัยของประเภทในเวลาคอมไพล์สำหรับ Navigation Compose และผู้ใช้ Navigation Kotlin DSL ที่อิงตาม Kotlin Serialization เสร็จสมบูรณ์แล้ว และตอนนี้ API ที่เคยเป็นเวอร์ชันทดลองก็เสถียรแล้ว (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
ฟังก์ชันนี้ใช้ Kotlin Serialization เพื่อให้คุณกำหนดปลายทางในกราฟการนำทางผ่านออบเจ็กต์และคลาสข้อมูลที่ปลอดภัยตามประเภทได้
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์ Navigation Compose meet Type Safety
ฟีเจอร์ใหม่
- ตอนนี้อาร์ติแฟกต์
navigation-fragment-composeมีLocalFragmentองค์ประกอบเฉพาะสำหรับเมธอดที่ใช้ร่วมกันได้ภายในComposableFragment(If35e5) NavTypeตอนนี้รองรับรายการ Int, String, บูลีน, Float และ Long ในตัวแล้ว (I4b6dd, Ia914c, b/188693139)
เวอร์ชัน 2.8.0-alpha07
17 เมษายน 2024
androidx.navigation:navigation-*:2.8.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha07 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่ม
navigation-fragment-composeอาร์ติแฟกต์ใหม่ที่มีComposableNavHostFragmentทางเลือกแทนNavHostFragmentซึ่งช่วยให้คุณเพิ่มcomposableปลายทางลงในไฟล์ XML ของการนำทางได้composableปลายทางแต่ละแห่งต้องแสดงเป็นเมธอดระดับบนสุดที่ไม่มีอาร์กิวเมนต์@Composableซึ่งใช้ชื่อแบบสมบูรณ์เป็นแอตทริบิวต์android:nameในแต่ละปลายทาง เมื่อไปยังปลายทางใดปลายทางหนึ่งเหล่านี้ ระบบจะสร้าง Fragment ที่มีอยู่เพื่อแสดงเนื้อหาที่สามารถเขียนร่วมกันได้ (I0ef2e, b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
การเปลี่ยนแปลง API
- เรายังคงรองรับ Safe Args ใน Navigation Compose โดยใช้วิธีการที่อิงตาม Kotlin Serialization API เหล่านี้ยังไม่เสร็จสมบูรณ์และมีคำอธิบายประกอบ
ExperimentalSafeArgsApiเราจะนำคำอธิบายประกอบนี้ออกเมื่อ API ทั้งหมดพร้อมใช้งานในเวอร์ชันที่จะเปิดตัวในอนาคต (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
เวอร์ชัน 2.8.0-alpha06
3 เมษายน 2024
androidx.navigation:navigation-*:2.8.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เราได้เริ่มรองรับ Safe Args ใน Navigation Compose โดยใช้วิธีการที่อิงตาม Kotlin Serialization แล้ว API เหล่านี้ยังไม่เสร็จสมบูรณ์และมีคำอธิบายประกอบ
ExperimentalSafeArgsApiเราจะนำคำอธิบายประกอบนี้ออกเมื่อ API ทั้งหมดพร้อมใช้งานในเวอร์ชันที่จะเปิดตัวในอนาคต (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
การแก้ไขข้อบกพร่อง
NavHostตอนนี้ใช้Alignment.TopStartเป็นอาร์กิวเมนต์ contentAlignment เริ่มต้นแล้ว ซึ่งจะทำให้สอดคล้องกับค่าเริ่มต้นสำหรับAnimatedContentและแก้ไขอินสแตนซ์บางรายการของการเปลี่ยนจากกึ่งกลางที่ขยายขนาดโดยไม่คาดคิด (I09e72, b/330111602)- เมื่อปัดท่าทางสัมผัสย้อนกลับที่คาดการณ์ได้ขณะใช้ Navigation Compose ตอนนี้
NavHostจะเปลี่ยนภาพเคลื่อนไหวที่กำหนดเองให้เสร็จสมบูรณ์อย่างถูกต้องแทนที่จะทำให้เสร็จทันที (I99017, b/327292110)
เวอร์ชัน 2.8.0-alpha05
20 มีนาคม 2024
androidx.navigation:navigation-*:2.8.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณส่งอาร์กิวเมนต์ไปยัง
NavGraphของstartDestinationได้โดยตรงในเส้นทางstartDestinationโดยไม่ต้องอาศัยdefaultValueซึ่งรวมถึงNavGraphstartDestinationsที่ซ้อนกันด้วย (I0e0b5, b/109505019, b/188693139)
การเปลี่ยนแปลง API
- เพิ่มคลาส
CollectionNavType<T>ใหม่ที่เป็นนามธรรม ซึ่งเป็นคลาสย่อยของNavType<T>สำหรับอาร์กิวเมนต์ที่อิงตามคอลเล็กชัน เช่น รายการ อาร์เรย์ แผนที่ (Ic6d63, b/188693139) - ตอนนี้อาร์เรย์
NavTypeเริ่มต้นทั้งหมด (IntArrayType,LongArrayType,FloatArrayType,BoolArrayTypeและStringArrayType) มีประเภทเป็นCollectionNavType(Idcf79, b/188693139) NavTypeมี API แบบเปิดใหม่valueEqualsที่ระบุว่าค่า 2 ค่าที่มีประเภทเดียวกันเท่ากันหรือไม่ (I6cb97, b/327229511)
การแก้ไขข้อบกพร่อง
- ตอนนี้พารามิเตอร์การค้นหาใน Deep Link อนุญาตให้ใช้ค่าในรูปแบบของเครื่องหมายปีกกาที่อยู่รอบชื่ออาร์กิวเมนต์ (เช่น
{argName}) เป็นค่าที่ถูกต้องสำหรับNavTypesที่อิงตามสตริง การดำเนินการนี้จะแก้ไขปัญหาที่ค่าดังกล่าวจะถือว่าไม่ถูกต้อง (หรือไม่มีค่า) สำหรับทุกประเภท (I18302, b/327274038) - ตอนนี้ฟังก์ชัน
NavControllerที่รองรับเส้นทาง เช่นnavigateหรือpopBackStackจะจับคู่เส้นทางที่กรอกด้วยอาร์กิวเมนต์ของอาร์เรย์NavTypesได้อย่างถูกต้อง (Iea805, b/327229511)
เวอร์ชัน 2.8.0-alpha04
6 มีนาคม 2024
androidx.navigation:navigation-*:2.8.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณระบุ
SizeTranformสำหรับการเปลี่ยนฉากใน Navigation Compose ได้แล้วโดยกำหนดให้เป็นส่วนหนึ่งของการเริ่มต้นสำหรับฟังก์ชันcomposableและ/หรือnavigation(I91062, b/296912651)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
NavHostใน Compose Navigation แสดงการเปลี่ยนไม่ถูกต้องเมื่อใช้ปุ่มย้อนกลับของระบบโดยไม่ใช้ท่าทางสัมผัส (Iceeae, b/325998468)
เวอร์ชัน 2.8.0-alpha03
21 กุมภาพันธ์ 2024
androidx.navigation:navigation-*:2.8.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- ตอนนี้
NavBackStackEntry.savedStateHandleมีเครื่องหมายเป็น@MainThreadเนื่องจากใช้โค้ดที่ต้องอยู่ในเทรดหลักอยู่แล้ว (Ibb988, b/299523245)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางที่ทำให้
NavGraphViewModelsDESTROYEDทำงานเร็วเกินไปเนื่องจากViewModelของรายการที่เชื่อมโยงไม่ได้อยู่ในสถานะที่บันทึกไว้ (Ib6bb7, b/317581849)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การเขียนการนำทางขึ้นอยู่กับ Compose 1.7.0-alpha03 แล้ว
เวอร์ชัน 2.8.0-alpha02
7 กุมภาพันธ์ 2024
androidx.navigation:navigation-*:2.8.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Navigation Compose รองรับการย้อนกลับในแอปที่คาดการณ์ได้ผ่าน
SeekableTransitionStateAPI ใหม่จาก compose-animation แล้ว ซึ่งช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมด้วยการเปลี่ยนฉากที่กำหนดเองได้ ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก (I8b8e9)
เวอร์ชัน 2.8.0-alpha01
24 มกราคม 2024
androidx.navigation:navigation-*:2.8.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขการรั่วไหลของ
BackStackStateซึ่งการเรียกsaveStateหลายครั้งในปลายทางจะทําให้ระบบบันทึกสถานะหลายรายการ แต่จะกู้คืนได้เพียงรายการแรกเท่านั้น (I598b0, b/309559751) - แก้ไขปัญหาที่อาร์กิวเมนต์ที่ไม่ใช่สตริงจะแสดงอย่างไม่ถูกต้องเมื่อใช้
NavigationUIตัวช่วยในการป้อนข้อมูลชื่อของแถบแอป (#636, b/316676794)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Compose
1.7.0-alpha01ซึ่งแก้ไขปัญหาที่อาจทำให้เกิดภาพเคลื่อนไหวการปรับขนาดที่ไม่คาดคิด (b/297258205)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ SimonMarquis ที่แก้ไขปัญหาการแสดงผลสำหรับอาร์กิวเมนต์ที่ไม่ใช่สตริงเมื่อใช้ตัวช่วย
NavigationUIเพื่อป้อนข้อมูลชื่อของแถบแอป
เวอร์ชัน 2.7.7
เวอร์ชัน 2.7.7
7 กุมภาพันธ์ 2024
androidx.navigation:navigation-*:2.7.7 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.7 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ย้อนกลับจากการนำทาง
2.8.0-alpha01: แก้ไขการรั่วไหลของBackStackStateที่การเรียกsaveState()หลายครั้งในNavBackStackEntryเดียวจะทําให้ระบบบันทึกสถานะหลายรายการ แต่กู้คืนได้เฉพาะสถานะที่บันทึกไว้รายการแรกเท่านั้น (I598b0, b/309559751) - ย้อนกลับจากการนำทาง
2.8.0-alpha01: แก้ไขปัญหาที่อาร์กิวเมนต์ที่ไม่ใช่สตริงจะไม่แสดงอย่างถูกต้องเมื่อใช้ตัวช่วยNavigationUIเพื่อป้อนข้อมูลชื่อของแถบแอป (#636, b/316676794)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ SimonMarquis ที่แก้ไขปัญหาการแสดงผลสำหรับอาร์กิวเมนต์ที่ไม่ใช่สตริงเมื่อใช้ตัวช่วย
NavigationUIเพื่อป้อนข้อมูลชื่อของแถบแอป
เวอร์ชัน 2.7.6
เวอร์ชัน 2.7.6
13 ธันวาคม 2023
androidx.navigation:navigation-*:2.7.6 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.6 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ฟังก์ชัน
NavGraphequals()จะพิจารณาโหนดของกราฟอื่นอย่างถูกต้องแทนที่จะพิจารณาเฉพาะโหนดที่เรียกใช้ ซึ่งจะช่วยให้มั่นใจได้ว่ากราฟที่มีโหนดที่มีรหัสต่างกันจะไม่ถือว่าเท่ากันอีกต่อไป (I401cb, b/311414915)
เวอร์ชัน 2.7.5
เวอร์ชัน 2.7.5
1 พฤศจิกายน 2023
androidx.navigation:navigation-*:2.7.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.5 มีคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- ปรับปรุงประสิทธิภาพ (ทั้งในแง่ของเวลาและจำนวนการจัดสรร) ของการเปรียบเทียบกราฟ 2 กราฟอย่างมาก ซึ่งหมายความว่าการเรียกใช้ฟังก์ชันต่างๆ เช่น
setGraphซึ่งเปรียบเทียบกราฟใหม่กับกราฟที่มีอยู่ภายในจะเร็วขึ้นมากและทำให้เฟรมถูกข้ามไปน้อยลง ขอขอบคุณ Michał Z สำหรับการวิเคราะห์อย่างละเอียดที่นำไปสู่การปรับปรุงนี้ (I6ad62) NavHostจะแสดงผลปลายทางเริ่มต้นในการส่งผ่านการจัดองค์ประกอบครั้งแรกแทนที่จะต้องรอการส่งผ่านครั้งที่ 2 เพื่ออ่านสถานะที่อัปเดต (I439a7, b/304852206)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่สแต็กย้อนกลับจะถูกป๊อปหากคุณเรียก
setGraphมากกว่า 1 ครั้งด้วยกราฟเดียวกันทุกประการเฉพาะในกรณีที่มีปลายทางในกราฟที่มีการดำเนินการที่ลิงก์ปลายทาง 2 แห่ง (Ieaed7) - กล่องโต้ตอบที่ไปยังและปิดอย่างรวดเร็วจะไม่รั่วไหลไปยังรายการ
NavController.visibleEntriesอีกต่อไป (I67586, b/287969970) - เมื่อรายการปรากฏขึ้นตามด้วยการเปลี่ยนแปลงการกำหนดค่า ตอนนี้ระบบจะล้าง
ViewModelของรายการอย่างถูกต้องหากsaveStateเป็นเท็จ (Idf242, b/298164648) - แก้ไขปัญหาที่
NavControllerจัดการ Deep Link เดียวกันมากกว่า 1 ครั้งได้หาก Back Stack ว่างเปล่าทั้งหมดก่อนการเปลี่ยนแปลงการกำหนดค่าหรือการเรียกใช้setGraphเฉพาะเมื่อ Intent ขาเข้ามีการตั้งค่า FlagFLAG_ACTIVITY_NEW_TASK(I73c7f)
การอัปเดตการขึ้นต่อกัน
- การนำทางด้วย Fragment ขึ้นอยู่กับ Fragment 1.6.2 แล้วในตอนนี้ ซึ่งจะช่วยแก้ไขปัญหาที่อินสแตนซ์
ViewModelของ Fragment ที่ซ้อนกันจะไม่ถูกล้างเมื่อเรียกใช้clearBackStack
เวอร์ชัน 2.7.4
เวอร์ชัน 2.7.4
4 ตุลาคม 2023
androidx.navigation:navigation-*:2.7.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.4 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับ
popUpToเพื่อใช้เส้นทางที่มีอาร์กิวเมนต์เพื่อให้สามารถย้อนกลับไปยังรายการที่เฉพาะเจาะจงซึ่งใช้อาร์กิวเมนต์ที่ตรงกันเหล่านั้น ซึ่งตรงกับการรองรับที่พบในpopBackStack(I731f4, b/299255572)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การขัดจังหวะการนำทางด้วยการนำทางอื่นด้วย
popUpToจะทำให้FragmentNavigatorขัดข้อง (I3c848, b/301887045) - แก้ไขปัญหาที่การกดกลับของระบบทำให้
currentDestinationไม่อัปเดตอย่างถูกต้องเพื่อให้ตรงกับ Fragment ที่แสดง (Id0d6c, b/289877514) - ตอนนี้
DialogFragmentจะเปลี่ยนไปเป็นสถานะRESUMEDอย่างถูกต้องเมื่อปิดกล่องโต้ตอบที่อยู่เหนือกล่องโต้ตอบนั้น (I88f0d, b/301811387)
เวอร์ชัน 2.7.3
เวอร์ชัน 2.7.3
20 กันยายน 2023
androidx.navigation:navigation-*:2.7.3 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางด้วย Fragment ที่ทำให้
visibleEntriesมีรายการที่ไม่ถูกต้อง (I5caa9, b/288520638) - แก้ไขปัญหาที่ทำให้ปลายทางของหน้าต่างลอย (เช่น
Dialogs,Bottomsheetsฯลฯ) ไม่ได้รับRESUMEDการเรียกกลับของวงจร (I3b866, b/287505132)
เวอร์ชัน 2.7.2
เวอร์ชัน 2.7.2
6 กันยายน 2023
androidx.navigation:navigation-*:2.7.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การนำทางขึ้นอยู่กับวงจร
2.6.2ซึ่งแก้ไขการโต้ตอบระหว่างrememberSaveableกับNavHostของ Navigation Compose ที่จะทำให้สถานะrememberSaveableของปลายทางและอินสแตนซ์SavedStateHandleใดๆ ที่ViewModelเป็นเจ้าของไม่ได้รับการกู้คืนอย่างเหมาะสมหลังจากกระบวนการสิ้นสุดและสร้างใหม่ (b/298059596, b/289436035) - แก้ไขปัญหาเมื่อแสดงกล่องโต้ตอบหลายกล่องใน Navigation Compose พร้อมกัน ซึ่งกล่องโต้ตอบที่บดบังบางส่วน (เช่น กล่องโต้ตอบที่ไม่ใช่กล่องโต้ตอบบนสุด) จะอยู่ในสถานะวงจร
CREATEDแทนที่จะอยู่ในสถานะSTARTED(aosp/2728520, b/289257213) - แก้ไขปัญหาเมื่อแสดงกล่องโต้ตอบหลายกล่องใน Navigation Compose พร้อมกัน ซึ่งการปิดกล่องโต้ตอบที่อยู่บนสุดจะทำให้กล่องโต้ตอบใหม่ที่อยู่บนสุดติดอยู่ใน
STARTEDสถานะวงจรของกิจกรรมแทนที่จะย้ายไปที่RESUMEDอย่างถูกต้อง (aosp/2629401, b/286371387) - Navigation Safe Args จะไม่สร้างอินสแตนซ์ของงานอย่างรวดเร็วอีกต่อไปหากไม่ได้ดำเนินการจริง (I0e385, b/260322841)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Compose 1.5.1 แล้ว
เวอร์ชัน 2.7.1
เวอร์ชัน 2.7.1
23 สิงหาคม 2023
androidx.navigation:navigation-*:2.7.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางด้วย Compose ซึ่งเมื่อใช้
Scaffoldจะอาจเกิดข้อผิดพลาดเนื่องจากพยายามเข้าถึงLifecycle.State.DESTROYEDViewModel(I1dc11, b/268422136)
เวอร์ชัน 2.7.0
เวอร์ชัน 2.7.0
9 สิงหาคม 2023
androidx.navigation:navigation-*:2.7.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.6.0
ภาพเคลื่อนไหวจาก Accompanist
ตอนนี้ AnimatedContent มีความเสถียรแล้ว เราจึงย้ายโค้ดจาก Accompanist Navigation Animation กลับไปไว้ใน Navigation Compose เองได้
ซึ่งหมายความว่าการรองรับทั้งหมดสำหรับการตั้งค่าการเปลี่ยนฉากที่กำหนดเองซึ่งมีอยู่ใน AnimatedNavHost จะได้รับการรองรับโดยตรงใน NavHost
เราจะไม่เปลี่ยนแปลงภาพเคลื่อนไหวการนำทางของ Accompanist เพิ่มเติม และจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมคำแนะนำเกี่ยวกับวิธีย้ายข้อมูลกลับไปที่ Navigation Compose เอง แต่จะเป็นส่วนกลับของคู่มือการย้ายข้อมูลโดยไม่ต้องเปลี่ยนแปลง API อื่นๆ หากคุณใช้ Accompanist เวอร์ชันอัลฟ่าล่าสุด (0.31.2-alpha) อยู่แล้ว (b/197140101)
การแก้ไขข้อบกพร่อง
- ตอนนี้ NavHost ใน Navigation Compose จะสกัดกั้นการเรียกกลับของระบบได้อย่างถูกต้อง แม้หลังจากที่ Activity ถูกหยุดและกลับมาทำงานต่อแล้วก็ตาม (Icb6de, b/279118447)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Compose
1.5.0จาก1.1.0
เวอร์ชัน 2.7.0-rc01
26 กรกฎาคม 2023
androidx.navigation:navigation-*:2.7.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Lambda
EnterTransitionและExitTransitionที่สร้างขึ้นเป็นส่วนหนึ่งของNavHostอาจยังคงอยู่ในหน่วยความจำแม้ว่าจะนำNavHostออกจากองค์ประกอบแล้วก็ตาม (I893d0)
ปัญหาที่ทราบ
- การนำทาง 2.6.x มีปัญหาที่อาจทำให้เกิด
IllegalArgumentExceptionเมื่อนำทางด้วย popUpTo คุณอาจหลีกเลี่ยงข้อยกเว้นนี้ได้โดยการปรับโครงสร้างกราฟใหม่ ซึ่งคล้ายกับคำแนะนำที่ระบุไว้ที่นี่ (b/287133013)
เวอร์ชัน 2.7.0-beta02
28 มิถุนายน 2023
androidx.navigation:navigation-*:2.7.0-beta02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-beta02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Navigation Compose มีลำดับ Z ที่ถูกต้องสำหรับการเปลี่ยนฉากที่กำหนดเองซึ่งใช้การนำทางด้วยตัวเลือก
popUpToแล้ว(/Ib1c3a, b/285153947)
เวอร์ชัน 2.7.0-beta01
7 มิถุนายน 2023
androidx.navigation:navigation-*:2.7.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
NavHostใน Navigation Compose จะสกัดกั้นการเรียกกลับของระบบได้อย่างถูกต้องแม้หลังจากที่Activityได้รับการSTOPPEDและRESUMEDแล้ว (Icb6de, b/279118447)
เวอร์ชัน 2.7.0-alpha01
24 พฤษภาคม 2023
androidx.navigation:navigation-*:2.7.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.0-alpha01 มีคอมมิตเหล่านี้
ภาพเคลื่อนไหวจาก Accompanist
ตอนนี้ AnimatedContent มีความเสถียรแล้ว เราจึงย้ายโค้ดจาก Accompanist Navigation Animation กลับไปไว้ใน Navigation Compose เองได้
ซึ่งหมายความว่าการรองรับทั้งหมดสำหรับการตั้งค่าการเปลี่ยนฉากที่กำหนดเองซึ่งมีอยู่ใน AnimatedNavHost จะได้รับการรองรับโดยตรงใน NavHost
เราจะไม่เปลี่ยนแปลงภาพเคลื่อนไหวการนำทางของ Accompanist เพิ่มเติม และจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมคำแนะนำเกี่ยวกับวิธีย้ายข้อมูลกลับไปที่ Navigation Compose เอง แต่จะเป็นส่วนกลับของคู่มือการย้ายข้อมูลโดยไม่ต้องเปลี่ยนแปลง API อื่นๆ หากคุณใช้ Accompanist เวอร์ชันอัลฟ่าล่าสุด (0.31.2-alpha) อยู่แล้ว (b/197140101)
การแก้ไขข้อบกพร่อง
- จากการนำทาง
2.6.0-rc02: แก้ไขปัญหาเกี่ยวกับการนำทางใน Fragment ซึ่งการนำทางด้วยpopUpToและการป๊อป Fragment ออกจาก Back Stack โดยไม่ต้องสร้างมุมมองใหม่จะทำให้ปุ่มย้อนกลับของระบบหยุดทำงาน (Ieb8d4, b/281726455)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Compose
1.5.0-beta01
เวอร์ชัน 2.6.0
เวอร์ชัน 2.6.0
7 มิถุนายน 2023
androidx.navigation:navigation-*:2.6.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญในการนำทางตั้งแต่เวอร์ชัน 2.5.0
NavBackStackEntryargumentsและargumentsที่ส่งไปยังOnDestinationChangedListenerจะเป็นเพียงสำเนาของอาร์กิวเมนต์ที่ไม่เปลี่ยนแปลงซึ่งสร้างขึ้นเมื่อคุณไปยังปลายทาง ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ที่ทำกับแพ็กเกจเหล่านั้นจะไม่แสดงในการเข้าถึงargumentsหรืออินสแตนซ์OnDestinationChangedListenerอื่นๆ ในภายหลังNavDeepLinkรองรับค่าเริ่มต้นสำหรับอาร์เรย์แล้ว ซึ่งช่วยให้รองรับพารามิเตอร์การค้นหาที่ซ้ำกันซึ่งจะแมปกับประเภทอาร์เรย์ของอาร์กิวเมนต์NavTypeยังมีเมธอดเริ่มต้นที่สามารถลบล้างเพื่อรวมค่าที่แยกวิเคราะห์แล้ว 2 ค่า- ตอนนี้คลาสย่อยที่กำหนดเองของ
NavTypeสามารถลบล้างserializeAsValueเพื่อจัดรูปแบบค่าเป็นสตริงได้แล้ว ซึ่งจะช่วยให้ทั้งการจัดรูปแบบและการเลิกจัดรูปแบบ (ผ่านparseValue) อยู่ในคลาสNavTypeทั้งหมดStringTypeจะลบล้างวิธีการนี้เพื่อเรียกใช้Uri.encodeในStringที่ระบุ
การเปลี่ยนแปลงที่สำคัญใน Navigation Compose ตั้งแต่เวอร์ชัน 2.5.0
- เมื่อแสดงตัวอย่าง Composable ด้วย
NavHostตอนนี้จะแสดงstartDestinationของ NavGraph โดยค่าเริ่มต้น - ตอนนี้
NavController.popBackStack(route),NavController.getBackStackEntry(route)และNavController.clearBackStack(route)รองรับเส้นทางที่มีการระบุอาร์กิวเมนต์บางส่วนหรือทั้งหมดแล้ว โปรดทราบว่าอาร์กิวเมนต์ต้องตรงกับอาร์กิวเมนต์ของรายการทุกประการ - ตอนนี้การพยายามสร้าง
NavDeepLinkที่ว่างเปล่าโดยใช้navDeepLinkKotlin DSL จะทําให้เกิดคําเตือน Lint ซึ่งระบุว่า Deep Link ต้องมี URI, การกระทํา และ/หรือ MIME Type จึงจะถูกต้อง
การเปลี่ยนแปลงที่สำคัญในการนำทางด้วย Fragment ตั้งแต่เวอร์ชัน 2.5.0
NavHostFragmentจะไม่ดักจับปุ่มย้อนกลับของระบบอีกต่อไป ซึ่งช่วยให้FragmentManagerที่อยู่เบื้องหลังจัดการการย้อนกลับของระบบได้ ซึ่งช่วยให้ Fragment1.7.0-alpha01ขึ้นไปแสดงภาพเคลื่อนไหวการย้อนกลับแบบคาดการณ์ในแอปบนอุปกรณ์ Android U ได้- เมื่อใช้การนำทางด้วย Fragment การพยายามทำ
FragmentTransactionด้วยตนเองซึ่งจะเพิ่ม Fragment ลงใน Back Stack ของFragmentManagerจะทำให้เกิดIllegalArgumentExceptionคุณควรเพิ่ม Fragment ผ่านnavigate()API เสมอ - เมื่อใช้สตริงที่แน่นอน
${applicationId}เป็นตัวยึดตำแหน่งในแอตทริบิวต์app:dataและapp:dataPatternในองค์ประกอบกิจกรรมของไฟล์ XML การนำทาง ระบบจะป้อนตัวยึดตำแหน่งโดยอัตโนมัติด้วยpackageNameของบริบทเมื่อขยาย FragmentNavigatorตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัปNavBackStackEntriesซึ่งหมายความว่าตอนนี้NavBackStackEntryLifecycleจะรอให้เอฟเฟกต์พิเศษของ Fragment ที่เข้าและออกเสร็จสมบูรณ์ก่อนที่จะย้ายLifecycle.Stateสุดท้ายDialogFragmentNavigatorตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัปNavBackStackEntriesซึ่งหมายความว่าตอนนี้NavBackStackEntryLifecycleจะรอให้DialogFragmentLifecycleย้ายไปที่DESTROYEDก่อนที่จะย้ายไปที่DESTROYEDเอง- ตอนนี้
NavHostFragmentช่วยให้คุณดึงNavControllerได้ทันทีที่ติดNavHostFragmentกับFragmentManagerไม่ใช่หลังจากonCreate()เท่านั้น - การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารี Play Feature Delivery แบบละเอียดแล้วในตอนนี้
- ตอนนี้ Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.3.0 แล้ว ซึ่งหมายความว่าตอนนี้จะใช้ได้กับเวอร์ชัน 7.3.0 ขึ้นไปเท่านั้น
การเปลี่ยนแปลงที่สำคัญใน NavigationUI ตั้งแต่เวอร์ชัน 2.5.0
- เมื่อส่งรหัสของกราฟการนำทางไปยัง
AppBarConfiguration(เช่น ผ่านMenu) ตอนนี้NavigationUIจะพิจารณาเฉพาะปลายทางเริ่มต้นของกราฟการนำทางนั้นเป็นปลายทางระดับบนสุดเท่านั้น แทนที่จะทำเครื่องหมายปลายทางทุกแห่งภายในกราฟเป็นปลายทางระดับบนสุดอย่างไม่ถูกต้อง ลักษณะการทำงานของการส่งรหัสของปลายทางแต่ละรายการยังคงเหมือนเดิม ฟังก์ชันเดียวกันนี้พร้อมให้ใช้งานกับโค้ดของคุณเองผ่านฟังก์ชันisTopLevelDestinationใหม่ในAppBarConfiguration - ตอนนี้การผสานรวม
setupWithNavControllerในNavigationUIสำหรับการทำงานกับแถบแอปด้านบนจะแยกวิเคราะห์ค่าR.stringสำหรับอาร์กิวเมนต์ReferenceTypeที่พบในandroid:labelเป็นค่าสตริงแทนที่จะแสดงผลจำนวนเต็มของทรัพยากรที่สร้างขึ้นโดยอัตโนมัติ - ตอนนี้
NavigationUIจะแสดงบันทึกเมื่อไปยังส่วนต่างๆ ผ่านMenuItemที่เลือกไม่สำเร็จ
เวอร์ชัน 2.6.0-rc02
24 พฤษภาคม 2023
androidx.navigation:navigation-*:2.6.0-rc02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-rc02 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการนำทางใน Fragment ซึ่งการนำทางด้วย
popUpToและการนำ Fragment ออกจาก Back Stack โดยไม่ต้องสร้างมุมมองใหม่จะทำให้ปุ่มย้อนกลับของระบบหยุดทำงาน (Ieb8d4, b/281726455)
เวอร์ชัน 2.6.0-rc01
10 พฤษภาคม 2023
androidx.navigation:navigation-*:2.6.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางด้วย Fragment ซึ่งการนำ Fragment ออกผ่านการนำทางด้วย
popUpToในการเรียกกลับวงจรonResume()จะทำให้เกิดIllegalStateException(I21884, b/279644470)
เวอร์ชัน 2.6.0-beta01
19 เมษายน 2023
androidx.navigation:navigation-*:2.6.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
NavBackStackEntryมีการใช้งานtoStringที่กำหนดเองแล้ว (Iff00b)
การแก้ไขข้อบกพร่อง
- เมื่อใช้การนำทางด้วย Fragment การพยายามทำ
FragmentTransactionด้วยตนเองซึ่งจะเพิ่ม Fragment ลงใน Back Stack ของFragmentManagerจะทำให้เกิดIllegalArgumentExceptionคุณควรเพิ่ม Fragment ผ่านnavigate()API เสมอ (I6d38e) - เมื่อมี
navigateที่เพิ่มรายการและpopBackStackที่นำรายการออกในเฟรมเดียวกัน ตอนนี้รายการสูงสุดที่ได้ในสแต็กย้อนกลับจะทำให้กลับไปที่RESUMEDLifecycle.Stateได้อย่างสม่ำเสมอ (Id8067, b/276495952)
เวอร์ชัน 2.6.0-alpha09
5 เมษายน 2023
androidx.navigation:navigation-*:2.6.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha09 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขการตรวจสอบเส้นทางที่ไม่ถูกต้องเพื่อให้หาก
NavDestinationมีNavArgumentที่ไม่ใช่ค่าว่าง เส้นทางของปลายทางนี้ต้องมีตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์ที่มีชื่อเดียวกับNavArgumentที่ไม่ใช่ค่าว่าง (Ic62bf, b/274697949) - การนำทาง Deep Link ที่อิงตาม
Action/MimeTypeจะล้มเหลวหากการดำเนินการนำทางไม่มีNavArgumentที่ต้องระบุซึ่งไม่เป็นค่าว่างตามที่NavDestinationกำหนด ซึ่งAction/MimeTypeตรงกัน (Ibfa17, b/271777424) - เมื่อ
NavControllerตั้งค่ากราฟที่มีเส้นทางและปลายทางเดียวกันกับกราฟก่อนหน้า ตอนนี้กราฟจะแทนที่โหนดกราฟปัจจุบันและปลายทางในสแต็กย้อนกลับด้วยอินสแตนซ์ใหม่ได้อย่างถูกต้อง การแก้ไขนี้จะช่วยแก้ปัญหาการขัดข้องเมื่อใช้onLaunchSingleTopโดยไม่ได้บันทึกสถานะใน Navigation Compose นอกจากนี้ ยังแก้ไขข้อผิดพลาดที่การไปยังปลายทางที่เชื่อมโยงกับกราฟรูทจะสร้างแบ็กสแต็กที่ไม่ถูกต้องด้วย (I5bc58, b/275258161, b/275407804)
เวอร์ชัน 2.6.0-alpha08
22 มีนาคม 2023
androidx.navigation:navigation-*:2.6.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha08 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavHostFragmentช่วยให้คุณดึงNavControllerได้ทันทีที่ติดNavHostFragmentกับFragmentManagerไม่ใช่หลังจากonCreate()เท่านั้น (Ic6382, b/220186282)
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerExceptionเมื่อแสดงกราฟที่ซ้อนกันซึ่งมีอาร์กิวเมนต์ที่ต้องระบุ (6b3581, b/249988437) - เมื่อใช้การย้อนกลับของระบบหลังจากนำทางด้วย
popUpToสถานะของNavControllerจะปรากฏขึ้นที่รายการที่ถูกต้อง (I3a8ec, b/270447657) FragmentNavigatorจะแสดงรายการอย่างถูกต้องเมื่อมีการป๊อปสแต็กย้อนกลับผ่านการย้อนกลับของระบบหรือpopBackStack()และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับ Fragment หรือไม่ก็ตาม (I81bdf)- การเพิ่ม Fragment ไปยัง
FragmentNavigator'sFragmentManagerโดยไม่ใช้การนำทางจะไม่ทำให้เกิดข้อขัดข้องอีกต่อไป (b17204, b/274167493)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับวงจร
2.6.1(586fe7) - ตอนนี้การนำทางจะขึ้นอยู่กับ SavedState
1.2.1(078e4e) - ตอนนี้การนำทางจะขึ้นอยู่กับ ProfileInstaller
1.3.0(512f0c)
เวอร์ชัน 2.6.0-alpha07
8 มีนาคม 2023
androidx.navigation:navigation-*:2.6.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha07 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ตัวแปร API
getBackStackEntry,popBackStack,clearBackStackที่ใช้เส้นทางจะใช้รูปแบบเส้นทางที่มีอาร์กิวเมนต์และพารามิเตอร์การค้นหาที่อนุญาตให้เป็น Null (I22294, b/269302500) - แก้ไขปัญหาที่การเรียก
clearBackStack()จากNavControllerจะไม่ล้างสถานะที่บันทึกไว้ใน FragmentManager ที่เชื่อมโยงกับ Back Stack ที่ล้างแล้ว (Ic1cce, b/271190202) - แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้ไฮไลต์
MenuItemผิดในBottomNavigationViewเมื่อใช้การย้อนกลับของระบบระหว่างแท็บ (I634f6, b/270447657) - แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้
NavBackStackEntrys ไม่ย้ายไปที่สถานะ RESUMED เมื่อใช้Animations (Ib3589, b/269646882)
เวอร์ชัน 2.6.0-alpha06
22 กุมภาพันธ์ 2023
androidx.navigation:navigation-*:2.6.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha06 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เมื่อแสดงตัวอย่าง Composable ด้วย
NavHostตอนนี้จะแสดงstartDestinationของ NavGraph โดยค่าเริ่มต้น (I2b89f)
การเปลี่ยนแปลง API
- ตอนนี้เราได้ใส่คำอธิบายประกอบ
@MainThreadให้กับNavControllernavigateทั้งหมดที่โอเวอร์โหลดแล้ว เพื่อให้มั่นใจว่าฟังก์ชันเหล่านั้นจะเรียกใช้ในเทรดหลัก (I2c0b0, b/263427111)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องเมื่อพยายามไปยังส่วนต่างๆ ขณะใช้การนำทางด้วย Fragment แบบไดนามิก (I3ee29, b/268360479)
- แก้ไขข้อบกพร่องที่การไปยัง Fragment อื่นผ่านปุ่มย้อนกลับของระบบไม่ทำให้แถบด้านล่างอัปเดตเป็นรายการที่เลือกที่ถูกต้อง (If559f, b/269044426)
ปัญหาที่ทราบ
- เมื่อใช้การนำทางกับ Fragment
NavBackStackEntry's Lifecycle จะไม่สามารถเข้าถึงRESUMEDเมื่อใช้ API ของAnimation(b/269646882) - เมื่อใช้การนำทางกับ Fragment และนำทางด้วย
BottomNavigationหากคุณพยายามกู้คืน Back Stack ที่มีหลายรายการ ระบบจะไม่สามารถอัปเดตBottomMenuItemได้อย่างถูกต้อง (b/270447657) - เมื่อใช้การนำทางกับ Fragment หลังจากกู้คืนสถานะแล้ว
NavBackStackEntryLifecycleจะไม่ได้รับDESTROYEDเมื่อ Fragment เป็นDESTROYED(b/270610768)
เวอร์ชัน 2.6.0-alpha05
8 กุมภาพันธ์ 2023
androidx.navigation:navigation-*:2.6.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavController.popBackStack(route),NavController.getBackStackEntry(route)และNavController.clearBackStack(route)รองรับเส้นทางที่มีการระบุอาร์กิวเมนต์บางส่วนหรือทั้งหมดแล้ว โปรดทราบว่าอาร์กิวเมนต์ต้องตรงกับอาร์กิวเมนต์ของรายการทุกประการ (Iebd28, Ic678c, I3b37b, b/257514373) FragmentNavigatorตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัปNavBackStackEntriesซึ่งหมายความว่าตอนนี้NavBackStackEntryLifecycleจะรอให้เอฟเฟกต์พิเศษของ Fragment ที่เข้าและออกเสร็จสมบูรณ์ก่อนที่จะย้ายLifecycle.Stateสุดท้าย (I3cb19, b/238686802)DialogFragmentNavigatorตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัปNavBackStackEntriesซึ่งหมายความว่าตอนนี้NavBackStackEntryLifecycleจะรอให้DialogFragmentLifecycleย้ายไปที่DESTROYEDก่อนที่จะย้ายไปที่DESTROYEDเอง (I53ee5, b/261213893)
การเปลี่ยนแปลง API
- ตอนนี้
NavigatorStateมีprepareForTransitionAPI เพื่อให้Navigatorย้ายNavBackStackEntriesไปยังLifecycle.Stateระดับกลางได้ (I42c21, b/238686802) - ตอนนี้คุณเข้าถึงสแต็กย้อนกลับที่เชื่อมโยงกับ
NavGraphNavigatorหรือComposeNavigatorผ่านพร็อพเพอร์ตี้backstackได้แล้วComposeNavigatorยังแสดงonTransitionComplete()การเรียกกลับเพื่อทำเครื่องหมายNavBackStackEntryที่ดำเนินการนำทางหรือการดำเนินการpopBackStackว่าเสร็จสมบูรณ์แล้วด้วย (I02062, I718db, b/257519195)
การแก้ไขข้อบกพร่อง
- ตอนนี้สถานะ Navigator จะไม่ดำเนินการใดๆ เมื่อใช้
push/popWithTransitionAPI และระบบจัดการรายการอยู่แล้ว (Iadbfa, b/261213893) - เมื่อใช้
launchSingleTopกับNavGraphที่ซ้อนกัน ระบบจะเพิ่มปลายทางทั้งหมดตั้งแต่ปลายทางเดิมไปจนถึงstartDestinationอย่างถูกต้องที่ด้านบนของ Backstack เท่านั้น (Id4bea, b/253256629) - ตอนนี้การนำทางจะแทนที่อินสแตนซ์
DialogFragmentอย่างถูกต้องเมื่อนำทางไปยังปลายทางเดียวกันโดยตั้งค่าแฟล็กlaunchSingleTopเป็น "จริง" (I45b5a, b/149572817) - Navigation SafeArgs จะไม่ทำให้เกิดข้อผิดพลาดในการคอมไพล์อีกต่อไปเมื่อใช้อาร์กิวเมนต์ที่มีความยาว 19 อักขระพอดี (Id60bc, b/257110095)
เวอร์ชัน 2.6.0-alpha04
9 พฤศจิกายน 2022
androidx.navigation:navigation-*:2.6.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คลาสย่อยที่กำหนดเองของ
NavTypeสามารถลบล้างserializeAsValueเพื่อจัดรูปแบบค่าเป็นสตริงได้แล้ว ซึ่งจะช่วยให้ทั้งการจัดรูปแบบและการเลิกจัดรูปแบบ (ผ่านparseValue) อยู่ในคลาสNavTypeทั้งหมดStringTypeจะลบล้างวิธีการนี้เพื่อเรียกใช้Uri.encodeในStringที่ระบุ (Ie5213, b/247637434) - ตอนนี้
NavigationUIจะแสดงบันทึกเมื่อไปยังส่วนต่างๆ ผ่านMenuItemที่เลือกไม่สำเร็จ (I2af5a, b/247730357)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะแยกวิเคราะห์ Deep Link ของการนําทางแบบเลซี่แทนที่จะแยกวิเคราะห์เมื่อเริ่มต้นกราฟ ซึ่งอาจช่วยปรับปรุงประสิทธิภาพของแอปเมื่อเริ่มต้น (Iab0ab)
- แก้ไขข้อขัดข้องที่เกิดจากการไปยังส่วนบนหลังจาก Deep Link ไปยังปลายทางที่มีอาร์กิวเมนต์เริ่มต้นเป็น Null (I51c24, b/243183636)
การอัปเดตการขึ้นต่อกัน
- การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารี Play Feature Delivery แบบละเอียดแล้วในตอนนี้ (Ib4ddc)
- ตอนนี้ Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.3.0 แล้ว ซึ่งหมายความว่าตอนนี้จะใช้ได้กับเวอร์ชัน 7.3.0 ขึ้นไปเท่านั้น (I47e49)
เวอร์ชัน 2.6.0-alpha03
24 ตุลาคม 2022
androidx.navigation:navigation-*:2.6.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha03 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- จากการนำทาง
2.5.3:NavHostจะไม่ทำให้เกิดNoSuchElementExceptionเมื่อไม่มีปลายทางที่Crossfadeจะเขียนถึง ตอนนี้ระบบจะข้ามการเรียบเรียงเพลง (Ieb46e, b/253299416) - จาก Navigation
2.5.3: แก้ไขปัญหาที่ระบบไม่ลืมและนำสถานะ Compose ที่บันทึกไว้ (เช่น การใช้งานrememberSaveable) ออกเมื่อมีการนำปลายทางออกจากสแต็กย้อนกลับ (I64949)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Fragment
1.5.4(Icd424)
เวอร์ชัน 2.6.0-alpha02
5 ตุลาคม 2022
androidx.navigation:navigation-*:2.6.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- เมื่อส่งรหัสของกราฟการนำทางไปยัง
AppBarConfiguration(เช่น ผ่านMenu) ตอนนี้NavigationUIจะพิจารณาเฉพาะปลายทางเริ่มต้นของกราฟการนำทางนั้นเป็นปลายทางระดับบนสุดเท่านั้น แทนที่จะทำเครื่องหมายปลายทางทุกแห่งภายในกราฟเป็นปลายทางระดับบนสุดอย่างไม่ถูกต้อง ลักษณะการทำงานของการส่งรหัสของปลายทางแต่ละรายการยังคงเหมือนเดิม ฟังก์ชันเดียวกันนี้พร้อมให้ใช้งานกับโค้ดของคุณเองผ่านฟังก์ชันisTopLevelDestinationใหม่ในAppBarConfiguration(Ie936e, b/238496771)
การแก้ไขข้อบกพร่อง
- ตอนนี้
navigation:navigation-fragmentคอมโพเนนต์จะขึ้นอยู่กับ Fragment เวอร์ชัน1.5.2(I00ba4) - รายการเมนูที่เลือกจะไม่ได้รับการอัปเดตอีกต่อไปเมื่อไปยัง
FloatingWindowปลายทาง เช่น กล่องโต้ตอบ (I4cde8, b/240308330)
เวอร์ชัน 2.6.0-alpha01
7 กันยายน 2022
androidx.navigation:navigation-*:2.6.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้การผสานรวม
setupWithNavControllerในNavigationUIสำหรับการทำงานกับแถบแอปด้านบนจะแยกวิเคราะห์ค่าR.stringสำหรับอาร์กิวเมนต์ReferenceTypeที่พบในandroid:labelเป็นค่าสตริงแทนที่จะแสดงผลจำนวนเต็มของทรัพยากรที่สร้างขึ้นโดยอัตโนมัติ (I5f803, b/167959935) NavDeepLinkรองรับค่าเริ่มต้นสำหรับอาร์เรย์แล้ว ซึ่งช่วยให้รองรับพารามิเตอร์การค้นหาที่ซ้ำกันซึ่งจะแมปกับประเภทอาร์เรย์ของอาร์กิวเมนต์NavTypeยังมีเมธอดเริ่มต้นที่สามารถลบล้างเพื่อรวมค่าที่แยกวิเคราะห์แล้ว 2 ค่า (Id68c3, b/209977108)- เมื่อใช้สตริงที่แน่นอน
${applicationId}เป็นตัวยึดตำแหน่งในแอตทริบิวต์app:dataและapp:dataPatternในองค์ประกอบกิจกรรมของไฟล์ XML การนำทาง ระบบจะป้อนตัวยึดตำแหน่งโดยอัตโนมัติด้วยpackageNameของบริบทเมื่อขยาย (Iaabde, b/234223561) - ตอนนี้การพยายามสร้าง
NavDeepLinkที่ว่างเปล่าโดยใช้navDeepLinkKotlin DSL จะทําให้เกิดคําเตือน Lint ซึ่งระบุว่า Deep Link ต้องมี URI, การกระทํา และ/หรือ MIME Type จึงจะถูกต้อง (I08d2f, b/154038883)
การเปลี่ยนแปลง API
- เพิ่ม
NavDestinationฟังก์ชันส่วนขยายใหม่เพื่อแยกวิเคราะห์ป้ายกำกับแบบไดนามิกด้วยอาร์กิวเมนต์ในรูปแบบของandroid:label="{arg}"เป็นสตริง รองรับอาร์กิวเมนต์ReferenceTypeโดยการแยกวิเคราะห์ค่าR.stringเป็นค่าสตริง (I07d89, b/236269380)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
argumentsของ NavBackStackEntry และargumentsที่ส่งไปยังOnDestinationChangedListenerจะเป็นเพียงสำเนาของอาร์กิวเมนต์ที่ไม่เปลี่ยนแปลงซึ่งสร้างขึ้นเมื่อคุณไปยังปลายทาง ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ที่ทำกับแพ็กเกจเหล่านั้นจะไม่แสดงในการเข้าถึงargumentsหรืออินสแตนซ์OnDestinationChangedListenerอื่นๆ ในภายหลัง (I676f5)
การแก้ไขข้อบกพร่อง
- จากการนำทาง
2.5.2: ตอนนี้การนำทางแบบไดนามิกจะพยายามติดตั้งปลายทางของกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางเหล่านั้น (Ia2c16, b/240292838) - จากการนำทาง
2.5.2: ตอนนี้การนำทางจะแทนที่อินสแตนซ์ Fragment อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันและตั้งค่าแฟล็กlaunchSingleTopเป็นจริง (I5a2f1, b/237374580) - จากการนำทาง
2.5.2: แก้ไขIllegalStateExceptionที่เกิดจากการไปยังกราฟที่ซ้อนกัน 2 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางเริ่มต้นที่เปิดขึ้นใหม่ (I9f7cb, b/243778589)
เวอร์ชัน 2.5
เวอร์ชัน 2.5.3
24 ตุลาคม 2022
androidx.navigation:navigation-*:2.5.3 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
NavHostจะไม่ทำให้เกิดNoSuchElementExceptionอีกต่อไปเมื่อไม่มีปลายทางที่Crossfadeจะเขียนถึง ตอนนี้ระบบจะข้ามการเรียบเรียงเพลง (Ieb46e, b/253299416)- แก้ไขปัญหาที่ระบบไม่ลืมและนำสถานะการเขียนที่บันทึกไว้ (เช่น การใช้งาน
rememberSaveable) ออกเมื่อมีการนำปลายทางออกจากสแต็กย้อนกลับ (I64949)
เวอร์ชัน 2.5.2
7 กันยายน 2022
androidx.navigation:navigation-*:2.5.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.2 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การนำทางแบบไดนามิกจะพยายามติดตั้งปลายทางของกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางเหล่านั้น (Ia2c16, b/240292838)
- ตอนนี้การนำทางจะแทนที่อินสแตนซ์ Fragment อย่างถูกต้องเมื่อนำทางไปยังปลายทางเดียวกันและตั้งค่าแฟล็ก
launchSingleTopเป็นจริง (I5a2f1, b/237374580) - แก้ไขปัญหา
IllegalStateExceptionที่เกิดจากการไปยังกราฟที่ซ้อนกัน 2 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางเริ่มต้นที่ผุดขึ้นมาใหม่ (I9f7cb, b/243778589)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทาง
2.5.2จะขึ้นอยู่กับ Fragment1.5.2(aosp/2178734)
เวอร์ชัน 2.5.1
27 กรกฎาคม 2022
androidx.navigation:navigation-*:2.5.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
Navigation Safe Argsจะไม่ทำให้เกิดคำเตือนการเลิกใช้งานในคลาสที่สร้างขึ้นเมื่อใช้ประเภทอาร์กิวเมนต์ที่กำหนดเองซึ่งบันทึกไว้ในBundleอีกต่อไป (Id86ed, b/237725966)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารีการนำทางขึ้นอยู่กับ Lifecycle
2.5.1แล้ว (Ib4451) - ตอนนี้ไลบรารีการนำทางขึ้นอยู่กับ Activity
1.5.1แล้ว (I3efe8) - ตอนนี้ไลบรารีการนำทางขึ้นอยู่กับ Fragment
1.5.1แล้ว (I56177)
เวอร์ชัน 2.5.0
29 มิถุนายน 2022
androidx.navigation:navigation-*:2.5.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.4.0
- การผสานรวม CreationExtras -
Navigationตอนนี้สามารถระบุViewModelProvider.Factoryแบบไม่มีสถานะผ่าน Lifecycle2.5.0ของCreationExtrasได้แล้ว
Navigation SafeArgs
Navigation Safe Argsได้อัปเกรดทรัพยากร Dependency ของAndroid Gradle Pluginให้ใช้7.0.4ซึ่งจะทำให้ไม่รองรับ AGP เวอร์ชันก่อน7.0- เพิ่มการรองรับแอตทริบิวต์ namespace build.gradle เพื่อใช้แทน applicationId
การเปลี่ยนแปลงอื่นๆ
visibleEntriesAPI ไม่ใช่เวอร์ชันทดลองอีกต่อไป และมีฟังก์ชันในการดึงข้อมูลรายการทั้งหมดที่ปลายทางมองเห็นได้ในขณะนี้ตามNavController
เวอร์ชัน 2.5.0-rc02
15 มิถุนายน 2022
androidx.navigation:navigation-*:2.5.0-rc02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-rc02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่เกิดจากการสลับไปมาระหว่างปลายทางด้านล่างอย่างรวดเร็วเมื่อใช้ Navigation Compose
NavHost(I3979a, b/234054916) Navigation SafeArgsจะไม่ขัดข้องอีกต่อไปเมื่อใช้applicationIdSuffixและเนมสเปซที่ไม่มีapplicationIdหรือเมื่อapplicationIdและเนมสเปซแตกต่างกัน (I754b1, b/233119646)NavArgumentมีฟังก์ชันtoString()ที่กำหนดเองเพื่อแสดงค่าภายในของอาร์กิวเมนต์แล้ว (I900a8)
เวอร์ชัน 2.5.0-rc01
11 พฤษภาคม 2022
androidx.navigation:navigation-*:2.5.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-rc01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มกฎการตรวจสอบใหม่เพื่อเตือนไม่ให้วางองค์ประกอบ
<deeplink>ไว้ภายในองค์ประกอบ<activity>ในไฟล์navigation.xml(Ic15a5, b/178403185)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะทิ้งขอบเขตที่สามารถคอมโพสได้ใน
NavHostและDialogHostตามลำดับที่คาดไว้ นั่นคือ ระบบจะทิ้งขอบเขตที่สามารถคอมโพสได้ด้านในก่อนขอบเขตที่สามารถคอมโพสได้ด้านนอก (I157e6) - ตอนนี้ Navigation SafeArgs ใช้
PathSensitivity.RELATIVEในArgumentsGenerationTaskเพื่อให้แคชย้ายตำแหน่งได้ ซึ่งหมายความว่าตอนนี้สามารถนำรายการแคชกลับมาใช้ใหม่จากบิลด์ CI ไปยังบิลด์ในเครื่องได้แล้ว (I5f67c, b/173420454) UnrememberedGetBackStackEntryDetectorกฎการตรวจสอบโค้ดได้รับการอัปเดตเพื่อให้แน่ใจว่าการเรียกrememberที่อยู่รอบๆ การเรียกgetBackStackEntry()จะส่งผ่านออบเจ็กต์NavBackStackEntryเป็นคีย์ด้วย(Ib7081, b/227382831)
เวอร์ชัน 2.5.0-beta01
20 เมษายน 2022
androidx.navigation:navigation-*:2.5.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
DialogNavigatorใช้popWithTransitionเมื่อดำเนินการโทรdismiss()การแก้ไขนี้จะช่วยแก้ปัญหาการแข่งขันเมื่อใช้ViewModelภายในปลายทางdialogซึ่งจะทำให้เกิดIllegalStateExceptionเมื่อปิดกล่องโต้ตอบโดยใช้ปุ่มย้อนกลับของระบบหรือแตะนอกกล่องโต้ตอบเพื่อออก (Id7376, b/226552301)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับวงจร
2.5.0-beta01ซึ่งจะแก้ไขIllegalStateExceptionเมื่อซ้อนNavHostรายการหนึ่งไว้ภายในอีกรายการหนึ่งNavHostในแท็บการนำทางด้านล่างที่ไม่ใช่แท็บหลักเมื่อใช้ Back Stack หลายรายการ
เวอร์ชัน 2.5.0-alpha04
6 เมษายน 2022
androidx.navigation:navigation-*:2.5.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-alpha04 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
visibleEntriesไม่ใช่ฟีเจอร์ทดลองอีกต่อไป (I4829f, b/225394514)
การแก้ไขข้อบกพร่อง
- ตอนนี้ NavHost ขึ้นอยู่กับ
visibleEntriesจากNavControllerเพื่อกำหนดรายการที่จะเขียน ซึ่งหมายความว่าเมื่อใช้ NavHost ที่ซ้อนกันNavHostด้านในควรเคลื่อนไหวออกอย่างถูกต้อง (I4ba2b, b/225394514) visibleEntriesStateFlowที่NavControllerระบุจะอิงตามสถานะวงจรลูกค้าสูงสุดของรายการแทนสถานะวงจรลูกค้าปัจจุบัน ซึ่งหมายความว่าแม้ว่าวงจรโฮสต์ของnavControllerจะต่ำกว่า STARTED แต่รายการที่มองเห็นได้จะยังคงเหมือนเดิม (I9e2a8, b/225394514)- ตอนนี้
SavedStateViewFactoryรองรับการใช้CreationExtrasแล้วแม้ว่าจะเริ่มต้นด้วยSavedStateRegistryOwnerก็ตาม หากมีการระบุส่วนเสริม ระบบจะไม่สนใจอาร์กิวเมนต์ที่เริ่มต้น (I6c43b, b/224844583) - ตอนนี้
NavDeepLinkสามารถแยกวิเคราะห์ URI ที่มีพารามิเตอร์การค้นหาเดียวที่ไม่มีค่าได้แล้ว (I0efe8, b/148905489) - ตอนนี้สตริงว่างจะถือเป็นอาร์กิวเมนต์ที่ถูกต้องใน Deep Link (I70a0d, b/217399862)
Navigation Safe Argsจะไม่ขัดข้องอีกต่อไปเมื่อใช้เนมสเปซและไม่มีAndroidManifest.xml(I17ccf, b/227229815)
เวอร์ชัน 2.5.0-alpha03
23 กุมภาพันธ์ 2022
androidx.navigation:navigation-*:2.5.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้คุณส่ง
CreationExtrasไปยังby navGraphViewModelsเพื่อสร้างViewModelได้แล้ว (I29217, b/217618359)
การแก้ไขข้อบกพร่อง
NavDeepLinksรองรับอักขระขึ้นบรรทัดใหม่ที่เข้ารหัสซึ่งฝังอยู่ในเส้นทาง/URI ของ Deep Link อย่างถูกต้องแล้ว (I513d1, b/217815060)CreationExtrasจะทำงานได้อย่างถูกต้องเมื่อใช้กับNavBackStackEntriesเพื่อสร้าง ViewModel (I69161, b/217617710)- ตอนนี้ Navigation Safe Args รองรับการใช้เนมสเปซที่กำหนดไว้
ใน
build.gradleแทนแพ็กเกจใน AndroidManifest แล้ว (I659ef, b/217414933)
เวอร์ชัน 2.5.0-alpha02
9 กุมภาพันธ์ 2022
androidx.navigation:navigation-*:2.5.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-alpha02 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จากการนำทาง
2.4.1: ตอนนี้NavHostFragmentจะตั้งค่าOnBackPressedDispatcherอย่างถูกต้องเมื่อใช้ View Binding กับกราฟที่ซ้อนกัน (Ifbb51, b/214577959) - จากการนำทาง
2.4.1: เมื่อ Deep Link ผ่านNavGraphที่ซ้อนกันหลายรายการ ตอนนี้ Back Stack จะรวมปลายทางเริ่มต้นระดับกลางอย่างถูกต้องแล้ว (I504c0, b/214383060)
เวอร์ชัน 2.5.0-alpha01
26 มกราคม 2022
androidx.navigation:navigation-*:2.5.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
NavBackStackEntryตอนนี้ผสานรวมกับ ViewModel CreationExtras ซึ่งเปิดตัวเป็นส่วนหนึ่งของ Lifecycle2.5.0-alpha01แล้ว (Ib9fe2, b/207012490)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเข้าถึง
ViewModelที่สร้าง ผ่านby navGraphViewModels()จากonCreate()ของ Fragment จะไม่สำเร็จและแสดงIllegalStateException(I8a14d) NavDeepLinks จะไม่ถอดรหัสอาร์กิวเมนต์ซ้ำ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้ระบบจะส่งอาร์กิวเมนต์ที่เหมาะสมไปยังปลายทางสุดท้ายของคุณแล้ว (I31b0a, b/210711399)
Safe Args
- ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Navigation Safe Args จะใช้กับ Android Studio เวอร์ชันก่อน 7.0 ไม่ได้อีกต่อไป แต่จะใช้ได้กับปลั๊กอิน Android Gradle 7.1.0 ขึ้นไป (I41c88, b/213086135, b/207670704)
เวอร์ชัน 2.4.2
เวอร์ชัน 2.4.2
6 เมษายน 2022
androidx.navigation:navigation-*:2.4.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ย้อนกลับจากการนำทาง
2.5.0-alpha03:NavDeepLinksตอนนี้รองรับอักขระขึ้นบรรทัดใหม่ที่เข้ารหัสซึ่งฝังอยู่ในเส้นทาง/URI ของ Deep Link ได้อย่างถูกต้องแล้ว (I513d1, b/217815060) - ย้อนกลับจาก Navigation
2.5.0-alpha03: ตอนนี้ Navigation SafeArgs รองรับการใช้เนมสเปซที่กำหนดไว้ในbuild.gradleแทนแพ็กเกจใน AndroidManifest แล้ว (I659ef, b/217414933) - ย้อนกลับจากการนำทาง
2.5.0-alpha04:Navigation Safe Argsจะไม่ขัดข้องอีกต่อไปเมื่อใช้ เนมสเปซและไม่มีAndroidManifest.xml(I17ccf, b/227229815) - ย้อนกลับจากการนำทาง
2.5.0-alpha04: ตอนนี้ระบบถือว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องใน Deep Link แล้ว (I70a0d, b/217399862)
เวอร์ชัน 2.4.1
เวอร์ชัน 2.4.1
9 กุมภาพันธ์ 2022
androidx.navigation:navigation-*:2.4.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.1 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- ตอนนี้
NavHostFragmentจะตั้งค่าOnBackPressedDispatcherอย่างถูกต้องเมื่อใช้ ViewBinding กับกราฟที่ซ้อนกัน (Ifbb51, b/214577959) - เมื่อ Deep Link ผ่าน
NavGraphที่ซ้อนกันหลายรายการ ตอนนี้ Back Stack จะรวมปลายทางเริ่มต้นระดับกลางอย่างถูกต้องแล้ว (I504c0, b/214383060) - ย้อนกลับจากการนำทาง
2.5.0-alpha01: แก้ไขปัญหาที่การเข้าถึง ViewModel ที่สร้างผ่านby navGraphViewModels()จากonCreate()ของ Fragment จะล้มเหลวพร้อมกับIllegalStateException(I8a14d) - ย้อนกลับจากการนำทาง
2.5.0-alpha01:NavDeepLinks ไม่ต้องถอดรหัสอาร์กิวเมนต์ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้ระบบจะส่งอาร์กิวเมนต์ที่ถอดรหัสอย่างถูกต้องไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399) - พอร์ตจาก Navigation
2.5.0-alpha01: ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Navigation Safe Args จะไม่สามารถใช้งานร่วมกับ Android Studio เวอร์ชันก่อน 7.0 ได้อีกต่อไป แต่จะใช้งานร่วมกับปลั๊กอิน Android Gradle 7.1.0 ขึ้นไปได้ (I41c88, b/213086135, b/207670704)
เวอร์ชัน 2.4.0
เวอร์ชัน 2.4.0
26 มกราคม 2022
androidx.navigation:navigation-*:2.4.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- อาร์ติแฟกต์การนำทางทั้งหมดได้รับการเขียนใหม่ใน Kotlin ซึ่งช่วยปรับปรุงค่า Null ของคลาสที่ใช้ Generics (เช่น คลาสย่อย
NavType) ฟังก์ชันส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์-ktxได้ย้ายไปอยู่ในอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว-ktxอาร์ติแฟกต์จะยังคงเผยแพร่ต่อไป แต่จะไม่มีข้อมูลใดๆ - ตอนนี้อาร์ติแฟกต์
navigation-fragmentมีการใช้งานที่สร้างไว้ล่วงหน้าของเลย์เอาต์แบบ 2 บานหน้าต่างผ่านAbstractListDetailFragmentใหม่ Fragment นี้ใช้SlidingPaneLayoutเพื่อจัดการบานหน้าต่างรายการ (ซึ่งคลาสย่อยของคุณมีให้) และบานหน้าต่างรายละเอียด ซึ่งใช้NavHostFragmentเป็นการติดตั้งใช้งาน ดังที่เห็นในการติดตั้งใช้งานตัวอย่าง - เมธอด
currentBackStackEntryAsFlow()ในNavControllerมีFlowที่จะปล่อยออกมาทุกครั้งที่NavBackStackEntryปัจจุบันมีการเปลี่ยนแปลง คุณใช้โฟลว์นี้แทนการจัดการOnDestinationChangedListenerด้วยตนเองได้ - ตอนนี้ NavController มีความสามารถในการดึงรายการอินสแตนซ์
NavBackStackEntryที่มองเห็นได้ทั้งหมดเป็นStateFlowผ่านพร็อพเพอร์ตี้visibleEntriesที่เป็นเวอร์ชันทดลอง - ตอนนี้คุณสามารถขยายคลาส
NavTypeเพื่อสร้าง NavType ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรมเท่านั้น เช่น ผ่าน Navigation Graph Kotlin DSL ตอนนี้การนำทางมี
findStartDestination()และgetHierarchy()API ที่ใช้ช่วยในการติดตั้งใช้งาน NavigationUI ที่กำหนดเองได้แล้วfindStartDestination()เป็นฟังก์ชันส่วนขยายในNavGraphที่จะระบุตำแหน่งต้นทางเริ่มต้นจริงซึ่งจะแสดงเมื่อคุณไปยังกราฟ แม้ว่าstartDestinationจะเป็นNavGraphที่ซ้อนกันอยู่ก็ตามgetHierarchy()เป็นฟังก์ชันในNavDestinationที่ใช้เพื่อยืนยันว่าปลายทางที่ระบุอยู่ภายในลำดับชั้นของปลายทางอื่นหรือไม่val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }เราได้อัปเดตเมธอด
NavigationUIที่ใช้BottomNavigationViewเพื่อให้ใช้คลาสซูเปอร์แทน ซึ่งเปิดตัวใน Material1.4.0,NavigationBarViewซึ่งจะช่วยให้ใช้วิธีการเหล่านี้กับNavigationRailViewได้เมื่อขยายองค์ประกอบ
<action>ผ่าน XML แอตทริบิวต์ภาพเคลื่อนไหวจะใช้แอตทริบิวต์ที่ดึงมาจากธีมได้โดยใช้ไวยากรณ์app:enterAnim="?attr/transitionEnter"ตอนนี้ Safe Args จะสร้าง
fromSavedStateHandle()เมธอดสำหรับคลาสNavArgsแต่ละคลาส (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
เส้นทางการนำทางและ Kotlin DSL
การนำทางเวอร์ชันก่อนหน้าอาศัยการกำหนดรหัสจำนวนเต็มคงที่ให้กับแต่ละปลายทาง ซึ่งจะระบุปลายทางนั้นๆ จากปลายทางอื่นๆ ที่เกี่ยวข้องได้อย่างไม่ซ้ำกัน และช่วยให้คุณnavigate()ไปยังปลายทางนั้นได้โดยตรงหรือผ่านการดำเนินการ แม้ว่าระบบนี้จะยังคงใช้ได้และมีประโยชน์ โดยเฉพาะในกรณีที่คุณกําหนดกราฟการนําทางใน XML และใช้ค่าคงที่ R.id ที่สร้างขึ้นโดยอัตโนมัติหรือ Safe Args (ซึ่งใช้ค่าคงที่เหล่านั้นเพื่อสร้างโค้ดในเวลาสร้าง) แต่ระบบจำนวนเต็มที่ไม่ซ้ำกันนี้ไม่ได้บันทึกความหมายเชิงความหมายและความสามารถในการแสดงออกที่จำเป็นต่อการรองรับกราฟแบบไดนามิกอย่างเต็มรูปแบบซึ่งสร้างขึ้นแบบเป็นโปรแกรมในรันไทม์ผ่าน Navigation Kotlin DSL
การเปิดตัวนี้จะแนะนำตัวเลือกใหม่สำหรับการระบุปลายทางในกราฟการนำทางโดยใช้เส้นทาง เส้นทางคือStringที่กำหนดเส้นทางที่ไม่ซ้ำกันไปยังปลายทาง ตอนนี้เราได้เลิกใช้งานเมธอด Kotlin DSL ทั้งหมดที่ใช้รหัสปลายทางแล้ว และแทนที่ด้วย API ที่เทียบเท่าซึ่งใช้เส้นทาง
เส้นทางแต่ละเส้นทางควรได้รับการพิจารณาเป็นส่วน "เส้นทาง" ของ Uri ที่กำหนดปลายทางนั้น เช่น home, profile/{userId}, profile/{userId}/friends ฯลฯ เมื่อมีการเชื่อมโยงข้อมูลระบุตัวตนของปลายทางกับเนื้อหาที่เฉพาะเจาะจง อาร์กิวเมนต์แบบไดนามิกเหล่านั้นควรเป็นส่วนหนึ่งของเส้นทาง โดยทำตามกฎเดียวกันกับDeep Link โดยนัย
ตอนนี้ NavController API ทั้งหมดที่เคยรับเฉพาะรหัสจะมีโอเวอร์โหลดที่ใช้เส้นทาง String ซึ่งรวมถึง navigate(), popBackStack(), popUpTo() และ getBackStackEntry()
ซึ่งส่งผลต่อ API ดังนี้
- เราได้เลิกใช้งานพร็อพเพอร์ตี้
popUpToKotlin ใน Kotlin DSL แล้วเพื่อใช้popUpToIdแทน - เราได้เลิกใช้งาน
getStartDestination()API แล้วเพื่อหันไปใช้getStartDestinationId()แทน
การไปยังส่วนต่างๆ ตามเส้นทางจะทำตามกฎเดียวกันกับDeep Link โดยนัย ซึ่งต่างจากการไปยังส่วนต่างๆ ตามรหัสตรงที่สามารถไปยังปลายทางใดก็ได้ในกราฟที่ซ้อนกัน เพื่อให้มั่นใจว่าเส้นทางเหล่านี้ใช้ได้ในโปรเจ็กต์แบบหลายโมดูลโดยไม่ต้องเพิ่ม Deep Link ที่มองเห็นได้ภายนอกไปยังแต่ละปลายทางอย่างชัดเจน
Navigation Compose
อาร์ติแฟกต์ navigation-compose ช่วยให้ผสานรวมระหว่าง Navigation Component กับ Jetpack Compose ได้ โดยจะใช้ฟังก์ชัน @Composable เป็นปลายทางในแอปพลิเคชัน
รุ่นนี้มีฟีเจอร์ต่อไปนี้
NavHostComposable ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL ได้โดยใช้ปลายทางcomposableและdialogรวมถึงรองรับ Navigator ที่ไม่บังคับ เช่น Navigator จาก Accompanist Navigation Material- ต้องรองรับการเปลี่ยนเพลงแบบค่อยๆ ระหว่างปลายทาง ภาพเคลื่อนไหวการนำทางของ Accompanist สามารถใช้เพื่อควบคุมการเปลี่ยนฉากเข้าและออกได้โดยใช้ Compose API เวอร์ชันทดลอง
- การกำหนดขอบเขตของ
Lifecycleไปยังปลายทางที่ประกอบได้แต่ละรายการ แต่ละปลายทางจะเข้าสู่สถานะRESUMEDเมื่อการเปลี่ยนผ่านขาเข้าเสร็จสิ้น และจะเปลี่ยนเป็นSTARTEDทันทีเมื่อการเปลี่ยนผ่านขาออกเริ่มต้น จึงช่วยให้คุณหลีกเลี่ยงปัญหาIllegalStateExceptionและปัญหาแบบหลายช่องทางได้โดยการทริกเกอร์การเรียกnavigateเมื่อLifecycleเป็นRESUMEDเท่านั้น - การกำหนดขอบเขตของ
ViewModel(ผ่านviewModel()API ของ Lifecycle ViewModel Compose2.4.0หรือhiltViewModel()ของ Hilt Navigation Compose1.0.0ที่ระดับปลายทาง โดยให้ขอบเขตที่ยังคงอยู่แม้จะมีการเปลี่ยนแปลงการกำหนดค่าและอยู่ใน Back Stack (เมื่อมีการทิ้งเนื้อหาที่เขียนด้วย Compose) และสัญญาณในonCleared()ของ ViewModel ซึ่งบ่งบอกถึงการทิ้งอย่างถาวรและการล้างสถานะที่เชื่อมโยงกับNavBackStackEntryนั้น - การกำหนดขอบเขตของสถานะ
rememberSaveableที่ระดับปลายทาง เพื่อให้มั่นใจว่าระบบจะบันทึกและกู้คืนสถานะที่ประกอบได้ทั้งหมดโดยอัตโนมัติเมื่อคุณกลับไปยังปลายทาง - รองรับการบันทึกและกู้คืนสถานะของ
NavControllerและสถานะของปลายทางอย่างเต็มรูปแบบหลังจากกระบวนการสิ้นสุดลงและสร้างใหม่ - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการส่งผลลัพธ์กลับไปยังปลายทางก่อนหน้า
เขียนตัวช่วยที่เฉพาะเจาะจงใน
rememberNavController()และcurrentBackStackEntryAsState()เพื่ออนุญาตสถานะการโฮสต์และเชื่อมต่อNavControllerกับ Composable นอกNavHost(เช่น แถบนำทางด้านล่าง)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการนำทาง Compose
การย้อนกลับหลายครั้ง
NavController มีหน้าที่จัดการ Back Stack ของปลายทาง เพิ่มปลายทางไปยัง Back Stack เมื่อคุณnavigate()ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack() หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions ที่มีอยู่และการผสานรวมกับองค์ประกอบ <action> ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและกู้คืนสแต็กย้อนกลับ
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI ของ onNavDestinationSelected(), BottomNavigationView.setupWithNavController() และ NavigationView.setupWithNavController() บันทึกและกู้คืนสถานะของปลายทางที่ป๊อปอัปโดยอัตโนมัติ ซึ่งช่วยให้รองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางกับ Fragment นี่คือวิธีที่แนะนำในการผสานรวมกับ Back Stack หลายรายการ
API พื้นฐานสำหรับการบันทึกและกู้คืนสถานะจะแสดงผ่านแพลตฟอร์มต่างๆ ดังนี้
ใน XML การนำทาง ตอนนี้องค์ประกอบ
<action>สามารถใช้แอตทริบิวต์บูลีนของapp:popUpToSaveStateและapp:restoreStateเพื่อบันทึกสถานะของปลายทางที่แสดงผ่านapp:popUpToและกู้คืนสถานะที่เชื่อมโยงกับปลายทางที่ส่งเป็นapp:destinationได้แล้ว<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />ใน
navOptionsKotlin DSL คุณสามารถเพิ่มพร็อพเพอร์ตี้บูลีนrestoreStateและพร็อพเพอร์ตี้บูลีนsaveStateในpopUpToBuilder ได้ดังนี้// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }ในการสร้างออบเจ็กต์
NavOptionsด้วยตนเองผ่านNavOptions.Builderคุณสามารถใช้setRestoreState()และการโอเวอร์โหลดใหม่เพื่อsetPopUpTo()ที่ใช้พารามิเตอร์saveStateเพิ่มเติม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);ตอนนี้การเรียกแบบเป็นโปรแกรมไปยัง
popBackStack()สามารถมีพารามิเตอร์saveStateเพิ่มเติมได้แล้วคุณสามารถใช้วิธี
clearBackStack()เพื่อล้างสถานะที่บันทึกไว้ด้วยpopBackStack()หรือpopUpToSaveState
ในทุกกรณี NavController จะบันทึกและกู้คืนสถานะของ NavBackStackEntry แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel ที่กำหนดขอบเขตปลายทางการนำทางด้วย เราได้อัปเดต API ของ Navigator เพื่อให้ Navigator แต่ละรายการรองรับการบันทึกและกู้คืนสถานะของตนเองได้
การเปลี่ยนแปลงลักษณะการทำงาน
NavDeepLinkBuilderตอนนี้ได้เพิ่มPendingIntent.FLAG_IMMUTABLEลงในPendingIntentที่ส่งคืนโดยcreatePendingIntent()เพื่อให้มั่นใจว่า API นี้จะทำงานตามที่คาดไว้เมื่อกำหนดเป้าหมายเป็น Android 12- ตอนนี้การนำทางขึ้นอยู่กับ
วงจรของหน้าเว็บ
2.3.1และตอนนี้จะทำเครื่องหมายsetGraph(),popBackStack(),navigateUp()และnavigate()ซึ่งเป็น เมธอดที่อัปเดตNavBackStackEntryLifecycleเป็น@MainThreadเพื่อให้การนำทางสอดคล้องกับการบังคับใช้ในเธรดหลักที่เปิดตัวในวงจรของหน้าเว็บ2.3.0 - ตอนนี้ Deep Link จะตรวจสอบว่าอาร์กิวเมนต์ที่จำเป็นทั้งหมด (อาร์กิวเมนต์ที่ไม่มีค่าเริ่มต้น) อยู่ใน
Uri NavDeepLinkอาร์กิวเมนต์ที่แยกวิเคราะห์แล้วจะพิจารณาเครื่องหมายปอนด์ในลักษณะเดียวกับเครื่องหมายคำถามเป็นตัวคั่นระหว่างส่วนของเส้นทาง ซึ่งจะป้องกันไม่ให้อาร์กิวเมนต์ครอบคลุมเครื่องหมายปอนด์- เมื่อสร้างการดำเนินการ โค้ด Kotlin ที่สร้างจาก Safe Args จะวางอาร์กิวเมนต์ที่ไม่มีค่าเริ่มต้นไว้ก่อนอาร์กิวเมนต์ที่มีค่าเริ่มต้นเป็นพารามิเตอร์
- เมื่อสร้างอาร์กิวเมนต์ ตอนนี้ Safe Args จะวางพารามิเตอร์ ที่ไม่มีค่าเริ่มต้นไว้ก่อนพารามิเตอร์ที่มีค่าเริ่มต้น
- ตอนนี้ Safe-Args ขึ้นอยู่กับปลั๊กอิน Android Gradle 4.2.0 แล้ว ซึ่งหมายความว่าคุณไม่ควรได้รับ
applicationIdTextResourceคำเตือนเกี่ยวกับการใช้
ปัญหาที่ทราบแล้ว
- แก้ไขในการนำทาง
2.5.0-alpha01: การเข้าถึงViewModelที่สร้าง ผ่านby navGraphViewModels()จากonCreate()ของ Fragment จะล้มเหลวพร้อมIllegalStateException(b/213504272) - แก้ไขใน Navigation
2.5.0-alpha01: Safe Args 2.4.0 ใช้ร่วมกับปลั๊กอิน Android Gradle 7.1.0 ขึ้นไปไม่ได้ (b/213086135) - Deep Link ที่มีกราฟการนำทางแบบซ้อนกันหลายรายการจะสร้าง Backstack แบบเต็มไม่ถูกต้อง (b/214383060)
เวอร์ชัน 2.4.0-rc01
15 ธันวาคม 2021
androidx.navigation:navigation-*:2.4.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-rc01 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลงลักษณะการทำงาน
NavDeepLinkอาร์กิวเมนต์ที่แยกวิเคราะห์แล้วจะพิจารณาเครื่องหมายปอนด์ในลักษณะเดียวกับเครื่องหมายคำถามเป็นตัวคั่นระหว่างอาร์กิวเมนต์ (I21309, b/180042703)
การแก้ไขข้อบกพร่อง
- ดีปลิงก์จะไม่ละเว้นอาร์กิวเมนต์ที่มีค่าเหมือนกับชื่อของตัวยึดตำแหน่งอีกต่อไป (If8017, b/207389470)
NavControllerจะไม่ขัดข้องอีกต่อไปเมื่อแสดงปลายทางที่ซ้อนกันโดยใช้การเปลี่ยนฉากหลังจากกู้คืนNavControllerแล้ว (I0f7c9, b/205021623)- ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อใช้
startDestinationที่ไม่ถูกต้องจะเปลี่ยนไปใช้เส้นทางของจุดเริ่มต้นโดยค่าเริ่มต้น หากมี (I86b9d, b/208041894)
การแก้ไขข้อบกพร่องของ Navigation Compose
- แก้ไขข้อขัดข้องที่อาจเกิดขึ้นจากการสลับไปมาระหว่างต้นทางและปลายทางอื่นอย่างรวดเร็วโดยใช้รายการในเมนูการนำทางด้านล่าง (Ic8976, b/208887901)
- ตอนนี้ระบบจะกู้คืนปลายทางของกล่องโต้ตอบที่ด้านบนของหน้าจออย่างถูกต้องหลังจากมีการเปลี่ยนแปลงการกำหนดค่าหรือกระบวนการสิ้นสุด (I4c0dc, b/207386169)
- แก้ไขปัญหาที่การพยายามดึงข้อมูล
ViewModelจากNavBackStackEntryของกล่องโต้ตอบจะล้มเหลวเมื่อปิดกล่องโต้ตอบ (I6b96d, b/206465487) - แก้ไขปัญหาเมื่อใช้ปลายทาง
activityกับNavHostของ Navigation Compose ซึ่งจะทำให้เกิดการจัดองค์ประกอบใหม่แบบไม่สิ้นสุด (I8f64c) - แก้ไขการรั่วไหลใน Navigation Compose ซึ่งเก็บการอ้างอิงของกิจกรรมเก่าไว้หลังจากการเปลี่ยนแปลงการกำหนดค่าหรือกระบวนการสิ้นสุด (I4efcb, b/204905432)
การแก้ไขข้อบกพร่องของ Safe Args
SafeArgsไม่ขัดข้องอีกต่อไปเมื่อพยายามกู้คืนอาร์เรย์ Parcelable ที่กำหนดเองหลังจากกระบวนการสิ้นสุด (I618e8, b/207315994)- แก้ไขข้อบกพร่องใน Safe Args ที่ไม่อนุญาตให้อาร์เรย์บูลีนมีค่า
null(I8c396, b/174787525)
เวอร์ชัน 2.4.0-beta02
3 พฤศจิกายน 2021
androidx.navigation:navigation-*:2.4.0-beta02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-beta02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การจัดการทั้ง Deep Link ที่ชัดเจนและโดยนัย
จะเพิ่มแฟล็ก
saveStateโดยอัตโนมัติ เมื่อไปยังกราฟอื่น เพื่อให้มั่นใจว่าโค้ด เช่นNavigationUI.setupWithNavControllerและ โค้ดที่ใช้ Back Stack หลายรายการทํางานได้ตามที่คาดไว้ (Ic8807)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะคอมไพล์รูปแบบ Deep Link แบบเลซีใน NavDeepLink แทนที่จะคอมไพล์ระหว่างการขยาย ซึ่งจะช่วยปรับปรุงเวลาในการขยายกราฟการนำทางที่มี Deep Link (b8d257, b/184149935)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ NavBackStackEntries ถูกส่งไปยัง
Lifecycle.State.CREATEDหลังจากย้ายไปยังLifecycle.State.STARTEDเมื่อมีการเพิ่มNavHostลงในsetContent()ของกิจกรรมโดยตรง (Ia5ac1, b/203536683) - แก้ไขเงื่อนไขการแข่งขันที่การ
นำปลายทาง
DialogFragmentออกจาก สแต็กย้อนกลับก่อนที่กล่องโต้ตอบจะแสดง จะไม่ปิดกล่องโต้ตอบจริง ซึ่งส่งผลให้ เกิดข้อขัดข้องเมื่อผู้ใช้ปิดกล่องโต้ตอบที่ผิดพลาดด้วยตนเอง (I687e5) - แก้ไขปัญหาที่
onNavDestinationSelectedAPI ในNavigationUIจะ แสดงผลtrueแม้ว่าคุณจะไม่ได้navigate()ไปยัง กราฟการนำทางนั้นจริงๆ ตอนนี้ระบบจะใช้ตรรกะเดียวกัน กับที่setupWithNavControllerใช้ภายในเพื่อ เลือกเฉพาะMenuItemที่เชื่อมโยงกับ ปลายทางปัจจุบันโดยใช้hierarchyของปลายทาง (I2b053)
เวอร์ชัน 2.4.0-beta01
27 ตุลาคม 2021
androidx.navigation:navigation-*:2.4.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณใช้
by navGraphViewModelกับเส้นทางแทนการใช้รหัสได้แล้ว เพื่อให้รองรับการใช้ Navigation Kotlin DSL กับ Fragment ได้ดียิ่งขึ้น (I901e3, b/201446416)
การเปลี่ยนแปลง API
- ตอนนี้
visibleEntriesAPI อยู่ในเวอร์ชันทดลอง (I93f6f)
การแก้ไขข้อบกพร่อง
- ViewModel จะไม่ถูกทำลายอีกต่อไปเมื่อการเปลี่ยนผ่านถูกขัดจังหวะด้วยการไปยังมาในหน้าจอเดียวกัน (Id52d8, b/200817333)
- อาร์กิวเมนต์
NavDeepLinkที่อนุญาตให้เป็น Null ไม่จำเป็นต้องมีค่าเริ่มต้นอีกต่อไปเมื่อเพิ่ม Deep Link ไปยังNavDestination(I5aad4, b/201320030) - ตอนนี้ NavBackStackEntries ที่มีวงจรที่แตกต่างกันจะไม่ถือว่าเท่ากันอีกต่อไป ซึ่งหมายความว่า NavHost จะจัดองค์ประกอบปลายทางทั้งหมดอย่างถูกต้องเมื่อทำการนำทางด้วย singleTop และเมื่อเลือกรายการเมนูด้านล่างอีกครั้ง (I1b351, b/196997433)
- แก้ไขปัญหาเกี่ยวกับ
AbstractListDetailFragmentที่ทำให้ระบบจัดการหรือละเว้นแอตทริบิวต์layout_widthและlayout_weightในบานหน้าต่างรายการที่onCreateListPaneView()แสดง อย่างไม่ถูกต้อง (f5fbf3) - ตอนนี้สถานะภาพของปลายทางในกล่องโต้ตอบจะซิงค์กับสถานะของ
DialogFragmentNavigatorอย่างถูกต้องแล้ว ซึ่งหมายความว่าการเรียกใช้ API แบบอะซิงโครนัสdismiss()สำหรับDialogFragmentด้วยตนเองจะล้างปลายทางของกล่องโต้ตอบทั้งหมด เหนือกล่องโต้ตอบที่ปิดไปแล้วได้อย่างถูกต้อง การดำเนินการนี้จะไม่ส่งผลต่อกรณีที่คุณใช้popUpToหรือpopBackStack()เพื่อปิดกล่องโต้ตอบ (I77ba2) - ตอนนี้
AbstractAppBarOnDestinationChangedListenerมีข้อความแสดงข้อผิดพลาดที่ชัดเจนยิ่งขึ้นสำหรับonDestinationChanged()(Ie742d)
เวอร์ชัน 2.4.0-alpha10
29 กันยายน 2021
androidx.navigation:navigation-*:2.4.0-alpha10 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha10 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- ตอนนี้ NavController มีความสามารถในการดึงข้อมูลรายการอินสแตนซ์
NavBackStackEntryทั้งหมดที่มองเห็นได้ผ่านvisibleEntriesStateFlow (Ia964e) rememberNavController()ตอนนี้รับชุดอินสแตนซ์Navigatorที่ไม่บังคับซึ่งจะเพิ่มลงในNavControllerที่ส่งคืนเพื่อรองรับ Navigator ที่ไม่บังคับได้ดียิ่งขึ้น เช่น Navigator จากสื่อการนำทางของ Accompanist (I4619e)
การแก้ไขข้อบกพร่อง
- การนำทางแบบไดนามิกจะไม่ขัดข้องอีกต่อไปเมื่อมีการสร้างกิจกรรมขึ้นใหม่ (Ifa6a3, b/197942869)
- แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบซึ่งเกิดขึ้นหลังจากย้อนกลับไปยังปลายทางที่ใช้ Composable ที่มี
NavHostเท่านั้น (3ed148, b/195668143) - ตอนนี้ SafeArgs จะสร้างอาร์กิวเมนต์สำหรับ
fromBundle()และfromSavedStateHandle()ตามลำดับพารามิเตอร์ที่เหมาะสม (I824a8, b/200059831)
เวอร์ชัน 2.4.0-alpha09
15 กันยายน 2021
androidx.navigation:navigation-*:2.4.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha09 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถใช้
clearBackStack()เพื่อล้างสถานะที่บันทึกไว้ด้วยpopBackStack()หรือpopUpToSaveState(I80a0f) - ตอนนี้คุณสามารถส่งรายการอาร์กิวเมนต์และ/หรือ Deep Link ไปยังตัวสร้างของ กราฟการนำทางที่ซ้อนกัน และระบบจะเพิ่มรายการเหล่านั้น ลงในกราฟผลลัพธ์โดยอัตโนมัติ (I8a470, b/182545357)
การเปลี่ยนแปลง API
- ตอนนี้ฟังก์ชัน
navArgumentKotlin DSL เป็นส่วนหนึ่งของnavigation-commonแล้วแทนที่จะเป็นnavigation-composeการดำเนินการนี้จะต้อง อัปเดตการนำเข้าเพื่อใช้ฟังก์ชันนี้ต่อไป (I1d095)
การเปลี่ยนแปลงลักษณะการทำงาน
- เมื่อสร้างอาร์กิวเมนต์ ตอนนี้ Safe Args จะวางพารามิเตอร์ ที่ไม่มีค่าเริ่มต้นไว้ก่อนพารามิเตอร์ที่มีค่าเริ่มต้น (I89709, b/198493585)
การแก้ไขข้อบกพร่อง
- เมื่อใช้ Navigation Compose NavGraphs จะเป็น
DESTROYEDก็ต่อเมื่อองค์ประกอบย่อยทั้งหมดเป็นDESTROYED(I86552, b/198741720) - อาร์กิวเมนต์
NavDeepLinkที่อนุญาตให้เป็นค่าว่างไม่จำเป็นต้องมีค่าเริ่มต้นอีกต่อไป (Ia14ef, b/198689811) - ตอนนี้การเรียก
setGraph()ด้วยกราฟใหม่ จะล้างสแต็กย้อนกลับที่บันทึกไว้ด้วย นอกเหนือจากลักษณะการทำงานก่อนหน้าในการป๊อปสแต็กย้อนกลับ (I97f96) - แก้ไขปัญหาที่ระบบไม่แจ้งอินสแตนซ์
OnDestinationChangedListenerและcurrentBackStackEntryFlowเมื่อใช้launchSingleTop(Iaaebc)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทาง Compose ขึ้นอยู่กับ Activity Compose 1.3.1 (I05829)
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ
Lifecycle ViewModel Compose
2.4.0-beta01แล้ว (Ib86a3)
เวอร์ชัน 2.4.0-alpha08
1 กันยายน 2021
androidx.navigation:navigation-*:2.4.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha08 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถขยายคลาส
NavTypeเพื่อสร้าง NavType ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรมเท่านั้น เช่น ผ่าน Navigation Graph Kotlin DSL (I78440, b/196871885)
การเปลี่ยนแปลงลักษณะการทำงาน
- เมื่อสร้างการดำเนินการ โค้ด Kotlin ที่สร้างจาก Safe Args จะวางอาร์กิวเมนต์ที่ไม่มีค่าเริ่มต้นไว้ก่อนอาร์กิวเมนต์ที่มีค่าเริ่มต้นเป็นพารามิเตอร์ (Idb697, b/188855904)
- ตอนนี้ Deep Link จะตรวจสอบว่าอาร์กิวเมนต์ที่จำเป็นทั้งหมด (อาร์กิวเมนต์ที่ไม่มีค่าเริ่มต้น) อยู่ใน
Uri(#204, b/185527157)
การแก้ไขข้อบกพร่อง
- การใช้
getBackStackEntryและpreviousBackStackEntryภายใน composable() ร่วมกับremember()จะไม่ทำให้เกิดข้อยกเว้นเนื่องจากไม่มีปลายทางในสแต็กย้อนกลับอีกต่อไป (I75138, b/194313238) - ตอนนี้ Navigation Compose จะทำการคอมโพสใหม่อย่างถูกต้องเมื่อเปลี่ยนอาร์กิวเมนต์ของ Back Stack และใช้
launchSingleTop=true(Iebd69, b/186392337) - จะไม่มี
ArrayIndexOutOfBoundsExceptionเมื่อโทรหาsetGraphด้วยกราฟที่มีปลายทาง 13 หรือ 29 แห่งอีกต่อไป (I1a9f1, b/195171984) - เครื่องมือสร้าง Java ของ SafeArgs ไม่ควรทำให้เกิดคำเตือน Lint อีกต่อไป เมื่อสร้างคลาส Args (I1a666, b/185843837)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ ospixd ที่ช่วยตรวจสอบว่า Deep Link ยืนยันว่าอาร์กิวเมนต์ที่จำเป็นทั้งหมด (อาร์กิวเมนต์ที่ไม่มีค่าเริ่มต้น) อยู่ใน
Uri(#204, b/185527157)
เวอร์ชัน 2.4.0-alpha07
18 สิงหาคม 2021
androidx.navigation:navigation-*:2.4.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha07 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ Navigation Compose จะบันทึกสถานะอย่างถูกต้องหลังจากการเปลี่ยนแปลงการกำหนดค่าและเมื่อเปลี่ยนกราฟขณะใช้ฟีเจอร์หลาย Back Stack (If5a3d, b/195141957)
- การเลือกแท็บเดียวกันอีกครั้งเมื่อใช้ Navigation Compose ที่มี Back Stack หลายรายการจะไม่ทำให้หน้าจอว่างอีกต่อไป (I860dc, b/194925622)
NavHostจะสังเกตการเปลี่ยนแปลงในLifecycle.StateของNavBackStackEntryซึ่งหมายความว่าการใช้NavHostใน Fragment จะ ได้รับการประกอบใหม่อย่างถูกต้องเมื่อวงจรของ Fragment เปลี่ยนแปลงแทนที่จะแสดงหน้าจอว่าง (I4eb85, b/195864489)- แก้ไขปัญหาที่การปิด
DialogFragmentจะไม่อัปเดตสถานะNavControllerอย่างถูกต้องหลังจากสร้างกิจกรรมใหม่ (เช่น หลังจากเปลี่ยนการกำหนดค่า) (Icd72b) - แก้ไขปัญหาที่การแสดงกล่องโต้ตอบปลายทางจะไม่อัปเดตการจัดการปุ่มย้อนกลับของระบบใน NavController ซึ่งอาจทำให้ NavController สกัดกั้นปุ่มย้อนกลับแม้ว่าจะไม่มี Back Stack ที่จะแสดงก็ตาม (If3b34)
- ตอนนี้ Safe-args จะสร้าง
toSavedStateHandleเมธอดสำหรับอาร์กิวเมนต์โดยอัตโนมัติ ซึ่งสามารถใช้เพื่อทดสอบโค้ดViewModelได้ (If1e2d, b/193353880)
เวอร์ชัน 2.4.0-alpha06
4 สิงหาคม 2021
androidx.navigation:navigation-*:2.4.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha06 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อเมธอด
requireSlidingPaneLayout()และrequireDetailPaneNavHostFragment()ในAbstractListDetailFragmentเป็นgetSlidingPaneLayout()และgetDetailPaneNavHostFragment()ตามลำดับแล้ว (I34a08)
การเปลี่ยนแปลงลักษณะการทำงาน
- เมื่อไปยังส่วนต่างๆ ด้วยภาพเคลื่อนไหว (เช่น
Crossfade) ตอนนี้Lifecycleของปลายทางใหม่จะไปถึงRESUMEDก็ต่อเมื่อภาพเคลื่อนไหวเสร็จสมบูรณ์แล้วเท่านั้น (If0543, b/172112072, b/194301889) NavHostของ Navigation Compose จะตั้งค่า กราฟเป็นส่วนหนึ่งของการจัดองค์ประกอบครั้งแรก (Ieb7be)
การแก้ไขข้อบกพร่อง
- การป๊อปปลายทางสุดท้ายของกราฟการนำทางจะไม่ทำให้เกิด
ClassCastExceptionอีกต่อไป (If0543, b/172112072, b/194301889) - แก้ไข
NullPointerExceptionที่เกิดขึ้นเมื่อเพิ่ม Deep Link โดยไม่มีUriและไปยังส่วนต่างๆ ผ่านเส้นทางหรือ Deep Link (938a0c, b/193805425) - แก้ไขปัญหาใน Navigation Compose ที่
NavBackStackEntryที่ทำ Deep Link จะไม่ไปถึงสถานะRESUMED(I192c5) - แก้ไขปัญหาที่การแสดงกล่องโต้ตอบปลายทางจะไม่ทำให้การจัดการปุ่มย้อนกลับของระบบใน NavController อัปเดต ซึ่งอาจทำให้ NavController สกัดกั้นปุ่มย้อนกลับแม้ว่าจะไม่มี Back Stack ที่จะแสดงก็ตาม (aosp/1782668)
เวอร์ชัน 2.4.0-alpha05
21 กรกฎาคม 2021
androidx.navigation:navigation-*:2.4.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha05 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลงลักษณะการทำงาน
NavHostของ Navigation Compose จะใช้การเปลี่ยนฉากแบบครอสเฟดเสมอเมื่อไปยังส่วนต่างๆ ของปลายทาง (I07049, b/172112072)- ตอนนี้คุณสามารถเปลี่ยนแปลงกราฟของ NavHost ได้แล้ว กราฟ
ที่มี startDestination และปลายทางเดียวกันในกราฟจะถือว่า
เท่ากันและจะไม่ล้าง
NavControllerBack Stack (I0b8db, b/175392262)
การแก้ไขข้อบกพร่อง
- แก้ไข
NoSuchElementExceptionเมื่อเรียกใช้popBackStack()จากภายในLifecycleObserverที่แนบกับNavBackStackEntryซึ่งเกิดจากการอัปเดตแบบรีเอนทรานต์ไปยังสถานะของ NavController (I64621) AbstractListDetailFragmentตอนนี้อนุญาตให้SlidingPaneLayoutนำออกจาก APK ของคุณได้โดยสมบูรณ์เมื่อไม่ได้ใช้AbstractListDetailFragment(I611ad)- ตอนนี้
NavGraphและNavDestinationจะลบล้างเมธอดเท่ากับ ดังนั้น ออบเจ็กต์ 2 รายการที่มีค่าเดียวกันจะถือว่าเท่ากัน (I166eb, b/175392262)
เวอร์ชัน 2.4.0-alpha04
1 กรกฎาคม 2021
androidx.navigation:navigation-*:2.4.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้อาร์ติแฟกต์
navigation-fragmentมีการใช้งานที่สร้างไว้ล่วงหน้าของเลย์เอาต์แบบ 2 บานหน้าต่างผ่านAbstractListDetailFragmentใหม่ Fragment นี้ใช้SlidingPaneLayoutเพื่อจัดการบานหน้าต่างรายการ (ซึ่งคลาสย่อยของคุณมีให้) และบานหน้าต่างรายละเอียด ซึ่งใช้NavHostFragmentเป็นการติดตั้งใช้งาน ดังที่เห็นในการติดตั้งใช้งานตัวอย่าง (Iac4be, b/191276636) - ตอนนี้
NavHostของอาร์ติแฟกต์navigation-composeรองรับปลายทางdialogนอกเหนือจากปลายทางcomposableแล้ว โดยปลายทางของกล่องโต้ตอบเหล่านี้จะแสดงภายในDialogที่ประกอบได้ ซึ่งลอยอยู่เหนือปลายทางcomposableปัจจุบัน (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
การเปลี่ยนแปลง API
- เปลี่ยนชื่อฟังก์ชัน
addในNavigatorStateเป็นpushแล้ว การเรียกใช้add()ทั้งหมดในปัจจุบันจะต้องเปลี่ยนเป็น push() (Ie89fc, b/172112072) - ตอนนี้อินสแตนซ์
Navigatorที่กำหนดเองสามารถใช้ API ของpushWithTransactionและpopWithTransitionในNavigatorStateเพื่อพุชหรือป๊อปปลายทางแบบไม่พร้อมกันได้แล้ว โปรดทราบว่าขณะนี้ไม่มีโปรแกรมนำทางใดที่รวมอยู่ใช้ API นี้ (Ic4d7c, b/172112072)
การเปลี่ยนแปลงลักษณะการทำงาน
NavDeepLinkBuilderตอนนี้ได้เพิ่มPendingIntent.FLAG_IMMUTABLEลงในPendingIntentที่ส่งคืนโดยcreatePendingIntent()เพื่อให้มั่นใจว่า API นี้จะทำงานตามที่คาดไว้เมื่อกำหนดเป้าหมายเป็น Android 12 (If8c52)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ
<include-dynamic>ซึ่งอาร์กิวเมนต์ที่ส่งไปยังกราฟจะส่งไปยังกราฟที่รวมแบบไดนามิกไม่ถูกต้อง (I3e115) - แก้ไข
NullPointerExceptionเมื่อไปยังปลายทาง โดยใช้อาร์กิวเมนต์string[]ที่มีค่าเริ่มต้นเป็น@null(I1fbe8) - เพิ่มกฎ ProGuard สำหรับ
@Navigator.Nameเพื่อแก้ไขปัญหา เมื่อใช้โหมดเต็มของ R8 3.1 (I2add9, b/191654433) - SafeArgs จะไม่ล้มเหลวอีกต่อไปเมื่อสร้างแอปด้วย
Kotlinเวอร์ชันก่อนหน้า1.5.0(Icd1ff, b/190739257)
เวอร์ชัน 2.4.0-alpha03
16 มิถุนายน 2021
androidx.navigation:navigation-*:2.4.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha03 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ต้องใช้การเรียกใช้
navigate()2 ครั้งเพื่อไปยังกราฟแบบไดนามิกที่รวมไว้ (I7785c, b/188859835) - แก้ไขการถดถอยที่เกิดขึ้นในการนำทาง
2.4.0-alpha01ซึ่งsetupActionBarWithNavController()จะไม่นำไอคอนขึ้นอย่างถูกต้องเมื่อคุณอยู่ในปลายทางระดับบนสุด (I5d443, b/189868637) - แก้ไข
IllegalStateExceptionเมื่อ เรียกpopBackStack()หลังจากแสดง กราฟรูทของ NavController ก่อนหน้านี้ (I2a330, b/190265699) - ตอนนี้กฎ ProGuard สำหรับ
by navArgs()จะทำงานอย่างถูกต้อง เมื่อใช้navigation-commonหรืออาร์ติแฟกต์ใดๆ ที่ขึ้นอยู่กับby navArgs()(I68800, b/190082521) OnDestinationChangedListenerที่เรียกใช้navigate()เป็นครั้งแรกที่ได้รับ Callback จะได้รับ Callback ครั้งที่ 2 อย่างถูกต้องพร้อมปลายทางที่ นำทางไป (Ie5f9e, b/190228815)- Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อใช้กับโมดูลฟีเจอร์แบบไดนามิกและ AGP 7.0 ขึ้นไป (I69518, b/189966576)
ปัญหาที่ทราบ
- Safe Args จะล้มเหลวพร้อมข้อผิดพลาด
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’เมื่อใช้ Gradle6.7.0เนื่องจากขึ้นอยู่กับ Kotlin เวอร์ชันเก่า คุณสามารถแก้ไขปัญหานี้ได้โดยอัปเดตไปใช้ Gradle 7.0 (b/190739257)
เวอร์ชัน 2.4.0-alpha02
2 มิถุนายน 2021
androidx.navigation:navigation-*:2.4.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้เส้นทางรองรับปลายทางของกิจกรรม, Fragment และกล่องโต้ตอบ รวมถึงทั่วทั้ง DynamicNavigation Kotlin DSL แล้ว (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUIได้เพิ่ม API แบบทดลองใช้ชั่วคราวเพื่อให้เลือกไม่บันทึกสถานะได้ แม้ว่าการบันทึกสถานะเสมอจะเป็นลักษณะการทำงานที่ถูกต้อง แต่ก็ยังมีการใช้ไลบรารีที่เลิกใช้งานแล้ว (เช่น Fragment ที่เก็บไว้) ซึ่งไม่สามารถรองรับได้เมื่อบันทึกสถานะ ดังนั้นจึงเป็นโอกาสให้แอปค่อยๆ เปลี่ยนไปใช้ API ที่รองรับ (Idf93c)ตอนนี้การนำทางมี
findDestination()และgetHierarchy()API ที่ใช้ช่วยในการติดตั้งใช้งาน NavigationUI ที่กำหนดเองได้แล้วfindDestination()เป็นฟังก์ชันส่วนขยายในNavGraphที่จะค้นหาปลายทางภายในกราฟgetHierarchy()เป็นฟังก์ชันในNavDestinationที่ใช้เพื่อยืนยันว่าปลายทางที่ระบุอยู่ในลำดับชั้นของปลายทางอื่นหรือไม่ (I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }วิธีการ NavigationUI ที่ใช้
BottomNavigationViewได้รับการอัปเดตให้ใช้คลาสแม่แทน ซึ่งเปิดตัวใน Material1.4.0,NavigationBarViewซึ่งจะช่วยให้ใช้วิธีการเหล่านี้กับNavigationRailViewได้ (Ib0b36, b/182938895)เมื่อขยายองค์ประกอบ
<action>ผ่าน XML แอตทริบิวต์ภาพเคลื่อนไหวจะ ใช้แอตทริบิวต์ที่ดึงมาจากธีมโดยใช้ไวยากรณ์app:enterAnim="?attr/transitionEnter"(I07bc1, b/178291654)
การเปลี่ยนแปลง API
- เลิกใช้งานตัวสร้าง Kotlin DSL ที่ใช้รหัสแล้ว และ ควรแทนที่ด้วยตัวสร้างที่ใช้เส้นทาง (I85b42, b/188816479) (I9f58f, b/188816479)
การแก้ไขข้อบกพร่อง
DialogFragmentNavigatorตอนนี้ใช้NavigatorState.pop()API เพื่อแจ้งNavControllerเมื่อมีการปิดกล่องโต้ตอบโดยการกดปุ่มย้อนกลับของระบบหรือคลิกภายนอกกล่องโต้ตอบ เพื่อให้มั่นใจว่าสถานะของNavControllerจะซิงค์กับสถานะของ Navigator เสมอ (I2ead9)การนำทางจะไม่แสดง
ConcurrentModificationExceptionอีกต่อไปเมื่อ ใช้การจัดการรายการOnDestinationChangedListenersจากการเรียกกลับonDestinationChanged(Ib1707, b/188860458)Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อพยายามสร้างพร็อพเพอร์ตี้ การนำทางใน Kotlin (Id2416, b/188564435)
ตอนนี้มีการใส่คำอธิบายประกอบเมธอด setId ใน NavDestination อย่างถูกต้อง ด้วย
@IdResจึงยอมรับเฉพาะรหัสทรัพยากร (I69b80)ตอนนี้พารามิเตอร์ int ของ
findNodeคือresIdแทนที่จะเป็นresid(I7711d)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Safe-Args ขึ้นอยู่กับปลั๊กอิน Android Gradle 4.2.0 แล้ว ซึ่งหมายความว่าคุณไม่ควรได้รับ
applicationIdTextResourceคำเตือนเกี่ยวกับการใช้ (I6d67b, b/172824579)
เวอร์ชัน 2.4.0-alpha01
18 พฤษภาคม 2021
androidx.navigation:navigation-*:2.4.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เมธอด
currentBackStackEntryAsFlow()ในNavControllerมีFlowที่จะปล่อยออกมาทุกครั้งที่NavBackStackEntryปัจจุบันมีการเปลี่ยนแปลง คุณใช้โฟลว์นี้แทนการจัดการOnDestinationChangedListenerด้วยตนเองได้ (I19c4a, #89, b/163947280)
การย้อนกลับหลายครั้ง
NavController มีหน้าที่จัดการ Back Stack ของปลายทาง เพิ่มปลายทางไปยัง Back Stack เมื่อคุณnavigate()ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack() หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions ที่มีอยู่และการผสานรวมกับรายการ <action> ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและกู้คืนสแต็กย้อนกลับ (b/80029773)
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI ของ onNavDestinationSelected(), BottomNavigationView.setupWithNavController() และ NavigationView.setupWithNavController() บันทึกและกู้คืนสถานะของปลายทางที่ป๊อปอัปโดยอัตโนมัติ ซึ่งช่วยให้รองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางกับ Fragment นี่คือวิธีที่แนะนำในการผสานรวมกับ Back Stack หลายรายการ (Ie07ca)
API พื้นฐานสำหรับการบันทึกและกู้คืนสถานะจะแสดงผ่านแพลตฟอร์มต่างๆ ดังนี้
ใน XML การนำทาง ตอนนี้องค์ประกอบ
<action>สามารถใช้แอตทริบิวต์บูลีนของapp:popUpToSaveStateและapp:restoreStateเพื่อบันทึกสถานะของปลายทางที่แสดงผ่านapp:popUpToและกู้คืนสถานะที่เชื่อมโยงกับปลายทางที่ส่งเป็นapp:destinationได้แล้ว<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />ใน
navOptionsKotlin DSL คุณสามารถเพิ่มพร็อพเพอร์ตี้บูลีนrestoreStateและพร็อพเพอร์ตี้บูลีนsaveStateในpopUpToBuilder ได้ดังนี้// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }ในการสร้างออบเจ็กต์
NavOptionsด้วยตนเองผ่านNavOptions.Builderคุณสามารถใช้setRestoreState()และการโอเวอร์โหลดใหม่เพื่อsetPopUpTo()ที่ใช้พารามิเตอร์saveStateเพิ่มเติมNavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);ตอนนี้การเรียกแบบเป็นโปรแกรมไปยัง
popBackStack()สามารถมีพารามิเตอร์saveStateเพิ่มเติมได้แล้ว
ในทุกกรณี NavController จะบันทึกและกู้คืนสถานะของ NavBackStackEntry แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel ที่กำหนดขอบเขตปลายทางการนำทางด้วย เราได้อัปเดต API ของ Navigator เพื่อให้ Navigator แต่ละรายการรองรับการบันทึกและกู้คืนสถานะของตนเองได้
เราได้อัปเดตทั้ง ComposeNavigator ที่ใช้สำหรับปลายทาง composable ใน Navigation Compose และ FragmentNavigator กับ DynamicFragmentNavigator ที่ใช้สำหรับปลายทาง <fragment> ใน Navigation with Fragments เพื่อให้ใช้ Navigator API ใหม่ รวมถึงรองรับการบันทึกและกู้คืนสถานะ
เส้นทางการนำทาง
เส้นทางคือStringที่ระบุปลายทางแบบไม่ซ้ำกัน แม้ว่าก่อนหน้านี้จะใช้เฉพาะใน Navigation Compose แต่ตอนนี้แนวคิดนี้ได้กลายเป็นส่วนหนึ่งของ Navigation API หลักแล้ว ซึ่งเป็นทางเลือกแทนการใช้รหัสจำนวนเต็มเมื่อสร้างกราฟผ่าน Navigation Kotlin DSL (b/172823546)
ตอนนี้ API ทั้งหมดที่เคยรับเฉพาะรหัสมีโอเวอร์โหลดที่ใช้เส้นทาง String ซึ่งรวมถึง navigate(), popBackStack(), popUpTo() และ getBackStackEntry()
ซึ่งส่งผลต่อ API ดังนี้
- เราได้เลิกใช้งานพร็อพเพอร์ตี้
popUpTokotlin ใน Kotlin DSL แล้วเพื่อpopUpToId(I59c73, b/172823546) - เราได้เลิกใช้งาน
getStartDestination()API แล้วเพื่อหันไปใช้getStartDestinationId()แทน (I0887f, b/172823546)
สำหรับนักพัฒนาแอปที่อัปเกรดจาก Navigation Compose เวอร์ชันก่อนหน้าเป็น Navigation Compose 2.4.0-alpha01 หมายความว่าการนำเข้าต่อไปนี้ในเมธอดส่วนขยายไม่จำเป็นอีกต่อไปและควรนำออก
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
อาร์กิวเมนต์ KEY_ROUTE ถูกแทนที่ด้วยพร็อพเพอร์ตี้ route ใน NavDestination ซึ่งช่วยให้คุณเรียกใช้ navBackStackEntry.destination.route ได้โดยตรง
การเปลี่ยนแปลง API
- อาร์ติแฟกต์การนำทางทั้งหมดได้รับการเขียนใหม่ใน Kotlin ซึ่งช่วยปรับปรุงค่า Null ของคลาสที่ใช้ Generics (เช่น คลาสย่อย
NavType) ฟังก์ชันส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์-ktxได้ย้ายไปอยู่ในอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว-ktxอาร์ติแฟกต์จะยังคงเผยแพร่ต่อไป แต่จะไม่มีข้อมูลใดๆ (b/184292145) NavDeepLinkBuilderตอนนี้รองรับการเพิ่ม ปลายทางที่แตกต่างกันหลายรายการลงใน สแต็กย้อนกลับที่สร้างขึ้นแล้ว (I3ee0d, b/147913689)- เพิ่มฟังก์ชันโรงงานสำหรับ
DynamicNavHostFragment(Icd515, b/175222619) - ตอนนี้เราได้เปิดเผยรหัสที่ไม่ซ้ำกันของ
NavBackStackEntryเป็นส่วนหนึ่งของ API สาธารณะแล้ว (Ie033a) - ตอนนี้ฟิลด์
nameและargumentรวมถึงฟังก์ชันการแยกโครงสร้างของNamedNavArgumentพร้อมให้ใช้งานแล้ว (#174, b/181320559) - เปิดตัวส่วนขยาย
NavBackStackEntry#provideToCompositionLocalsใหม่ที่ให้NavBackStackEntryแก่การเรียบเรียงเพลงที่เกี่ยวข้อง (#175, b/187229439)
Safe Args
ตอนนี้ Safe Args จะสร้าง
fromSavedStateHandle()เมธอดสำหรับคลาสNavArgsแต่ละคลาส (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }อัปเดต Safe Args ให้ขึ้นอยู่กับ KotlinPoet
1.8.0(#172, b/183990444)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การนำทางขึ้นอยู่กับ
วงจรของหน้าเว็บ
2.3.1และตอนนี้จะทำเครื่องหมายsetGraph(),popBackStack(),navigateUp()และnavigate()ซึ่งเป็น เมธอดที่อัปเดตNavBackStackEntryLifecycleเป็น@MainThreadเพื่อให้การนำทางสอดคล้องกับการบังคับใช้ในเธรดหลักที่เปิดตัวในวงจรของหน้าเว็บ2.3.0(b/171125856) - ตอนนี้การแยกวิเคราะห์อาร์กิวเมนต์ Enum จาก Deep Link จะไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่แล้ว ซึ่งจะช่วยให้ Deep Link เช่น
http://www.example.com/redตรงกับ Deep Linkwww.example.com/{color}ได้แม้ว่า Enum จะมีค่าเป็นREDก็ตาม (#152, b/135857840)
ความเข้ากันได้ของ Compose
androidx.navigation:navigation-compose:2.4.0-alpha01ใช้ได้กับ Compose เวอร์ชัน1.0.0-beta07ขึ้นไปเท่านั้น
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายที่ตรงกัน (#153, b/184072811)
- ตอนนี้
NavHostFragmentรองรับ Custom Navigators ที่ใช้@Navigator.Name("dialog")เดียวกัน กับDialogFragmentNavigatorเริ่มต้นแล้ว (Ib1c2c, b/175979140) - ปรับปรุงลักษณะการทำงานของ
NavigatorProvider#addNavigatorเพื่อให้มั่นใจว่าการเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันจะไม่ทำให้เกิดปัญหา (#176, b/187443146)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ simonschiller ที่สร้างการรองรับการสร้าง Safe Args ซึ่งเป็นเมธอด
fromSavedStateHandle()สำหรับคลาสNavArgsแต่ละคลาส (#122, b/136967621) - ขอขอบคุณ Bradleycorn ที่ทำให้การแยกวิเคราะห์อาร์กิวเมนต์ Enum จาก Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#152, b/135857840)
- ขอขอบคุณ osipxd ที่แก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายที่ตรงกันทุกประการ (#153, b/184072811)
- ขอขอบคุณ tatocaster ที่อัปเดต Safe Args ให้ขึ้นอยู่กับ KotlinPoet
1.8.0(#172, b/183990444) - ขอขอบคุณ jossiwolf ที่ทำให้ฟิลด์
nameและargumentรวมถึงฟังก์ชันการแยกโครงสร้างของNamedNavArgumentเป็นแบบสาธารณะ (#174, b/181320559) - ขอขอบคุณ jossiwolf ที่แนะนำส่วนขยาย
NavBackStackEntry#provideToCompositionLocalsใหม่ซึ่งให้NavBackStackEntryแก่ผู้เรียบเรียงเพลงที่เกี่ยวข้อง (#175, b/187229439) - ขอขอบคุณ jossiwolf ที่ปรับปรุงลักษณะการทำงานของ
NavigatorProvider#addNavigatorเพื่อให้มั่นใจว่าการเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันจะไม่ทำให้เกิดปัญหา (#176, b/187443146)
Navigation Compose เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-alpha10
7 เมษายน 2021
androidx.navigation:navigation-compose:1.0.0-alpha10 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
NavHostรับModifierซึ่งส่งต่อไปยัง คอนเทนเนอร์ที่ประกอบกันได้ซึ่งรวมคอมโพสเซเบิลปลายทาง (I85aca, b/175125483)
การแก้ไขข้อบกพร่อง
NavHostจะทำงานได้ แม้ว่าจะไม่พบOnBackPressedDispatcherOwnerเช่นเดียวกับกรณีที่แสดงตัวอย่างNavHost(I7d8b4)- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Navigation
2.3.5แล้ว ซึ่งจะช่วยแก้ไขปัญหาเมื่อใช้BackHandlerภายในปลายทางNavHost(I7e63b, b/182284739)
เวอร์ชัน 1.0.0-alpha09
10 มีนาคม 2021
androidx.navigation:navigation-compose:1.0.0-alpha09 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha09 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลง API
LocalViewModelStoreOwner.currentจะแสดงผลViewModelStoreOwnerที่อนุญาตให้เป็น Null ได้เพื่อระบุได้ดียิ่งขึ้นว่ามีViewModelStoreOwnerในองค์ประกอบปัจจุบันหรือไม่ API ที่ต้องใช้ViewModelStoreOwnerเช่นviewModel()และNavHostจะยังคงแสดงข้อยกเว้น หากไม่ได้ตั้งค่าViewModelStoreOwner(Idf39a)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Navigation 2.3.4 ซึ่งรวมถึงการแก้ไขปัญหาการพยายามตั้งค่าออบเจ็กต์ ViewModelStore เดียวกันหลังจากตั้งค่ากราฟแล้ว (I65c24, b/177825470)
เวอร์ชัน 1.0.0-alpha08
24 กุมภาพันธ์ 2021
androidx.navigation:navigation-compose:1.0.0-alpha08 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
NavHostจะป้อนข้อมูลLocalSavedStateRegistryOwnerCompositionLocal ด้วยNavBackStackEntryของปลายทางนั้น เพื่อให้แน่ใจว่าสถานะใดก็ตามที่บันทึกลงในSavedStateRegistryโดยตรงจะได้รับการบันทึกและกู้คืนพร้อมกับปลายทาง (I435d7, b/179469431)
เวอร์ชัน 1.0.0-alpha07
10 กุมภาพันธ์ 2021
androidx.navigation:navigation-compose:1.0.0-alpha07 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Lifecycle ViewModel Compose 1.0.0-alpha01 เพื่อให้การรองรับ
viewModel()สำหรับปลายทางcomposable(I7a374) NavHostตอนนี้ใช้LocalOnBackPressedDispatcherOwnerใหม่จาก Activity-Compose 1.3.0-alpha01 เพื่อรับOnBackPressedDispatcherที่ตั้งค่าไว้ในNavController(I65b12)
เวอร์ชัน 1.0.0-alpha06
28 มกราคม 2021
androidx.navigation:navigation-compose:1.0.0-alpha06 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
getBackStackEntry(route: String)เมธอดส่วนขยายในNavControllerที่แสดงผลNavBackStackEntryที่เชื่อมโยง (If8931)
เวอร์ชัน 1.0.0-alpha05
13 มกราคม 2021
androidx.navigation:navigation-compose:1.0.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้
อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha10
เวอร์ชัน 1.0.0-alpha04
16 ธันวาคม 2020
androidx.navigation:navigation-compose:1.0.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้
- อัปเดตให้เข้ากันได้กับ Compose
1.0.0-alpha09
เวอร์ชัน 1.0.0-alpha03
2 ธันวาคม 2020
androidx.navigation:navigation-compose:1.0.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
popBackStack()และnavigateUp()ไม่ทำงานหลังจากเปลี่ยนการกำหนดค่าหรือกระบวนการสิ้นสุดและสร้างใหม่ (Icea47, b/173281473) - ตอนนี้การไปยังกราฟที่ซ้อนกันภายใน NavHost ทำงานได้อย่างถูกต้องแล้ว (I0948d, b/173647694)
เวอร์ชัน 1.0.0-alpha02
11 พฤศจิกายน 2020
androidx.navigation:navigation-compose:1.0.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Navigation Compose รองรับ NavOptions สำหรับการใช้การดำเนินการ popUpTo และ launchSingleTop แล้ว (If96c3, b/171468994)
- เพิ่มฟังก์ชันการนำทางที่ใช้เส้นทางแทน รหัส ซึ่งช่วยให้คุณสร้างกราฟที่ซ้อนกันใน Navigation Compose DSL ได้ (I1661d)
- ตอนนี้ startDestination จะอยู่ก่อนเส้นทางในรายการพารามิเตอร์สำหรับ NavHost (Ie620e)
- ตอนนี้คุณสร้างกราฟได้โดยใช้เส้นทางเป็นจุดเริ่มต้น ปลายทางภายนอก Composable ของ NavHost (Iceb75)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
android.navigation:navigation-compose:1.0.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ navigation-compose ช่วยให้ผสานรวมระหว่าง Navigation Component กับ Jetpack Compose ได้ โดยจะใช้ฟังก์ชัน @Composable เป็นปลายทางในแอปพลิเคชัน
การเปิดตัวครั้งแรกนี้มีฟีเจอร์ต่อไปนี้
NavHostComposable ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL ได้- การกำหนดขอบเขตของวงจร
ViewModelและสถานะที่จดจำได้ที่ระดับปลายทาง - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
- รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการส่งผลลัพธ์กลับไปยังปลายทางก่อนหน้า
- เขียนตัวช่วยที่เฉพาะเจาะจงใน
rememberNavController()และcurrentBackStackEntryAsState()เพื่ออนุญาตสถานะการโฮสต์และเชื่อมต่อNavControllerกับ Composable นอกNavHost(เช่น แถบนำทางด้านล่าง)
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการนำทาง Compose
เวอร์ชัน 2.3.5
เวอร์ชัน 2.3.5
7 เมษายน 2021
androidx.navigation:navigation-*:2.3.5 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.5 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เมื่อไปยังส่วนต่างๆ โดยใช้
NavDeepLinkRequestหรือUriตอนนี้คุณสามารถ เข้าถึงUri, การดำเนินการ และประเภท MIME ในปลายทางที่ได้โดย รับ Intent จากอาร์กิวเมนต์ผ่านKEY_DEEP_LINK_INTENTซึ่งเป็นการจำลองฟังก์ชันการทำงานที่มีอยู่แล้วสำหรับการลิงก์โดยตรงภายนอก (I975c3, b/181521877)
การแก้ไขข้อบกพร่อง
OnBackPressedCallbacksที่เพิ่มลงใน Dispatcher โดยมีNavBackStackEntryเป็น LifecycleOwner จะสกัดกั้นการกลับ หลังจากวงจรของกิจกรรมเป็นSTOPPEDแล้วSTARTEDได้อย่างถูกต้อง (Iff94f, b/182284739)- ตอนนี้การแยกวิเคราะห์โดเมน Deep Link จะไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ เพื่อให้มั่นใจว่า
www.example.comจะตรงกับทั้งwww.example.comและwww.Example.comโปรดทราบว่าชื่อพารามิเตอร์การค้นหายังคงคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#144, b/153829033) - แก้ไขข้อบกพร่อง
NullPointerExceptionที่อาจเกิดขึ้นเมื่อปลายทางมีอาร์กิวเมนต์เริ่มต้นหลายรายการที่ต้องระบุค่า และคุณไปยังปลายทางนั้นขณะที่ลบล้างเฉพาะชุดย่อยของอาร์กิวเมนต์เหล่านั้น (aosp/1644827)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ปลั๊กอิน Gradle ของ Navigation Safe Args ขึ้นอยู่กับปลั๊กอิน Kotlin Gradle 1.4.31 แล้ว (aosp/1661058, b/181156413)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ
bentrengroveสำหรับคำขอ Pull ที่ทำให้การแยกวิเคราะห์โดเมน Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#144, b/153829033)
เวอร์ชัน 2.3.4
เวอร์ชัน 2.3.4
10 มีนาคม 2021
androidx.navigation:navigation-*:2.3.4 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.4 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- ตอนนี้ระบบจะแยกวิเคราะห์อาร์กิวเมนต์
ReferenceTypeได้อย่างถูกต้องเมื่อส่งเป็นส่วนหนึ่งของ URI ของ Deep Link ซึ่งรองรับทั้งค่าจำนวนเต็มดิบและค่าฐานสิบหกที่นำหน้าด้วย0x(#127, b/179166693) - ตอนนี้
android:defaultValueสำหรับอาร์กิวเมนต์ที่มีapp:argType="float"รองรับค่าเริ่มต้นที่เป็นจำนวนเต็มแล้ว ซึ่งช่วยให้คุณใช้android:defaultValue="0"ได้โดยไม่ต้องใช้0.0(#117, b/173766247)
การแก้ไขข้อบกพร่อง
- แก้ไขความคืบหน้าในการติดตั้งที่ค้างอยู่เมื่อใช้การรองรับฟีเจอร์แบบไดนามิกของ Navigation (Ib27a7, b/169636207)
- การเรียก
setViewModelStoreหรือsetLifecycleOwnerด้วยออบเจ็กต์เดียวกันที่ตั้งค่าไว้แล้วจะไม่มีผล (Idf491, b/177825470) - ตอนนี้ Safe-Args จะเพิ่มคำอธิบายประกอบ suppress ในเมธอดที่เหมาะสม เมื่อใช้ Java (I8fbc5, b/179463137)
การมีส่วนร่วมภายนอก
- ขอขอบคุณ
JvmNameสำหรับคำขอ Pull เพื่อให้มั่นใจว่าตอนนี้ระบบจะแยกวิเคราะห์อาร์กิวเมนต์ReferenceTypeได้อย่างถูกต้องเมื่อส่งเป็นส่วนหนึ่งของ URI ของ Deep Link (#127, b/179166693) - ขอขอบคุณ
tatocasterสำหรับคำขอ Pull เพื่ออนุญาตให้defaultValueสำหรับอาร์กิวเมนต์ที่มีapp:argType=”float”รองรับค่าเริ่มต้นที่เป็นจำนวนเต็มแล้ว (#117, b/173766247)
เวอร์ชัน 2.3.3
เวอร์ชัน 2.3.3
27 มกราคม 2021
androidx.navigation:navigation-*:2.3.3 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ไม่มีข้อขัดข้องอีกต่อไปเมื่อป๊อปอัป
NavBackStackEntryก่อนที่จะย้ายLifecycleไปยังCREATED(Ie3ba3) - แก้ไขการถดถอยที่เกิดจาก b/171364502 ซึ่งการไปยังกิจกรรมที่มีค่าทรัพยากรภาพเคลื่อนไหวเป็น
0ทำให้เกิดResourceNotFoundException(I7aedb, b/176819931)
เวอร์ชัน 2.3.2
เวอร์ชัน 2.3.2
2 ธันวาคม 2020
androidx.navigation:navigation-*:2.3.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.2 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน
NavigationUIซึ่งการใช้ปลายทาง<activity>กับonNavDestinationSelectedจะนำไปยังกิจกรรมไม่สำเร็จ (I22e34, b/171364502) - แก้ไขปัญหาที่
navigation-dynamic-features-fragmentทำให้มีการไปยังปลายทางที่ติดตั้งใหม่หลายครั้ง (aosp/1486056, b/169636207) - แก้ไขปัญหาที่ระบบจะไม่ส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์
OnDestinationChangedListenerเมื่อใช้launchSingleTop(I2c5cb) - แก้ไขปัญหาที่การไปยังกราฟการนำทางที่ซ้อนกันจะไม่สร้างอินสแตนซ์กราฟใหม่ในสแต็กย้อนกลับ (Ifc831)
- แก้ไขปัญหาที่การใช้
navigate()กับpopUpToที่นำปลายทางสุดท้ายในกราฟการนำทางออกจะไม่ทำลายและนำกราฟการนำทางออกจากสแต็กย้อนกลับทันที (I910a3) - ตอนนี้ Navigation SafeArgs ใช้ KotlinPoet เวอร์ชัน 1.7.2 ซึ่งเพิ่มการรองรับโหมด API ที่ชัดเจนของ Kotlin (I918b5)
NavHostFragment.findNavController(Fragment)ตอนนี้ยังตรวจสอบมุมมองการตกแต่งรูทของ DialogFragment นอกเหนือจากการตรวจสอบลำดับชั้นของ Fragment และลำดับชั้นของมุมมองของ Fragment ที่มีอยู่ด้วย ซึ่งจะช่วยให้คุณทดสอบ DialogFragment ที่ใช้ Navigation ด้วยFragmentScenarioและNavigation.setViewNavController()ได้ (I69e0d)
เวอร์ชัน 2.3.1
เวอร์ชัน 2.3.1
14 ตุลาคม 2020
androidx.navigation:navigation-*:2.3.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.1 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ระบบได้เพิ่มทรัพยากร Animator เริ่มต้นลงใน UI การนำทางแล้ว และขอแนะนำให้ใช้ทรัพยากรดังกล่าวแทนทรัพยากรภาพเคลื่อนไหวเริ่มต้น (b/167430145)
- ตอนนี้ NavOptions จะลบล้างเมธอดแฮชโค้ดและเมธอดเท่ากับ (b/161586466)
- ตอนนี้การนำทางมีปลายทางปัจจุบันใน IllegalArgumentException "ไม่มีปลายทางที่มีรหัส" ซึ่งจะช่วยปรับปรุงประสบการณ์การแก้ไขข้อบกพร่องของนักพัฒนาแอป (b/168311416)
การแก้ไขข้อบกพร่อง
- Safe Args จะไม่ตัดบรรทัดที่ส่งคืนอีกต่อไป แม้ว่าชื่อคลาสอาร์กิวเมนต์ที่สร้างขึ้นจะยาวกว่า 100 อักขระก็ตาม (b/168584987)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้
navigation-uiขึ้นอยู่กับ DrawerLayout 1.1.1 เพื่อให้มั่นใจว่าNavigationUIสามารถเปิดลิ้นชักได้ แม้ว่าจะใช้LOCK_MODE_LOCKED_CLOSEDหรือLOCK_MODE_LOCKED_OPENก็ตาม (b/162253907) - ตอนนี้ Safe Args ขึ้นอยู่กับ KotlinPoet 1.6.0 (aosp/1435911)
- ตอนนี้ Safe Args ขึ้นอยู่กับ AGP 4.0.1 (aosp/1442337)
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
24 มิถุนายน 2020
androidx.navigation:navigation-*:2.3.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
- การผสานรวมโมดูลฟีเจอร์: อาร์ติแฟกต์
navigation-dynamic-features-runtimeและnavigation-dynamic-features-fragmentช่วยให้คุณไปยังปลายทางที่กำหนดไว้ในโมดูลฟีเจอร์ได้ โดยจะจัดการการติดตั้งโมดูลฟีเจอร์โดยอัตโนมัติตามต้องการ ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ ด้วยโมดูลฟีเจอร์ - การทดสอบการนำทาง: อาร์ติแฟกต์
navigation-testingมีTestNavHostControllerที่ช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กย้อนกลับหลังจากการดำเนินการนำทางได้ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบการนำทาง - การแสดงผลลัพธ์:
NavBackStackEntryที่เชื่อมโยงกับแต่ละปลายทางใน Back Stack ของการนำทางจะช่วยให้คุณเข้าถึงSavedStateHandleที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการ Back Stack ที่เฉพาะเจาะจง ดูข้อมูลเพิ่มเติมได้ที่การแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า NavigationUIรองรับOpenable: การใช้งานDrawerLayoutทั้งหมดในNavigationUIถูกแทนที่ด้วยอินเทอร์เฟซOpenableที่เป็นแบบทั่วไปมากขึ้นซึ่งเพิ่มเข้ามาใน CustomView1.1.0และใช้งานโดยDrawerLayoutใน DrawerLayout1.1.0- การรองรับการดำเนินการและประเภท MIME ใน Deep Link: เราได้ขยายการรองรับ Deep Link ให้รองรับ
app:actionและapp:mimeTypeนอกเหนือจากapp:uriที่มีอยู่ก่อนหน้านี้NavControllerรองรับการไปยังส่วนต่างๆ ตามการผสมผสานของช่องเหล่านี้ผ่านคลาสNavDeepLinkRequestใหม่แล้ว ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ โดยใช้ NavDeepLinkRequest
ปัญหาที่ทราบ
- Manifest Merger ยังไม่รองรับการดำเนินการ Deep Link และประเภท MIME จนกว่าจะดำเนินการเสร็จสมบูรณ์
<intent-filter>ที่สร้างจากองค์ประกอบ<nav-graph>ในไฟล์ Manifest จะไม่มี MIME ประเภทในองค์ประกอบ<data>หรือ<action>ที่กำหนดเอง คุณต้องเพิ่ม<intent-filter>ที่เหมาะสมลงในไฟล์ Manifest ด้วยตนเอง
เวอร์ชัน 2.3.0-rc01
10 มิถุนายน 2020
androidx.navigation:navigation-*:2.3.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerExceptionเมื่อแทนที่อินสแตนซ์ของปลายทางที่ไม่มีอาร์กิวเมนต์ด้วยอินสแตนซ์อื่นที่มีอาร์กิวเมนต์ด้วยsingleTop(b/158006669) - ตอนนี้
destination is unknownข้อยกเว้นทั้งหมดที่NavControllerส่งมาจะมีข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติมเพื่อช่วยระบุสถานะของNavController(b/157764916)
เวอร์ชัน 2.3.0-beta01
20 พฤษภาคม 2020
androidx.navigation:navigation-*:2.3.0-beta01 ได้รับการเผยแพร่ เวอร์ชัน 2.3.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
LifecycleของNavBackStackEntryจะไม่อัปเดตอย่างถูกต้องหลังจากกระบวนการสิ้นสุด (b/155218371) - ตอนนี้ระบบจะส่งอินสแตนซ์
OnDestinationChangedListenerที่ลงทะเบียนก่อนเรียกใช้setGraph()ไปยังปลายทางที่กู้คืนอย่างถูกต้องหลังจากกระบวนการสิ้นสุด (b/155218371) - เมื่อใช้
singleTopตอนนี้NavBackStackEntryจะอัปเดตอาร์กิวเมนต์อย่างถูกต้องแล้ว และระบบจะส่งอาร์กิวเมนต์ที่อัปเดตไปยังอินสแตนซ์OnDestinationChangeListenerทั้งหมด (b/156545508)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้
NavigationUIอาร์ติแฟกต์ขึ้นอยู่กับ CustomView1.1.0-rc01และ DrawerLayout1.1.0-rc01แล้ว (aosp/1309696)
เวอร์ชัน 2.3.0-alpha06
29 เมษายน 2020
androidx.navigation:navigation-*:2.3.0-alpha06 ได้รับการเผยแพร่แล้ว (เวอร์ชัน 2.3.0-alpha06 มีคอมมิตเหล่านี้)
ฟีเจอร์ใหม่
- เราได้ขยายการลิงก์ในรายละเอียดเพื่อรองรับ
app:actionและapp:mimeTypeนอกเหนือจากapp:uriที่มีอยู่ก่อนหน้านี้ ตอนนี้ NavController รองรับการไปยังส่วนต่างๆ โดยใช้ฟิลด์เหล่านี้ร่วมกันผ่านคลาสNavDeepLinkRequestใหม่แล้ว (b/136573074, b/135334841)
การเปลี่ยนแปลง API
- ขยายการรองรับ Kotlin DSL สำหรับปลายทางการนำทางแบบไดนามิกอย่างมาก (b/148969800)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะเพิกเฉยต่อ Intent ของ Deep Link เมื่อใช้ปลายทางการเริ่มต้นที่ซ้อนกัน (b/154532067)
เวอร์ชัน 2.3.0-alpha05
15 เมษายน 2020
androidx.navigation:navigation-*:2.3.0-alpha05 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha05 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- สำหรับกราฟแบบไดนามิกรวมที่ใช้
<include-dynamic>คุณไม่จำเป็นต้องระบุapp:graphPackageอีกต่อไป และระบบจะใช้ค่าเริ่มต้นโดยการเพิ่มคำต่อท้ายmoduleNameไปยังapplicationIdหลังจุด หากต้องการปรับแต่งgraphPackageตอนนี้ระบบรองรับตัวยึดตำแหน่ง${applicationId}แล้ว (b/152696768) - ตอนนี้ Kotlin DSL ของ Navigation Graph จะแสดง
defaultArgumentsMapสำหรับการดำเนินการ ซึ่งเป็นการจำลองความสามารถในการตั้งค่าเริ่มต้นในองค์ประกอบ<action>ในไฟล์ XML ของการนำทาง (b/150345605)
การแก้ไขข้อบกพร่อง
- จาก Navigation 2.2.2: แก้ไข
IllegalStateExceptionเมื่อทำ Deep Link ไปยังปลายทางเริ่มต้นของกราฟเมื่อคุณมีอินสแตนซ์NavHostFragmentหลายรายการในกิจกรรม (b/147378752)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Fragment
1.2.4(aosp/1277325) - ตอนนี้การนำทางแบบไดนามิกจะขึ้นอยู่กับ Play Core
1.7.2(aosp/1282257)
เวอร์ชัน 2.3.0-alpha04
18 มีนาคม 2020
androidx.navigation:navigation-*:2.3.0-alpha04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha04 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับกิจกรรมโมดูลฟีเจอร์และปลายทางของ Fragment ใน Kotlin DSL ของการนำทาง (b/148969800)
การเปลี่ยนแปลง API
DynamicExtrasคลาสไม่ได้ใช้รูปแบบ Builder อีกต่อไป และตอนนี้สามารถสร้างได้โดยตรง (aosp/1253671)- ตอนนี้
DynamicActivityNavigatorจะใช้Contextในเครื่องมือสร้างแทนActivity(aosp/1250252)
การแก้ไขข้อบกพร่อง
NavigationUIจะไม่ละเว้นป้ายกำกับที่ว่างเปล่า (เช่น ปลายทางที่มีandroid:label=””) อีกต่อไป และตอนนี้จะตั้งค่าชื่อเป็นสตริงว่างอย่างถูกต้อง (b/148679860)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้อาร์ติแฟกต์ฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับ Play Core
1.6.5(b/149556401)
เวอร์ชัน 2.3.0-alpha03
4 มีนาคม 2020
androidx.navigation:navigation-*:2.3.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
AppBarConfigurationตอนนี้ใช้Openableอินเทอร์เฟซที่เปิดตัวใน CustomView1.1.0-alpha02(ซึ่งDrawerLayoutใช้เป็น DrawerLayout1.1.0-alpha04) แทนที่จะใช้คลาสDrawerLayoutที่เฉพาะเจาะจง ซึ่งช่วยให้คุณใช้การติดตั้งใช้งานที่กำหนดเองของOpenableกับNavigationUIได้ (b/129030452)
การแก้ไขข้อบกพร่อง
navigation-common-ktxกฎ ProGuard จะเก็บเฉพาะNavArgsคลาสที่ใช้เท่านั้น ไม่ใช่NavArgsอินสแตนซ์ทั้งหมด (b/150213558)
การเปลี่ยนแปลงการขึ้นต่อกัน
- การนำทางได้เปลี่ยนกลับไปใช้การอ้างอิงใน Core
1.2.0และตอนนี้ใช้ Core1.1.0เพื่อหลีกเลี่ยงการบังคับให้นักพัฒนาแอปย้ายไปใช้การอ้างอิงที่ใหม่กว่าเมื่อการนำทางไม่ได้ขึ้นอยู่กับ API ใหม่ใน Core1.2.0
เวอร์ชัน 2.3.0-alpha02
19 กุมภาพันธ์ 2020
androidx.navigation:navigation-*:2.3.0-alpha02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavBackStackEntryช่วยให้คุณเข้าถึงSavedStateHandleที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการใน Back Stack ที่เฉพาะเจาะจงได้ ดูตัวอย่างกรณีการใช้งานได้ที่การแสดงผลลัพธ์ (b/79672220)
การเปลี่ยนแปลง API
- เราได้เพิ่มวิธีการที่สะดวกในการ
getCurrentBackStackEntry()และgetPreviousBackStackEntry()เพื่อให้ดึงข้อมูลNavBackStackEntryสำหรับปลายทางปัจจุบันและก่อนหน้าได้ง่ายขึ้น (b/79672220)
การแก้ไขข้อบกพร่อง
navigateUp()จะส่งอาร์กิวเมนต์ของปลายทางปัจจุบันและKEY_DEEP_LINK_INTENTไปยังปลายทางก่อนหน้าเมื่อเปิดแอปในสแต็กงานของคุณเอง (b/147456890)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Core
1.2.0
เวอร์ชัน 2.3.0-alpha01
5 กุมภาพันธ์ 2020
androidx.navigation:navigation-*:2.3.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อาร์ติแฟกต์
navigation-testingใหม่มีคลาสTestNavHostControllerคลาสนี้เป็นทางเลือกแทนการใช้ MockNavControllerเมื่อทดสอบการนำทาง ซึ่งช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยัน Back Stack หลังจากดำเนินการนำทางได้ (b/140884273) navigation-dynamic-features-fragmentใหม่ (และการอ้างอิงแบบทรานซิทีฟnavigation-dynamic-features-runtime) ช่วยให้คุณรวมปลายทางหรือกราฟการนำทางทั้งหมด (ผ่าน<include-dynamic>) จากโมดูลฟีเจอร์ได้ ซึ่งจะช่วยให้ติดตั้งโมดูลฟีเจอร์แบบออนดีมานด์ได้อย่างราบรื่นเมื่อไปยังปลายทางเหล่านั้น ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ ด้วยโมดูลฟีเจอร์ (b/132170186)
แก้ไขข้อบกพร่อง
- จากการนำทาง
2.2.1: ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้องแทนที่จะต่อท้ายองค์ประกอบ{argument}หรือไม่ตรงกับ Deep Link (b/147447512) - จากการนำทาง
2.2.1: เราได้อัปเดตnavigation-uiกฎ ProGuard สำหรับDrawerArrowDrawableเพื่อให้มั่นใจว่าไม่จำเป็นต้องใช้android.enableJetifier=true(b/147610424) - จากการนำทาง
2.2.1: ตอนนี้โมดูลnavigation-common-ktxมีชื่อแพ็กเกจ Manifest ที่ไม่ซ้ำกันแล้วแทนที่จะใช้ชื่อแพ็กเกจ Manifest เดียวกันกับnavigation-runtime-ktx(aosp/1141947)
การอัปเดตการขึ้นต่อกัน
- จาก Navigation
2.2.1: ตอนนี้ Navigation2.2.1ขึ้นอยู่กับ Lifecycle ViewModel SavedState2.2.0และ Fragment1.2.1แล้ว
เวอร์ชัน 2.2.2
เวอร์ชัน 2.2.2
15 เมษายน 2020
androidx.navigation:navigation-*:2.2.2 ได้รับการเผยแพร่ เวอร์ชัน 2.2.2 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไข
IllegalStateExceptionเมื่อ Deep Link ไปยังปลายทางเริ่มต้นของกราฟเมื่อคุณมีอินสแตนซ์NavHostFragmentหลายรายการในกิจกรรม (b/147378752) NavigationUIจะไม่ละเว้นป้ายกำกับที่ว่างเปล่า (เช่น ปลายทางที่มีandroid:label=””) อีกต่อไป และตอนนี้จะตั้งค่าชื่อเป็นสตริงว่างอย่างถูกต้อง ฟีเจอร์นี้เปิดตัวไปแล้วใน Navigation 2.3.0-alpha04 (b/148679860)navigation-common-ktxกฎ ProGuard จะเก็บเฉพาะNavArgsคลาสที่ใช้เท่านั้น ไม่ใช่NavArgsอินสแตนซ์ทั้งหมด ฟีเจอร์นี้เปิดตัวไปแล้วใน Navigation 2.3.0-alpha03 (b/150213558
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Fragment
1.2.4(aosp/1277325)
เวอร์ชัน 2.2.1
เวอร์ชัน 2.2.1
5 กุมภาพันธ์ 2020
androidx.navigation:navigation-*:2.2.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้องแทนที่จะต่อท้ายองค์ประกอบ
{argument}หรือไม่ตรงกับ Deep Link (b/147447512) - เราได้อัปเดต
navigation-uiกฎ ProGuard สำหรับDrawerArrowDrawableเพื่อให้มั่นใจว่าไม่จำเป็นต้องใช้android.enableJetifier=true(b/147610424) - ตอนนี้โมดูล
navigation-common-ktxมีชื่อแพ็กเกจในไฟล์ Manifest ที่ไม่ซ้ำกันแล้ว แทนที่จะใช้ชื่อแพ็กเกจในไฟล์ Manifest เดียวกันกับnavigation-runtime-ktx(aosp/1141947)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทาง
2.2.1ขึ้นอยู่กับ Lifecycle ViewModel SavedState2.2.0และ Fragment1.2.1
เวอร์ชัน 2.2.0
เวอร์ชัน 2.2.0
22 มกราคม 2020
androidx.navigation:navigation-*:2.2.0 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.1.0
- NavBackStackEntry: ตอนนี้คุณเรียกใช้
NavController.getBackStackEntry()ได้แล้วโดยส่งรหัสของปลายทางหรือกราฟการนำทางใน Back StackNavBackStackEntryที่ส่งคืนจะให้LifecycleOwner,ViewModelStoreOwner(เหมือนกับที่NavController.getViewModelStoreOwner()ส่งคืน) และSavedStateRegistryOwnerที่ขับเคลื่อนด้วยการนำทาง นอกเหนือจากการระบุอาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น - การผสานรวม Lifecycle ViewModel SavedState: ตอนนี้
SavedStateViewModelFactoryเป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้by navGraphViewModels()หรือตัวสร้างViewModelProviderที่มีViewModelStoreOwnerซึ่งNavController.getBackStackEntry()หรือNavController.getViewModelStoreOwner()ส่งคืน - การรองรับพารามิเตอร์การค้นหาสำหรับ Deep Link: ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่จัดลำดับใหม่แล้ว และอาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็น Null ได้จะถือเป็นตัวเลือกเมื่อจับคู่ Deep Link
- การรองรับภาพเคลื่อนไหวที่ดียิ่งขึ้น:
NavHostFragmentตอนนี้ใช้FragmentContainerViewจาก Fragment 1.2.0 แล้ว ซึ่งจะช่วยแก้ไขปัญหาการจัดลำดับ Z ของภาพเคลื่อนไหวและการส่งการแทรกในหน้าต่างไปยัง Fragment
เวอร์ชัน 2.2.0-rc04
18 ธันวาคม 2019
androidx.navigation:navigation-*:2.2.0-rc04 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0-rc04 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ปรับภาพเคลื่อนไหวการเลือนเริ่มต้นที่ใช้โดย
navigation-uiให้ตรงกับภาพเคลื่อนไหวการเลือนที่ปรับใน Fragment1.2.0-rc04(b/145769814)
เวอร์ชัน 2.2.0-rc03
4 ธันวาคม 2019
androidx.navigation:navigation-*:2.2.0-rc03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0-rc03 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการแยกวิเคราะห์ Deep Link เมื่อใช้พารามิเตอร์การค้นหาและอาร์กิวเมนต์เป็นส่วนสุดท้ายของเส้นทาง ซึ่งทำให้ไม่สามารถแยกวิเคราะห์อาร์กิวเมนต์เส้นทางสุดท้ายได้มากกว่า 1 อักขระ (b/144554689)
- แก้ไขปัญหาเกี่ยวกับการแยกวิเคราะห์ Deep Link ซึ่งพารามิเตอร์ที่ไม่บังคับจะได้รับ
"@null"แทนnull(b/141613546) NavHostFragmentจะกู้คืนกราฟอย่างถูกต้องหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อใช้กับFragmentContainerView(b/143752103)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ Lifecycle
2.2.0-rc03, Lifecycle ViewModel SavedState1.0.0-rc03, Activity1.1.0-rc03และ Fragment1.2.0-rc03ตามความเหมาะสม
เวอร์ชัน 2.2.0-rc02
7 พฤศจิกายน 2019
androidx.navigation:navigation-*:2.2.0-rc02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0-rc02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้การนำทางขึ้นอยู่กับ androidx.lifecycle
2.2.0-rc02
เวอร์ชัน 2.2.0-rc01
23 ตุลาคม 2019
androidx.navigation:navigation-*:2.2.0-rc01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงใดๆ ตั้งแต่ 2.2.0-beta01 เวอร์ชัน 2.2.0-rc01 มีคอมมิตเหล่านี้
เวอร์ชัน 2.2.0-beta01
9 ตุลาคม 2019
androidx.navigation:navigation-*:2.2.0-beta01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0-beta01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
NavDestinationและคลาสย่อยของคลาสนี้จะลบล้างtoString()เพื่อให้ข้อมูลที่เป็นประโยชน์มากขึ้นเมื่อแก้ไขข้อบกพร่อง (b/141264986)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะไม่สนใจพารามิเตอร์การค้นหาเพิ่มเติมเมื่อจับคู่ Deep Link แทนที่จะทำให้การจับคู่ล้มเหลว (b/141482822)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะไม่สนใจอาร์กิวเมนต์ในเส้นทางของ Deep Link หากมีการระบุพารามิเตอร์การค้นหาด้วย (b/141505755)
- ตอนนี้
navArgs()ส่วนขยาย Kotlin ในActivityมีข้อความแสดงข้อผิดพลาดที่ดีขึ้นเมื่อไม่มีส่วนเสริม (b/141408999) - ตอนนี้อาร์กิวเมนต์ที่ปลอดภัยซึ่งสร้างคลาส
DirectionsJava มีค่าเริ่มต้นแล้ว (b/141099045) - ตอนนี้อาร์กิวเมนต์ที่ปลอดภัยซึ่งสร้างคลาส
ArgsJava มีค่าเริ่มต้นแล้ว (b/140123727) - เมื่อใช้
ToolbarNavigationUIจะไม่แสดงภาพเคลื่อนไหวการเปลี่ยนแปลงข้อความเมื่อย้ายระหว่างปลายทางระดับบนสุด 2 แห่ง (b/140848160)
เวอร์ชัน 2.2.0-alpha03
18 กันยายน 2019
androidx.navigation:navigation-*:2.2.0-alpha03 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- การโทร
setViewModelStore()หลังจากโทรsetGraphจะส่งผลให้เกิดIllegalStateExceptionNavHostควรกำหนดค่านี้เสมอเป็นส่วนหนึ่งของการตั้งค่าเริ่มต้นเพื่อให้มั่นใจว่าอินสแตนซ์NavBackStackEntryทั้งหมดมีพื้นที่เก็บข้อมูลที่สอดคล้องกันสำหรับอินสแตนซ์ViewModel(aosp/1111821)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหา
ConcurrentModificationExceptionเมื่อใช้อินสแตนซ์ViewModelที่ต่อกับอินสแตนซ์ViewModelStoreที่มีขอบเขตของกราฟการนำทางที่แตกต่างกันหลายรายการ (aosp/1112257)
เวอร์ชัน 2.2.0-alpha02
5 กันยายน 2019
androidx.navigation:navigation-*:2.2.0-alpha02 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่จัดเรียงใหม่แล้ว และอาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็น Null ได้จะถือเป็นอาร์กิวเมนต์ที่ไม่บังคับเมื่อจับคู่ Deep Link (b/133273839)
- ตอนนี้คุณสามารถเรียกใช้
NavController.getBackStackEntry()ได้แล้วโดยส่งรหัสของปลายทางหรือกราฟการนำทางในสแต็กย้อนกลับNavBackStackEntryที่ส่งคืนจะให้LifecycleOwner,ViewModelStoreOwner(เหมือนกับที่NavController.getViewModelStoreOwner()ส่งคืน) และSavedStateRegistryOwnerที่ขับเคลื่อนด้วยการนำทาง นอกเหนือจากการระบุอาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น (aosp/1101691, aosp/1101710)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การเพิ่ม
NavHostFragmentไปยังViewPager2ไม่สำเร็จและแสดงข้อผิดพลาดIllegalArgumentException(b/133640271) NavInflaterจะไม่เรียกใช้getResourceName()โดยไม่จำเป็น ซึ่งจะช่วยเร่งเวลาในการขยายขนาดได้สูงสุด 40% (b/139213740)
เวอร์ชัน 2.2.0-alpha01
7 สิงหาคม 2019
androidx.navigation:navigation-*:2.2.0-alpha01 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้
SavedStateViewModelFactoryเป็นค่าเริ่มต้นที่ใช้เมื่อใช้by navGraphViewModels()หรือเครื่องมือสร้างViewModelProviderที่มีViewModelStoreOwnerซึ่งNavController.getViewModelStoreOwner()ส่งคืน (b/135716331)
การเปลี่ยนแปลง API
- จาก Navigation
2.1.0-rc01: เราได้นำgetViewModelStore()API ที่เลิกใช้งานแล้วในNavControllerซึ่งเปิดตัวใน2.1.0-alpha02ออกแล้ว (aosp/1091021)
แก้ไขข้อบกพร่อง
NavHostFragmentตอนนี้ใช้FragmentContainerViewแล้ว ซึ่งจะแก้ไขปัญหาการจัดลำดับ Z ของภาพเคลื่อนไหวและการส่งการแทรกหน้าต่างไปยัง Fragment (b/137310379)
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
5 กันยายน 2019
androidx.navigation:navigation-*:2.1.0 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.0.0
- การกำหนดขอบเขต ViewModel ให้กับกราฟการนำทาง: ตอนนี้คุณสามารถสร้าง ViewModel ที่กำหนดขอบเขตที่ระดับกราฟการนำทางได้โดยใช้พร็อพเพอร์ตี้
by navGraphViewModels()delegate สำหรับผู้ใช้ Kotlin ที่ใช้ไลบรารี-ktxหรือโดยใช้ APIgetViewModelStoreOwner()ที่เพิ่มลงในNavControllerดูข้อมูลเพิ่มเติมได้ที่แชร์ข้อมูลที่เกี่ยวข้องกับ UI ระหว่างปลายทาง - ปลายทางของกล่องโต้ตอบ: ตอนนี้คุณสามารถสร้าง
<dialog>ปลายทางที่จะแสดงDialogFragmentเมื่อคุณnavigateไปยังปลายทางเหล่านั้นNavHostFragmentรองรับปลายทางของกล่องโต้ตอบโดยค่าเริ่มต้น ดูข้อมูลเพิ่มเติมได้ที่สร้างปลายทางจาก DialogFragment - การนำทางด้วย URI: ตอนนี้คุณ
navigateได้โดยใช้Uriซึ่งใช้<deepLink>ที่คุณเพิ่มลงในปลายทางเพื่อนำทางไปยังปลายทางนั้น ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ โดยใช้ Uri - NavHostController: ระบบได้ย้าย API ที่ใช้เพื่อสร้าง
NavHostที่กำหนดเองโดยเฉพาะไปยังNavHostControllerเพื่อให้การติดตั้งใช้งานเชื่อมต่อNavControllerกับLifecycleOwner,OnBackPressedDispatcherและViewModelStoreที่โฮสต์ได้
เวอร์ชัน 2.1.0-rc01
7 สิงหาคม 2019
androidx.navigation:navigation-*:2.1.0-rc01 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- ระบบได้นำ
getViewModelStore()API ที่เลิกใช้งานแล้วในNavControllerซึ่งเปิดตัวใน2.1.0-alpha02ออกแล้ว (aosp/1091021)
เวอร์ชัน 2.1.0-beta02
19 กรกฎาคม 2019
androidx.navigation:*:2.1.0-beta02 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- นำการขึ้นต่อกันของ Jacoco ที่ไม่ได้ตั้งใจออก ซึ่งมีการนำมาใช้ใน
2.1.0-beta01(b/137782950)
เวอร์ชัน 2.1.0-beta01
17 กรกฎาคม 2019
androidx.navigation:*:2.1.0-beta01 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
NavigationUIจะเคลื่อนไหวการนำปุ่มขึ้นออกเมื่อใช้setupWithNavController()กับToolbarหรือCollapsingToolbarLayout(b/131403621)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการกำหนดเวลาเมื่อใช้ NavHostFragment หลายรายการที่มีคอนเทนเนอร์เดียวกันกับ
findNavController()(b/136021571)
เวอร์ชัน 2.1.0-alpha06
2 กรกฎาคม 2019
androidx.navigation:*:2.1.0-alpha06 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้เราได้ย้ายแอตทริบิวต์
app:navGraphที่ใช้โดย NavHostFragment ไปยังอาร์ติแฟกต์navigation-runtimeแล้ว Navigator ที่กำหนดเองซึ่งเพิ่มผ่าน XML ควรใช้แอตทริบิวต์นี้เพื่อให้ผสานรวมกับแผงโฮสต์ของเครื่องมือแก้ไขการนำทางได้ (b/133880955)
การเปลี่ยนแปลง API
- เราได้เลิกใช้งาน
getViewModelStore()API ในNavControllerแล้วเพื่อหันไปใช้เมธอดgetViewModelStoreOwner()ใหม่ที่แสดงผลViewModelStoreOwner(aosp/987010) - การใช้งานปลายทางของหน้าต่างลอย เช่น ปลายทาง
<dialog>ได้รับการปรับให้เป็นอินเทอร์เฟซเครื่องหมายFloatingWindowซึ่งตอนนี้ปลายทาง<dialog>ทั้งหมดได้นำไปใช้แล้ว ตอนนี้เมธอด NavigationUI สำหรับการโต้ตอบกับแถบแอปด้านบนจะละเว้นปลายทางFloatingWindow(b/133600763)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การนำทางจะซิงค์สถานะกับสิ่งที่เห็นบนหน้าจออย่างถูกต้องเมื่อใช้ปลายทาง
<dialog>ด้วยเหตุนี้ ตอนนี้การนำทางจะแสดง<dialog>จุดหมายโดยอัตโนมัติเมื่อคุณไปยังจุดหมายที่ไม่ใช่กล่องโต้ตอบและไม่ใช่กิจกรรม เช่น<fragment>จุดหมาย (b/134089818)
แก้ไขข้อบกพร่อง
- ตอนนี้การนำทางจะระงับภาพเคลื่อนไหวที่เกิดขึ้นเมื่อสร้างกิจกรรมขึ้นใหม่เมื่อจัดการ Deep Link ซึ่งจะแก้ไขการกะพริบของภาพ (b/130362979)
- แก้ไขข้อบกพร่องที่ทำให้ Back Stack ของการนำทางไม่ซิงค์เมื่อป๊อป Fragment ขณะที่ระบบกำลังเพิ่ม Fragment เริ่มต้น (b/133832218)
เวอร์ชัน 2.1.0-alpha05
5 มิถุนายน 2019
androidx.navigation:*:2.1.0-alpha05 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- เราได้เปลี่ยนชื่อและย้าย API ที่เกี่ยวข้องกับโฮสต์ใน
NavControllerไปยังคลาสย่อยใหม่ของNavControllerซึ่งก็คือNavHostController(aosp/966091) - เมธอด
NavControllersetHostOnBackPressedDispatcherOwner()ถูกแทนที่ด้วยเมธอดsetOnBackPressedDispatcher()ของNavHostControllerแล้ว และตอนนี้คุณต้องเรียกใช้setLifecycleOwner()ก่อนจึงจะเรียกใช้เมธอดนี้ได้ (aosp/965409) - ตอนนี้
NavHostControllerมีเมธอดenableOnBackPressed(boolean)ที่แทนที่คลาสNavHostOnBackPressedManagerซึ่งก่อนหน้านี้setHostOnBackPressedDispatcherOwner()จะแสดงผล (aosp/966091)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่สแต็กย้อนกลับไม่ถูกต้องหลังจากไปยังส่วนต่างๆ ด้วย URI (b/132509387)
- ตอนนี้ Deep Link ที่ NavController จัดการโดยอัตโนมัติจะทริกเกอร์เพียงครั้งเดียว (b/132754763)
เวอร์ชัน 2.1.0-alpha04
16 พฤษภาคม 2019
androidx.navigation:*:2.1.0-alpha04 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
NavHostFragmentจะพิจารณาapp:defaultNavHostอย่างถูกต้องเมื่อสกัดกั้นเหตุการณ์ปุ่มย้อนกลับของระบบ ซึ่งแก้ไขการถดถอยในการนำทาง2.1.0-alpha03b/132077777- ตอนนี้
DialogFragmentNavigatorจัดการการดำเนินการpopBackStack()และnavigateUp()ได้อย่างถูกต้องแล้ว b/132576764 - แก้ไขปัญหา
IllegalStateException: unknown destination during restoreเมื่อไปยังส่วนต่างๆ ระหว่างกราฟที่ซ้อนกันซ้ำๆ b/131733658
เวอร์ชัน 2.1.0-alpha03
7 พฤษภาคม 2019
androidx.navigation:*:2.1.0-alpha03 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ปัญหาที่ทราบ
- NavHostFragment จะยังคงสกัดกั้นปุ่มย้อนกลับของระบบแม้ว่าจะใช้
app:defaultNavHost="false"b/132077777
ฟีเจอร์ใหม่
- ตอนนี้คุณสร้างปลายทาง
<dialog>ที่จะแสดงDialogFragmentเมื่อคุณnavigateไปยังปลายทางนั้นได้แล้วNavHostFragmentรองรับปลายทางของกล่องโต้ตอบโดยค่าเริ่มต้น b/80267254 - นอกจากการเรียกใช้
navigateด้วยรหัสทรัพยากรหรืออินสแตนซ์NavDirectionsแล้ว ตอนนี้คุณยังไปยังส่วนต่างๆ ผ่านUriได้ด้วย ซึ่งใช้<deepLink>ที่คุณเพิ่มไปยังปลายทางเพื่อไปยังปลายทางที่ถูกต้อง b/110412864
การเปลี่ยนแปลงลักษณะการทำงาน
- เราได้เพิ่มความเร็วของภาพเคลื่อนไหวเริ่มต้นที่ NavigationUI มีให้จาก 400 มิลลิวินาทีเป็น 220 มิลลิวินาทีเพื่อให้ตรงกับความเร็วของภาพเคลื่อนไหวเริ่มต้นของกิจกรรมและ Fragment b/130055522
การเปลี่ยนแปลง API
- เราได้เลิกใช้งาน
createFragmentNavigator()เมธอดของNavHostFragmentแล้ว และย้ายฟังก์ชันการทำงานไปยังเมธอดonCreateNavController()ใหม่เพื่อให้ชัดเจนยิ่งขึ้นว่านี่คือจุดแรกเข้าที่ถูกต้องในการเพิ่ม Navigator ที่กำหนดเองเมื่อสร้างคลาสย่อยของNavHostFragmentb/122802849 - เราได้เพิ่ม
hasDeepLink()เมธอดลงในNavDestinationเพื่อให้คุณตรวจสอบได้ว่าปลายทางนั้นๆ สามารถจัดการUriที่ระบุได้หรือไม่ หรือในกรณีของNavGraphปลายทางใดก็ตามในกราฟการนำทาง b/117437718
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์
OnDestinationChangedListenerอย่างถูกต้องแล้ว b/130630686 NavHostFragmentจะสกัดกั้นเหตุการณ์ย้อนกลับของระบบโดยใช้OnBackPressedDispatcherซึ่งแก้ไขปัญหาเมื่อทำการนำทางแบบมีเงื่อนไขในเมธอดวงจรของ Fragment เมื่อกลับไปยัง Fragment b/111598096- สำหรับ Safe Args ตอนนี้ระบบจะอนุมาน
android:defaultValue=”@null”ที่มีapp:argTypeที่ไม่ได้ระบุอย่างถูกต้องเป็นอาร์กิวเมนต์stringb/129629192
เวอร์ชัน 2.1.0-alpha02
3 เมษายน 2019
androidx.navigation:*:2.1.0-alpha02 ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถสร้าง ViewModel ที่กำหนดขอบเขตที่ระดับกราฟการนำทางผ่านพร็อพเพอร์ตี้
by navGraphViewModels()delegate สำหรับผู้ใช้ Kotlin หรือโดยใช้ APIgetViewModelStore()ที่เพิ่มลงในNavControllerb/111614463
การเปลี่ยนแปลง API
- ตอนนี้คุณเพิ่ม
app:targetPackageไปยังปลายทาง<activity>เพื่อจำกัดชื่อแพ็กเกจที่ตรงกันได้แล้ว โดยรองรับapp:targetPackage="${applicationId}"สำหรับการจำกัดแพ็กเกจให้ใช้ได้กับรหัสแอปพลิเคชันของคุณเอง b/110975456
แก้ไขข้อบกพร่อง
- ระบบจะไม่แยกวิเคราะห์
android:nameสำหรับปลายทาง<activity>เป็นคลาสในเวลาที่เกิดเงินเฟ้ออีกต่อไป ซึ่งจะป้องกันไม่ให้เกิด ClassNotFoundExceptions เมื่อใช้ฟีเจอร์แบบไดนามิก b/124538597
เวอร์ชัน 2.1.0-alpha01
19 มีนาคม 2019
นี่คือการเปิดตัว Navigation 2.1.0 เวอร์ชันอัลฟ่าครั้งแรก
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ
androidx.core:core:1.0.1และandroidx.fragment:fragment:1.1.0-alpha05นอกจากนี้ รุ่นนี้ยังนำ การอ้างอิงandroidx.legacy:legacy-support-core-utils:1.0.0ออกด้วย b/128632612
การเปลี่ยนแปลง API
- เพิ่ม
Navigation.createNavigateOnClickListener(NavDirections)เมธอดใหม่ เพื่อเป็นทางเลือกแทนการสร้างเครื่องมือฟังการคลิกด้วย รหัสทรัพยากรและ Bundle b/127631752 FragmentNavigator.instantiateFragmentเลิกใช้งานแล้ว ตอนนี้การใช้งานเริ่มต้น ใช้FragmentFactoryเพื่อสร้างอินสแตนซ์ของ Fragment b/119054429
การแก้ไขข้อบกพร่อง
- การนำทางจะไม่ส่งค่าว่าง
Bundleเมื่อมีอาร์กิวเมนต์แนบมา กับปลายทางอีกต่อไป ซึ่งจะแก้ไขปัญหาเมื่อใช้android:defaultValue="@null"b/128531879 - ตอนนี้ Safe Args ขึ้นอยู่กับ KotlinPoet 1.1.0 ซึ่งแก้ไขปัญหาเกี่ยวกับ ชื่อแพ็กเกจที่ยาวมาก b/123654948
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
14 มีนาคม 2019
การนำทาง 2.0.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc02
เวอร์ชัน 2.0.0-rc02
6 มีนาคม 2019
Navigation 2.0.0-rc02 มีอาร์ติแฟกต์ใหม่ที่มีรหัสกลุ่ม androidx.navigation
และเปลี่ยนการอ้างอิงเป็นรายการที่เทียบเท่าใน AndroidX
ลักษณะการทำงานของ 2.0.0-rc02 จะเหมือนกับลักษณะการทำงานของ Navigation 1.0.0-rc02 และไม่จำเป็นต้องเปลี่ยนแปลงโค้ดเพื่ออัปเดตจาก 1.0.0-rc02 นอกเหนือจากการอัปเดตการขึ้นต่อกันให้ตรงกับการขึ้นต่อกันใหม่
โปรเจ็กต์ต้องย้ายข้อมูลไปยัง AndroidX เพื่อใช้ Navigation เวอร์ชัน 2.X Navigation 1.0 เวอร์ชันเสถียรจะเป็นรุ่นสุดท้ายที่ใช้การอ้างอิง Support Library การพัฒนาทั้งหมดในอนาคตหลังจากเวอร์ชัน 1.0 จะอิงตาม AndroidX และสร้างขึ้นบนเวอร์ชันเสถียร 2.0
การอ้างอิงก่อน AndroidX
สำหรับ Navigation เวอร์ชันก่อน AndroidX ให้รวมทรัพยากร Dependency เหล่านี้
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
สำหรับ Safe args ให้เพิ่ม classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0
14 มีนาคม 2019
การนำทาง 1.0.0 จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-rc02
เวอร์ชัน 1.0.0-rc02
26 กุมภาพันธ์ 2019
นี่คือรุ่นที่อาจได้รับการเผยแพร่รุ่นที่ 2 สำหรับเวอร์ชันเสถียร 1.0.0 ของ Navigation รุ่นนี้มีการแก้ไขข้อบกพร่องหลายอย่าง
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะละเว้น
popBackStack()หากกราฟรูทไม่มีรหัส b/126251695 - ตอนนี้
navigateUp()จัดการการกลับไปที่งานของแอปได้อย่างถูกต้อง เมื่อเรียกใช้หลังจากจัดการ Deep Link โดยไม่มีFLAG_ACTIVITY_NEW_TASKb/126082008 - แก้ไขปัญหาที่
ActivityNavigator.applyPopAnimationsToPendingTransitionไม่ใช้ภาพเคลื่อนไหวเมื่อกดออกของป๊อปอัปที่ถูกต้อง b/126237567 - ตอนนี้โค้ด Kotlin ที่สร้างโดย Safe Args จะกำหนดอักขระหลีกสำหรับคีย์เวิร์ด Kotlin อย่างถูกต้อง
เช่น
inและfunในชื่อแพ็กเกจที่เชื่อมโยงกับคลาสRb/126020455
เวอร์ชัน 1.0.0-rc01
21 กุมภาพันธ์ 2019
นี่คือรุ่นที่อาจได้รับการเผยแพร่สำหรับการเปิดตัวเวอร์ชันเสถียร 1.0.0 ของ Navigation รุ่นนี้มีการแก้ไขข้อบกพร่อง 1 รายการ
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้ Fragment และการดำเนินการนำทาง
singleTopb/124294805
เวอร์ชัน 1.0.0-beta02
12 กุมภาพันธ์ 2019
รุ่นนี้มีการปรับปรุงเล็กๆ น้อยๆ หลายอย่างและการแก้ไขข้อบกพร่องที่สำคัญ
ฟีเจอร์ใหม่
- ตอนนี้คุณใช้
0เป็นandroid:defaultValueสำหรับอาร์กิวเมนต์referenceได้แล้ว b/124248602
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะจัดลำดับความสำคัญของ Deep Link ที่ตรงกันทุกประการมากกว่า Deep Link ที่มี
.*หรือ อาร์กิวเมนต์ที่ตรงกัน b/123969518
การแก้ไขข้อบกพร่อง
- ตอนนี้
popBackStack()และnavigateUpจะแสดงผลfalseอย่างถูกต้องเมื่อป๊อปปลายทางสุดท้ายในสแต็กย้อนกลับ ซึ่งแก้ไขการถดถอยที่เกิดขึ้นใน1.0.0-beta01b/123933201 - ตอนนี้การนำทางจะตั้งค่า
ClassLoaderอย่างถูกต้องในระหว่างการกู้คืน สถานะอินสแตนซ์ที่บันทึกไว้ ซึ่งจะช่วยหลีกเลี่ยงปัญหาเมื่อใช้คลาสที่กำหนดเองในNavigatorสถานะที่บันทึกไว้หรือในอาร์กิวเมนต์ที่ส่งไปยังNavDestinationb/123893858 - คลาส NavArgs ที่สร้างโดย Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อกู้คืนอาร์กิวเมนต์
Parcelable[]จากสถานะอินสแตนซ์ที่บันทึกไว้ b/123963545 - ตอนนี้ Safe Args จะล้างคลาส Kotlin ที่สร้างขึ้นโดยไม่จำเป็นได้อย่างถูกต้อง b/124120883
เวอร์ชัน 1.0.0-beta01
4 กุมภาพันธ์ 2019
นี่คือเวอร์ชันเบต้าแรกของการนำทาง ต่อไปนี้คาดว่า Navigation API จะยังคงเสถียรจนกว่าจะถึงเวอร์ชันถัดไป เว้นแต่จะมีปัญหา ร้ายแรง รุ่นนี้มีการแก้ไขข้อบกพร่องและการเปลี่ยนแปลงลักษณะการทำงานบางอย่าง
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การนำทางจะช่วยให้มั่นใจได้ว่าค่าเริ่มต้นของอาร์กิวเมนต์จะได้รับการประมวลผลเหมือนกัน
ในรันไทม์และผ่าน Safe Args ด้วยเหตุนี้ เฉพาะอาร์กิวเมนต์ที่มี
app:argType="reference"เท่านั้นที่จะมีค่าเริ่มต้นที่ชี้ไปยังทรัพยากรอื่น (เช่น@color/colorPrimary) การพยายามใช้ค่าเริ่มต้นของการอ้างอิง ที่มีapp:argTypeอื่นจะทำให้เกิดข้อยกเว้นเมื่อ แยกวิเคราะห์ XML การนำทาง b/123551990 - ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle 3.3.0 aosp/888413
- ตอนนี้ Safe Args ขึ้นอยู่กับ Kotlin 1.3.20 aosp/888414
การแก้ไขข้อบกพร่อง
- ตอนนี้คุณใช้ Safe Args ในโมดูลไลบรารีและฟีเจอร์ใน Android Gradle Plugin ทุกเวอร์ชันได้แล้ว b/121304903
- แก้ไขการถดถอยที่จะทำให้
popBackStack()การดำเนินการเดียว แสดงสำเนาทั้งหมดของปลายทางที่ด้านบนของสแต็กย้อนกลับ แทนที่จะ แสดงปลายทางเดียวในแต่ละครั้ง b/123552990 - แก้ไขปัญหาที่
FragmentNavigatorจะยกเลิกการซิงค์ กับสถานะของNavControllerซึ่งทำให้เกิดIllegalStateExceptionเมื่อ พยายามกู้คืนสแต็กย้อนกลับ b/123803044 - แก้ไขปัญหาที่ลูกศรย้อนกลับที่จัดการโดย
NavigationUIไม่ปรากฏเมื่อใช้ ProGuard กับการปิดบัง b/123449431 - ตอนนี้โค้ดที่สร้างโดย Safe Args จะจัดการการใช้
app:argTypeที่ชี้ไปยังคลาสในแบบคงที่ภายในในรูปแบบ.OuterClass$InnerClassได้อย่างถูกต้องแล้ว b/123736741 - ตอนนี้โค้ด Java ที่สร้างโดย Safe Args จะจัดการการดำเนินการส่วนกลาง และปลายทางที่ซ้อนกันอย่างลึกซึ้งได้อย่างถูกต้อง b/123347762
เวอร์ชัน 1.0.0-alpha11
23 มกราคม 2019
นี่คือรุ่นฮอตฟิกซ์ของ 1.0.0-alpha10 ซึ่งแก้ไขปัญหาเกี่ยวกับ Safe Args
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Safe Args นำเข้าคลาส Directions ที่เชื่อมโยงกับการทำงานส่วนกลางไม่สำเร็จ b/123307342
เวอร์ชัน 1.0.0-alpha10
23 มกราคม 2019
ปัญหาที่ทราบ
- Safe Args นำเข้าคลาส Directions ที่เชื่อมโยงกับการดำเนินการส่วนกลางไม่สำเร็จ b/123307342
รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง
ฟีเจอร์ใหม่
- ตอนนี้ผู้ใช้ Kotlin สามารถใช้ตัวแทนพร็อพเพอร์ตี้
by navArgs()เพื่อรับการอ้างอิงถึงคลาสNavArgsที่สร้างขึ้นโดย Safe Args ในActivityหรือFragmentได้แล้ว b/122603367 - ตอนนี้ Safe Args อนุญาตให้คุณสร้างโค้ด Kotlin ได้โดยใช้ปลั๊กอิน
androidx.navigation.safeargs.kotlinโค้ด Kotlin สร้างขึ้น สำหรับโมดูล Kotlin เท่านั้น โดยใช้การอาร์กิวเมนต์เริ่มต้นและ คลาสที่ไม่เปลี่ยนค่าได้แทนรูปแบบ Builder ซึ่งยังคงใช้ได้ผ่านandroidx.navigation.safeargsปลั๊กอินก่อนหน้า b/110263087
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะให้ความสำคัญกับ Deep Link ที่มีอาร์กิวเมนต์ที่ตรงกันมากที่สุด b/118393029
- ตอนนี้การเรียกใช้
setGraph()ในNavControllerจะรีเซ็ตสแต็กย้อนกลับ b/111450672 - Deep Link ที่ไม่รู้จักจะไม่แสดง
IllegalStateExceptionอีกต่อไป แต่จะถูก ละเว้น ซึ่งจะช่วยแก้ไขปัญหาเกี่ยวกับIllegalStateExceptionที่ซ้อนกันหรือหลายรายการ b/121340440NavHostFragment
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
NavOptions.applyPopAnimationsToPendingTransition()วิธีใช้ภาพเคลื่อนไหวป๊อปอัปกับกิจกรรมได้ย้ายไปที่ActivityNavigatorแล้ว b/122413117- ตอนนี้ Safe Args จะหลีกเลี่ยงการทำซ้ำคลาสที่เหมือนกันสำหรับการดำเนินการที่ไม่มีอาร์กิวเมนต์ ตอนนี้ประเภทการคืนค่าสำหรับเมธอดที่ไม่มีอาร์กิวเมนต์ในคลาส NavDirections
ที่สร้างขึ้นคือ
NavDirectionsb/123233147 - คลาสเส้นทางที่สร้างโดย Safe Args จะไม่มีตัวสร้างสาธารณะอีกต่อไป - คุณควรโต้ตอบกับเมธอดแบบคงที่ที่สร้างขึ้นเท่านั้น b/123031660
- คลาส
NavDirectionsที่สร้างโดย Safe Args จะไม่มีตัวสร้างสาธารณะอีกต่อไป แต่ควรสร้างผ่านเมธอดแบบคงที่ในคลาส Directions ที่สร้างขึ้นเท่านั้น b/122963206 - ตอนนี้ระบบจะทำเครื่องหมาย
Bundleที่ส่งคืนจากNavDirectionsgetArguments()เป็น@NonNullแทนที่จะเป็น@Nullableb/123243957
การแก้ไขข้อบกพร่อง
NavDeepLinkBuilderตอนนี้จะจัดการPendingIntentหลายรายการพร้อมกันไปยังปลายทางเดียวกันได้อย่างถูกต้องโดยใช้อาร์กิวเมนต์ที่คุณส่ง เข้ามาเพื่อพิจารณาความไม่ซ้ำกัน b/120042732- ตอนนี้
NavControllerจัดการการดำเนินการpopBackStack()อย่างถูกต้องเมื่อ ใช้NavHostFragmentที่ซ้อนกันหรือ Fragment อื่นๆ ที่เป็นส่วนย่อยที่มี Back Stack b/122770335 NavigationUIตอนนี้ได้ตั้งค่าคำอธิบายเนื้อหาของปุ่มขึ้นอย่างถูกต้องแล้ว b/120395362- ตอนนี้คลาส Directions ที่สร้างโดย Safe Args จะจัดการการทำงานส่วนกลาง ที่มีรหัสเดียวกันกับการทำงานในปลายทางได้อย่างถูกต้อง b/122962504
- ตอนนี้คลาส
NavDirectionsที่สร้างขึ้นโดย Safe Args มีค่าเท่ากันอย่างถูกต้องhashCode()เมื่อequals()จะแสดงผลเป็นจริง b/123043662 FragmentNavigatorจะแสดงข้อความแสดงข้อผิดพลาดที่ดีขึ้นหากคุณพยายาม ทำFragmentTransactionsที่กำหนดเองในNavHostFragmentของFragmentManagerคุณควรใช้getChildFragmentManager()เสมอ b/112927148
เวอร์ชัน 1.0.0-alpha09
18 ธันวาคม 2018
รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง
เราเลือกที่จะไม่พัฒนาอาร์ติแฟกต์ android.arch.navigation:navigation-testing ต่อ แม้ว่าวิธีนี้จะพิสูจน์แล้วว่ามีประโยชน์สำหรับการทดสอบภายในของ NavController แต่เราขอแนะนำอย่างยิ่งให้ใช้กลยุทธ์การทดสอบอื่น เช่น การจำลองอินสแตนซ์ NavController เพื่อตรวจสอบว่ามีการเรียก navigate() ที่ถูกต้อง เราได้อธิบายแนวทางนี้อย่างละเอียดในการพูดคุยเรื่อง Single Activity ที่ AndroidDevSummit 2018
และจะจัดทำเอกสารเพิ่มเติมเกี่ยวกับการทดสอบด้วย Navigation โดยเฉพาะ
ฟีเจอร์ใหม่
MenuItemที่มีmenuCategory="secondary"จะไม่แสดงสแต็กย้อนกลับอีกต่อไปเมื่อใช้กับเมธอดNavigationUIb/120104424AppBarConfigurationตอนนี้คุณสามารถตั้งค่าอินสแตนซ์สำรองOnNavigateUpListenerซึ่งจะเรียกใช้เมื่อnavController.navigateUp()แสดงผลfalseb/79993862 b/120690961
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
- เมื่อใช้
<argument>กับargType="reference"การนำทางจะไม่แยกวิเคราะห์ข้อมูลอ้างอิงอีกต่อไป แต่จะแสดงรหัสทรัพยากรดิบแทน b/111736515 onNavDestinationSelected()ตอนนี้จะกลับไปยังจุดเริ่มต้นของกราฟการนำทางโดยค่าเริ่มต้น เพื่อให้สอดคล้องกับวิธีการของsetupเพิ่มmenuCategory="secondary"ลงในMenuItemเพื่อหลีกเลี่ยงการป๊อปแบ็กสแต็ก aosp/852869- ตอนนี้เมธอด
fromBundle()ของคลาสArgsที่สร้างขึ้นจะใช้Bundleที่ไม่ใช่ Null แทนBundleที่เป็น Null ได้ aosp/845616
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะแยกวิเคราะห์อาร์กิวเมนต์จาก Deep Link อย่างถูกต้องเป็น
argTypeแทนที่จะเป็นสตริงเสมอ b/110273284 - ตอนนี้การนำทางจะส่งออกทรัพยากรสาธารณะอย่างถูกต้องแล้ว b/121059552
- ตอนนี้ Safe Args ใช้ได้กับปลั๊กอิน Android Gradle 3.4 Canary 4 ขึ้นไป b/119662045
เวอร์ชัน 1.0.0-alpha08
6 ธันวาคม 2018
รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง
ฟีเจอร์ใหม่
- เมื่อใช้กับ
NavigationUIวิธีการ ป้ายกำกับปลายทางจะแทนที่อินสแตนซ์{argName}ในandroid:labelด้วยอาร์กิวเมนต์ที่ถูกต้องโดยอัตโนมัติ b/80267266 - ตอนนี้การนำทางขึ้นอยู่กับ Support Library 28.0.0 b/120293333
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
- เปลี่ยนชื่อ
OnNavigatedListenerเป็นOnDestinationChangedListenerแล้ว b/118670572 - ตอนนี้
OnDestinationChangedListenerยังส่งBundleของอาร์กิวเมนต์ด้วย aosp/837142 - ระบบได้นำแอตทริบิวต์
app:clearTaskและapp:launchDocumentรวมถึงเมธอดที่เกี่ยวข้องออกแล้ว ใช้app:popUpToกับรูทของกราฟเพื่อ นำปลายทางทั้งหมดออกจากสแต็กย้อนกลับ b/119628354 ActivityNavigator.Extrasตอนนี้ใช้รูปแบบBuilderและเพิ่มความสามารถในการ ตั้งค่าแฟล็กIntent.FLAG_ACTIVITY_aosp/828140- เปลี่ยนชื่อ
NavController.onHandleDeepLinkเป็นhandleDeepLinkแล้ว aosp/836063 - คลาสและเมธอดจำนวนมากที่ไม่ได้มีไว้สำหรับการสร้างคลาสย่อย เช่น
NavOptions,NavInflater,NavDeepLinkBuilderและAppBarConfigurationได้รับการตั้งค่าเป็นfinalaosp/835681 - นำเมธอด
NavHostFragment.setGraph()ที่เลิกใช้งานแล้วออกแล้ว aosp/835684 - ระบบได้นำเมธอด
NavigationUI.navigateUp(DrawerLayout, NavController)ที่เลิกใช้งานแล้วออกแล้ว aosp/835684 - เราได้ย้ายการสร้างส่วนย่อยไปที่
FragmentNavigatorเพื่อให้คุณมอบหมายการสร้างส่วนย่อยให้กับFragmentFactoryได้ง่ายขึ้น b/119054429 - เครื่องมือสร้างสำหรับ
NavGraphNavigatorไม่รับContextอีกต่อไป aosp/835340 - ตอนนี้ NavigatorProvider เป็นคลาสแล้ว
ไม่ใช่อินเทอร์เฟซ
NavigatorProviderที่แสดงโดยgetNavigatorProvider()ยังคงมีฟังก์ชันการทำงานเหมือนเดิม aosp/830660 - นำ
NavDestination.navigate()ออกแล้ว โทรหาnavigate()ที่หมายเลขNavigatorแทน aosp/830663 - การปรับโครงสร้าง
Navigatorครั้งใหญ่ โดยไม่จำเป็นต้องใช้OnNavigatorNavigatedListenerและให้navigateแสดงผลNavDestinationที่นำทางไปแทน Navigatorจะส่งกิจกรรมยอดนิยมไปยังNavControllerไม่ได้อีกต่อไป ลองใช้OnBackPressedCallbackเพื่อ สกัดการกดปุ่มกลับและเรียกใช้navController.popBackStack()aosp/833716
การแก้ไขข้อบกพร่อง
popUpToทำงานได้อย่างสม่ำเสมอเมื่อปลายทางเป็นองค์ประกอบ<navigation>b/116831650- แก้ไขข้อบกพร่องหลายรายการที่ทำให้เกิด
IllegalArgumentExceptionเมื่อใช้กราฟแบบฝัง b/118713731 b/113611083 b/113346925 b/113305559 - ตอนนี้แอตทริบิวต์
dataPatternของปลายทาง<activity>จะป้อนอาร์กิวเมนต์จากอาร์กิวเมนต์ที่ไม่ใช่สตริงโดยการเรียกtoString()b/120161365
Safe Args
- Safe Args รองรับออบเจ็กต์ที่ทำให้เป็นอนุกรมได้ รวมถึงค่า Enum ประเภท Enum
สามารถตั้งค่าเริ่มต้นได้โดยใช้ตัวอักษร enum โดยไม่มีชื่อคลาส
(เช่น
app:defaultValue="READ") b/111316353 - Safe Args รองรับอาร์เรย์ของประเภทที่รองรับทั้งหมด b/111487504
- ตอนนี้ Safe Args จะไม่สนใจโฟลเดอร์ย่อยของไดเรกทอรีทรัพยากร b/117893516
- Safe Args จะเพิ่ม
@Overrideคำอธิบายประกอบตามความเหมาะสม b/117145301
เวอร์ชัน 1.0.0-alpha07
29 ตุลาคม 2018
ฟีเจอร์ใหม่
- คลาส AppBarConfiguration ใหม่ช่วยให้คุณปรับแต่งปลายทางที่ถือเป็นปลายทางระดับบนสุด ได้ ดูรายละเอียดได้ในเอกสารประกอบที่อัปเดตแล้ว b/117333663
- ตอนนี้คุณส่งอาร์กิวเมนต์ไปยังปลายทางเริ่มต้นของกราฟได้แล้ว b/110300470
- ตอนนี้ Deep Link รองรับรูปแบบที่กำหนดเองที่มีจุด ขีดกลาง และเครื่องหมายบวกแล้ว b/112806402
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
- เราได้รวมโมดูล
navigation-testing-ktxเข้ากับnavigation-testing artifactแล้ว และจะไม่เผยแพร่โมดูลดังกล่าวอีกต่อไป - ตอนนี้อาร์ติแฟกต์
navigation-testingมีการขึ้นต่อกันกับไลบรารีมาตรฐานของ Kotlin เราได้เปลี่ยนแปลง API ให้สอดคล้องกับรูปแบบของ Kotlin มากขึ้น แต่คุณยังคงใช้ API นี้กับเทสต์ที่เขียนด้วย Java ได้ - ระบบจะไม่รองรับกราฟการนำทางที่ลงทะเบียนไว้ในไฟล์ Manifest ของข้อมูลเมตาอีกต่อไป b/118355937
- ไม่สามารถแนบการดำเนินการกับปลายทาง <activity> ได้อีกต่อไป aosp/785539
การแก้ไขข้อบกพร่อง
- ตอนนี้ Deep Link จะแยกวิเคราะห์พารามิเตอร์การค้นหาได้อย่างถูกต้อง b/110057514
- ตอนนี้ปลายทางของกิจกรรมจะใช้ภาพเคลื่อนไหวสำหรับการเข้าและออกทั้งหมดอย่างถูกต้องแล้ว b/117145284
- แก้ไขข้อขัดข้องที่เกิดขึ้นหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อใช้ Navigator ที่กำหนดเอง b/110763345
Safe Args
- ตอนนี้ Safe Args มีทรัพยากร Dependency ที่แก้ไขแล้วในปลั๊กอิน Android Gradle 3.2.1 b/113167627
- ตอนนี้คุณสร้างเส้นทางสำหรับคลาสภายในได้แล้ว b/117407555
- แก้ไขปัญหาเกี่ยวกับการสร้างเส้นทางไปยังกราฟ <include> b/116542123
เวอร์ชัน 1.0.0-alpha06
20 กันยายน 2018
ฟีเจอร์ใหม่
- ตอนนี้ปลายทาง Fragment และ Activity รองรับการเปลี่ยนฉากองค์ประกอบที่ใช้ร่วมกันแล้ว b/79665225 ดูข้อมูลเพิ่มเติมได้ที่ใช้การนำทางด้วยคอมโพเนนต์สถาปัตยกรรมการนำทาง
- การเลือกรายการใน
NavigationViewจะปิดชีตด้านล่างที่มีอยู่ b/112158843
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ทำให้เกิดข้อผิดพลาด: เมธอด Navigator
navigate()รับพารามิเตอร์Navigator.Extrasแล้ว - ตอนนี้เมธอด
getGraph()ของ NavController คือNonNullb/112243286
การแก้ไขข้อบกพร่อง
NavigationUI.setupWithNavController()ไม่รั่วไหลจำนวนการดูอีกต่อไปหากใช้ร่วมกับการดูจากปลายทางแต่ละแห่ง b/111961977- ตอนนี้ระบบจะเรียกใช้ Navigator
onSaveState()เพียงครั้งเดียวเท่านั้น b/112627079
Safe Args
- ตอนนี้คลาสเส้นทางของปลายทางการนำทางจะขยายคลาสเส้นทางของคลาสหลักหากมีอยู่ b/79871405
- ตอนนี้คลาส Directions และ Args มี
toString()การใช้งานที่มีประโยชน์แล้ว b/111843389
เวอร์ชัน 1.0.0-alpha05
10 สิงหาคม 2018
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ทำให้เกิดลักษณะการทำงานของ Backstack ที่ไม่ถูกต้อง b/111907708
- แก้ไขข้อบกพร่องใน
equals()ของคลาส Generated Args b/111450897 - แก้ไขการสร้างที่ไม่สำเร็จใน Safe Args b/109409713
- แก้ไขการแปลงจากตัวระบุทรัพยากรเป็นชื่อ Java b/111602491
- แก้ไขข้อความแสดงข้อผิดพลาดเกี่ยวกับค่า Null ในปลั๊กอิน Safe Args
- เพิ่มคำอธิบายประกอบการอนุญาตให้เป็น Null ที่ขาดหายไป
เวอร์ชัน 1.0.0-alpha04
19 กรกฎาคม 2018
การนำทาง 1.0.0-alpha04 และปลั๊กอิน Gradle ของ Safe Args ที่เกี่ยวข้องมีการเปลี่ยนแปลง API การเปลี่ยนแปลงลักษณะการทำงาน และการแก้ไขข้อบกพร่องหลายอย่าง
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- NavHostFragment จะตั้งค่า Fragment ปัจจุบันเป็น Fragment การนำทางหลักเสมอ เพื่อให้มั่นใจว่าระบบจะนำ Fragment ที่เป็นองค์ประกอบย่อยออกจากสแต็กก่อนที่จะนำ NavController ด้านนอกออกจากสแต็ก b/111345778
Safe Args
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: เราได้เปลี่ยน
app:typeเป็นapp:argTypeเพื่อหลีกเลี่ยงการขัดแย้งกับไลบรารีอื่นๆ เช่น ConstraintLayout 2.0.0-alpha1 b/111110548 - ตอนนี้ข้อความแสดงข้อผิดพลาดจาก Safe Args สามารถคลิกได้แล้ว b/111534438
- ตอนนี้คลาส Args จะยืนยันว่าแอตทริบิวต์
NonNullไม่ใช่ Null จริงๆ b/111451769 - เพิ่ม
NonNullคำอธิบายประกอบเพิ่มเติมลงในคลาสที่สร้างขึ้นสำหรับ NavDirections และ Args b/111455455 b/111455456
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบหลังจาก Deep Link ไปยังปลายทางของ Fragment b/111515685
เวอร์ชัน 1.0.0-alpha03
12 กรกฎาคม 2018
การนำทาง 1.0.0-alpha03 และปลั๊กอิน Gradle ของ Safe Args ที่เกี่ยวข้องมีการเปลี่ยนแปลง API การเปลี่ยนแปลงลักษณะการทำงาน และการแก้ไขข้อบกพร่องหลายอย่าง
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับแถบเครื่องมือแล้ว b/109868820
- เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับ CollapsingToolbarLayout แล้ว b/110887183
- ตอนนี้ popBackStack() จะแสดงผลเป็นเท็จเมื่อ Back Stack ว่างเปล่าหรือเมื่อรหัสปลายทางที่ระบุไม่ได้อยู่ใน Back Stack b/110893637
- ตอนนี้ FragmentNavigator จะไม่สนใจการดำเนินการนำทางหลังจากที่ FragmentManager บันทึกสถานะแล้ว เพื่อหลีกเลี่ยงข้อยกเว้น "Can not perform this action after onSaveInstanceState" b/110987825
Safe Args
- การเปลี่ยนแปลงที่ทำให้เกิดข้อผิดพลาด: ระบบจะแทนที่อักขระที่ไม่ใช่ตัวอักษรและตัวเลขในชื่อการดำเนินการและชื่ออาร์กิวเมนต์ด้วยรูปแบบ Camel Case ในชื่อเมธอด NavDirections ที่เกี่ยวข้อง
- เช่น
DemoController.indexจะกลายเป็นsetDemoControllerIndexb/79995048 - เช่น
action_show_settingsจะกลายเป็นactionShowSettingsb/79642240
- เช่น
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ตอนนี้ระบบจะถือว่าอาร์กิวเมนต์ไม่ใช่ค่าว่างโดยค่าเริ่มต้น หากต้องการอนุญาตค่า Null ในอาร์กิวเมนต์สตริงและ Parcelable ให้เพิ่ม
app:nullable="true"b/79642307 - ตอนนี้คุณใช้
app:type="long"กับ defaultValues ในรูปแบบ "123L" ได้แล้ว b/79563966 - ตอนนี้ระบบรองรับอาร์กิวเมนต์ที่ส่งผ่านได้แล้วโดยใช้ชื่อคลาสที่สมบูรณ์ในตัวเองสำหรับ
app:typeค่าเริ่มต้นที่รองรับมีเพียง"@null"b/79563966 - ตอนนี้คลาส Args จะใช้
equals()และhashCode()แล้ว b/79642246 - ตอนนี้คุณใช้ปลั๊กอิน Safe Args กับโปรเจ็กต์ไลบรารีได้แล้ว b/80036553
- ตอนนี้คุณใช้ปลั๊กอิน Safe Args กับโปรเจ็กต์ฟีเจอร์ได้แล้ว b/110011752
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อไปยังส่วนต่างๆ ระหว่างเมธอดวงจรของ Fragment b/109916080
- แก้ไขปัญหาเมื่อไปยังส่วนต่างๆ ของกราฟที่ซ้อนกันหลายครั้ง b/110178671
- แก้ไขปัญหาเมื่อใช้
setPopUpToกับปลายทางแรกในกราฟ b/109909461 - แก้ไขปัญหาที่ค่า
app:defaultValueทั้งหมดถูกส่งเป็นสตริง b/110710788 - ตอนนี้ aapt2 ที่มาพร้อมกับปลั๊กอิน Android Gradle 3.2 Beta 01 จะเพิ่มกฎ keep สำหรับทุก
android:nameแอตทริบิวต์ในไฟล์ XML ของการนำทาง b/79874119 - แก้ไขปัญหาหน่วยความจำรั่วไหลเมื่อแทนที่ FragmentNavigator เริ่มต้น b/110900142
เวอร์ชัน 1.0.0-alpha02
7 มิถุนายน 2018
การเปลี่ยนแปลงลักษณะการทำงาน
ตอนนี้
FragmentNavigatorใช้setReorderingAllowed(true)แล้ว b/109826220ตอนนี้การนำทางจะ URLDecode อาร์กิวเมนต์ที่แยกวิเคราะห์จาก URL ของ Deep Link แล้ว b/79982454
การแก้ไขข้อบกพร่อง
แก้ไข
IllegalStateExceptionเมื่อเรียกใช้ navigate จากเมธอดวงจรของ Fragment b/79632233ตอนนี้การนำทางจะขึ้นอยู่กับ Support Library 27.1.1 เพื่อแก้ไขการกะพริบเมื่อใช้ภาพเคลื่อนไหว b/80160903
แก้ไข
IllegalArgumentExceptionเมื่อใช้ defaultNavHost="true" เป็น Fragment ย่อย b/79656847แก้ไข
StackOverflowErrorเมื่อใช้ NavDeepLinkBuilder b/109653065แก้ไข
IllegalArgumentExceptionเมื่อกลับไปที่กราฟที่ซ้อนกัน b/80453447แก้ไขปัญหาเกี่ยวกับ Fragment ที่ทับซ้อนกันเมื่อใช้
launchSingleTopb/79407969ตอนนี้การนำทางจะสร้างสแต็กย้อนกลับสังเคราะห์ที่ถูกต้องสำหรับกราฟที่ซ้อนกันแล้ว b/79734195
ตอนนี้ NavigationUI จะไฮไลต์รายการที่ถูกต้องเมื่อใช้กราฟที่ซ้อนกันเป็น
MenuItemb/109675998
การเปลี่ยนแปลง API
เราได้เลิกใช้งานแอตทริบิวต์
clearTaskสำหรับการกระทำและ API ที่เกี่ยวข้องในNavOptionsแล้ว b/80338878เราเลิกใช้งานแอตทริบิวต์
launchDocumentสำหรับการดำเนินการและ API ที่เกี่ยวข้องในNavOptionsแล้ว b/109806636
เวอร์ชัน 1.0.0-alpha01
8 พฤษภาคม 2018
การนำทางเป็นเฟรมเวิร์กสำหรับการสร้างการนำทางในแอป
รุ่นแรกนี้คือ 1.0.0-alpha01