การนำทาง
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
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 5 พฤศจิกายน 2025 | 2.9.6 | - | - | - |
การประกาศทรัพยากร 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.6" // 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.6" // 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
To add Safe Args
to your project, include the following classpath in your top level build.gradle file:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.6" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.6" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
You must also apply one of two available plugins.
To generate Java language code suitable for Java or mixed Java and Kotlin modules, add
this line to your app or module's build.gradle file:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
You must have android.useAndroidX=true in your
gradle.properties file as per
Migrating to AndroidX.
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบเกี่ยวกับ KTX
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.9
เวอร์ชัน 2.9.6
5 พฤศจิกายน 2025
androidx.navigation:navigation-*:2.9.6 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.6 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เราได้ย้ายข้อมูลปลั๊กอินการนำทาง
SafeArgsไปยัง API ของปลั๊กอิน Android Gradle ที่ทันสมัยแล้ว ซึ่งจะช่วยให้มั่นใจได้ว่าปลั๊กอินจะเข้ากันได้กับการเผยแพร่ AGP 8.4.2 ขึ้นไปทั้งหมด การเปลี่ยนแปลงเหล่านี้ส่งผลให้ไดเรกทอรีเอาต์พุตสำหรับไฟล์ที่ปลั๊กอินสร้างขึ้นเปลี่ยนเป็นตำแหน่งเริ่มต้นที่ AGP ระบุ (Ie09d6, I7c431, b/203559535, b/293920476, b/269532448, b/443261197) - ปลั๊กอิน Navigation
SafeArgsจะไม่จำเป็นต้องตั้งค่าพร็อพเพอร์ตี้useAndroidXอีกต่อไปเมื่อใช้กับ AGP 9.0.0-alpha04 ขึ้นไป (I6c3a4, b/444746731, b/443106400)
เวอร์ชัน 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 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- จากการนำทาง
2.8.9: แก้ไขการถดถอยที่พบในการนำทาง 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จับคู่ที่ Deep Link และคำขอ Deep Link ต้องตรงกันทุกประการใน URI, การดำเนินการ และ MIME ระบบจะไม่อนุญาตให้จับคู่หากมีช่องที่ตรงกันเพียง 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เช่น Activity หรือ 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เช่น Activity หรือ 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)
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ 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 (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ตอนนี้มีvalueEqualsAPI แบบเปิดใหม่ที่ระบุว่าค่า 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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่แลมบ์ดา
EnterTransitionและExitTransitionที่สร้างขึ้นเป็นส่วนหนึ่งของNavHostอาจยังคงอยู่ในหน่วยความจำแม้ว่าจะนำNavHostออกจากการแต่งแล้วก็ตาม (I893d0)
ปัญหาที่ทราบ
- Navigation 2.6.x มีปัญหาที่ว่าเมื่อไปยังส่วนต่างๆ ด้วย popUpTo อาจทำให้เกิด
IllegalArgumentExceptionได้ คุณอาจหลีกเลี่ยงข้อยกเว้นนี้ได้โดยการปรับโครงสร้างกราฟใหม่ ซึ่งคล้ายกับคำแนะนำที่ระบุไว้ที่นี่ (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, การกระทํา และ/หรือ MimeType จึงจะถูกต้อง
การเปลี่ยนแปลงที่สำคัญในการนำทางด้วย 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ที่ไม่เป็น Null ซึ่ง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, การกระทํา และ/หรือ MimeType จึงจะถูกต้อง (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()method ใน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(ผ่าน APIviewModel()ของ 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)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การเขียน Navigation ขึ้นอยู่กับ 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)
- ตอนนี้คุณสร้างกราฟโดยใช้เส้นทางเป็นจุดเริ่มต้น/ปลายทางภายนอก 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ที่เชื่อมโยงกับปลายทางแต่ละแห่งในสแต็กย้อนกลับของการนำทางช่วยให้คุณเข้าถึงSavedStateHandleที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการสแต็กย้อนกลับที่เฉพาะเจาะจง ดูข้อมูลเพิ่มเติมได้ที่การแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า 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/132077777DialogFragmentNavigatorตอนนี้จัดการการดำเนินการ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ที่ไม่ได้ระบุอย่างถูกต้องเป็นอาร์กิวเมนต์stringแล้ว b/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
รหัสกลุ่ม และเปลี่ยนทรัพยากร Dependency เป็นรายการที่เทียบเท่ากับ 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 จะเพิ่มกฎการเก็บสำหรับแอตทริบิวต์
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เมื่อเรียกใช้ฟังก์ชันนำทางจากเมธอดวงจร 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