การไปยังรายการต่างๆ
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
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
2 กรกฎาคม 2025 | 2.9.1 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Navigation คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ 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.1" // 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.1" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
หากต้องการเพิ่ม Safe Args ลงในโปรเจ็กต์ ให้ใส่ classpath
ต่อไปนี้ในไฟล์ build.gradle
ระดับบนสุด
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.1" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
นอกจากนี้ คุณยังต้องใช้ปลั๊กอิน 1 ใน 2 รายการที่มีให้
หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสมกับโมดูล Java หรือโมดูล Java และ Kotlin แบบผสม ให้เพิ่มบรรทัดนี้ลงในไฟล์ build.gradle
ของแอปหรือโมดูล
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
หรือหากต้องการสร้างโค้ด Kotlin ที่เหมาะสมสําหรับโมดูล Kotlin เท่านั้น ให้เพิ่ม
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
คุณต้องมี android.useAndroidX=true
ในไฟล์ gradle.properties
ตามหัวข้อการย้ายข้อมูลไปยัง AndroidX
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบเกี่ยวกับ KTX
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณจะช่วยให้ Jetpack ทำงานได้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.9
เวอร์ชัน 2.9.1
2 กรกฎาคม 2025
androidx.navigation:navigation-*:2.9.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.1 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้
NavEntries
ซึ่งสร้างขึ้นโดยใช้ single top ไม่เคยไปไกลกว่า CREATED ในLifecycle.State
(I043ba, b/421095236)
เวอร์ชัน 2.9.0
7 พฤษภาคม 2025
androidx.navigation:navigation-*:2.9.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.8.0
- ตอนนี้ระบบจะสร้างการดำเนินการ Navigation Safe Args ด้วยคำอธิบายประกอบ
@CheckResult
เพื่อให้มั่นใจว่ามีการใช้งาน
อินเทอร์เฟซ SupportingPane
- ตอนนี้ผู้ให้บริการนำทางที่กำหนดเองสามารถทำเครื่องหมายปลายทางของตนว่าใช้
SupportingPane
อินเทอร์เฟซ ซึ่งจะระบุให้NavController
ทราบว่าปลายทางเหล่านี้จะแสดงควบคู่ไปกับปลายทางอื่นๆ การใช้อินเทอร์เฟซนี้ช่วยให้คุณRESUMED
ได้หลายปลายทางพร้อมกัน เช่น
Compose Kotlin Multiplatform
- ตอนนี้การนำทางมีฟังก์ชัน
NavController.handleDeepLink()
ใหม่ที่ใช้กันทั่วไปซึ่งรับNavDeepLinkRequest
แทนIntent
ซึ่งจะช่วยให้แพลตฟอร์มอื่นๆ ที่ไม่ใช่ Android จัดการ Deep Link ได้อย่างเหมาะสม ขอขอบคุณ Konstantin Tskhovrebov - ตอนนี้การนำทางมี
NavUri
ซึ่งเป็นฟังก์ชันตัวแยกวิเคราะห์ทั่วไปใหม่ที่เป็น API ที่เข้ากันได้สำหรับ URI ของ Android ในแพลตฟอร์มอื่นๆ ซึ่งจะช่วยให้สร้าง URI ในลักษณะที่ไม่ขึ้นอยู่กับแพลตฟอร์มได้ ขอขอบคุณ Konstantin Tskhovrebov
ฟังก์ชันที่ปลอดภัยต่อประเภท
- API ที่ปลอดภัยตามประเภทซึ่งก่อนหน้านี้เข้าถึงได้ผ่าน
reified
เมธอดเท่านั้น เช่นcomposable<YourScreen>
มีเวอร์ชันที่ไม่ใช่แบบรีฟายด์ซึ่งรับอินสแตนซ์KClass
โดยตรงแล้ว - ตอนนี้ความปลอดภัยของประเภทการนำทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว
เวอร์ชัน 2.9.0-rc01
23 เมษายน 2025
androidx.navigation:navigation-*:2.9.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- นำเป้าหมายแพลตฟอร์มที่ไม่ใช่ Android ทั้งหมดออกจาก Jetpack Navigation เนื่องจากเป้าหมายเหล่านั้นใช้งานไม่ได้จริง ตอนนี้เรามี Stub สำหรับแพลตฟอร์มต่างๆ แทนแล้ว (I2877d)
เวอร์ชัน 2.9.0-beta01
9 เมษายน 2025
androidx.navigation:navigation-*:2.9.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- API ทั่วไปของ
parseStringAsNavUri
ได้รับการเปลี่ยนแปลงเป็นฟังก์ชันโรงงานNavUri
ที่รับสตริง (I4db6e, b/403616316)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารีนี้กำหนดเป้าหมายเป็นระดับภาษา Kotlin 2.0 และต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
เวอร์ชัน 2.9.0-alpha09
26 มีนาคม 2025
androidx.navigation:navigation-*:2.9.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha09 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้โมดูล
navigation-testing
รองรับการใช้งานบนเดสก์ท็อป, Linux, macOS และ iOS นอกเหนือจาก Android แล้ว (I2b770, b/398265336) NavType
รองรับการใช้งานบนเดสก์ท็อป, Linux, macOS และ iOS แล้ว นอกเหนือจาก Android (I297d8)
เวอร์ชัน 2.9.0-alpha08
12 มีนาคม 2025
androidx.navigation:navigation-*:2.9.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha08 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- จาก Navigation
2.8.9
: แก้ไขการถดถอยที่พบใน Navigation 2.8.8 ซึ่งกำหนดให้ Deep Link ต้องตรงกับช่องทั้งหมดของคำขอหรือ Intent ของ Deep Link อย่างแม่นยำจึงจะถือว่าตรงกัน ซึ่งทำให้ Deep Link ที่มีการจับคู่ฟิลด์บางส่วนและไม่มีฟิลด์อื่นๆ ใช้งานไม่ได้อีกต่อไป (Ie5e36, b/399826566)
การมีส่วนร่วมภายนอก
- ฟังก์ชันตัวแยกวิเคราะห์ทั่วไปใหม่เพื่อสร้าง
NavUri
ขอขอบคุณ Konstantin Tskhovrebov (If0a6a)
เวอร์ชัน 2.9.0-alpha07
26 กุมภาพันธ์ 2025
androidx.navigation:navigation-*:2.9.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.9.0-alpha07 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การพยายาม
saveState
ด้วยป๊อปอัปที่ไม่ครอบคลุมจะทำให้เกิด savedState ที่เป็นค่าว่าง ซึ่งอาจทำให้เกิดข้อขัดข้องเมื่อกู้คืน (I9f3e8, b/395091644) - จาก Navigation 2.8.8: แก้ไขการจับคู่
NavDeepLink
ที่ Deeplink และคำขอ Deeplink ต้องตรงกันทุกประการใน uri, การดำเนินการ และ mime ระบบจะไม่อนุญาตให้จับคู่หากมีช่องที่ตรงกันเพียง 1 หรือ 2 ช่อง (I3b029, b/395712033) - จากการนำทาง 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
: แก้ไขNavDestination
NullPointerException
เมื่ออัปเดต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
ที่ Deeplink และคำขอ Deeplink ต้องตรงกันทุกประการใน 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) - แก้ไข
NavDestination
NullPointerException
เมื่ออัปเดต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)
NavDestination
จะไม่สามารถทำ Deep Link ไปยังได้อีกต่อไป ยกเว้นผ่าน Deep Link ที่เพิ่มไปยังปลายทางอย่างชัดเจน ซึ่งหมายความว่าคุณจะไปยังเส้นทางของจุดหมายได้โดยใช้ฟังก์ชันการนำทางที่โอเวอร์โหลดซึ่งใช้เส้นทางสตริงเท่านั้น การเปลี่ยนแปลงนี้แก้ไขช่องโหว่ที่ทำให้สามารถ Deep Link ไปยังปลายทางที่อาจได้รับการปกป้อง (Ie30e6)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Navigation Safe Args ขึ้นอยู่กับ Kotlin 1.9.24 แทนที่จะเป็น Kotlin 2.X เพื่อให้มั่นใจว่านักพัฒนาแอปจะไม่ถูกบังคับให้อัปเดต (a4129a)
- ตอนนี้การเขียนของการนำทางจะขึ้นอยู่กับเขียน
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
การนำทาง Compose Predictive Back
- ตอนนี้ Navigation Compose รองรับการย้อนกลับในแอปที่คาดการณ์ได้ผ่าน
SeekableTransitionState
API ใหม่จาก 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
ที่กำหนดเองอีกต่อไป โปรดทราบว่าEnum
SerialName
ต้องเป็นชื่อแบบสมบูรณ์เริ่มต้น (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)
- ปรับปรุงข้อความแสดงข้อผิดพลาดสำหรับ Serializer ที่กำหนดเองซึ่งประกาศโดยตรงในฟิลด์คลาสผ่าน
@Serializable(with =...)
เพื่อชี้แจงว่าขณะนี้ฟีเจอร์นี้ยังไม่รองรับ (I052b0, b/341319151) SavedStateHandleFactory
ตอนนี้คุณใช้ test api ในการทดสอบที่ไม่ใช่ Android ได้แล้ว แต่จะต้องใช้ Robolectric เพื่อรองรับการแยกวิเคราะห์อาร์กิวเมนต์ด้วย Bundle (I76cdc, b/340966212)- แก้ไขข้อขัดข้องจากการกู้คืนสถานะเมื่อกลับมาใช้แอปต่อหลังจากกระบวนการสิ้นสุดลงด้วยการใช้การนำทางที่ปลอดภัยต่อประเภทใน Compose (Ia8f38, b/341801005)
- แก้ไขปัญหาใน Navigation Compose ที่หลังจากยกเลิกท่าทางสัมผัสย้อนกลับแบบคาดการณ์แล้ว
NavBackStackEntry
ที่ผู้ใช้กลับไปจะไม่กลับไปที่RESUMED
Lifecycle State นอกจากนี้ยังช่วยให้มั่นใจว่าปลายทางที่กลับมาจะเคลื่อนไหวกลับเข้ามาอย่างถูกต้องแทนที่จะเลื่อนเข้ามาในตำแหน่งหลังจากการปัด (I97a0c, b/346608857) - เมื่อใช้การย้อนกลับแบบคาดการณ์กับ Navigation Compose ตอนนี้ปลายทางที่ถูกป๊อปอัปจะมีลำดับ Z ที่เหมาะสม โดยจะเคลื่อนไหวอย่างถูกต้องที่ด้านบนของปลายทางที่เข้ามา (I2077b, b/345993681)
เวอร์ชัน 2.8.0-beta03
12 มิถุนายน 2024
androidx.navigation:navigation-*:2.8.0-beta03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta03 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
CollectionNavType
มีเมธอดemptyCollection()
ใหม่ ลบล้างเพื่อจัดการคอลเล็กชันที่ว่างเปล่าซึ่งส่งผ่านเป็นอาร์กิวเมนต์ (Ie4d84, b/341723133)
การแก้ไขข้อบกพร่อง
- เพิ่มเอกสารประกอบเกี่ยวกับ
NavType.serializeAsValue
และserializeAsValues
เพื่อเน้นว่าเอาต์พุตสุดท้ายควรมีการเข้ารหัส Uri (Ida6bd, b/344943214) - แก้ไขข้อขัดข้องเมื่อเรียก
toRoute<T>
โดยมีอาร์กิวเมนต์CollectionNavType
เป็นค่าว่าง เมื่อไปยังส่วนต่างๆ ด้วยCollectionNavType
ที่เป็นค่าว่าง อาร์กิวเมนต์เอาต์พุตจะเป็นค่าเริ่มต้นที่ประกาศในคลาส Serializable หรือค่าที่ส่งคืนของemptyCollection()
หากไม่มีค่าเริ่มต้น (I84158, Id630f, b/342672856)
เวอร์ชัน 2.8.0-beta02
29 พฤษภาคม 2024
androidx.navigation:navigation-*:2.8.0-beta02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
ClassCastException
การขัดข้องเมื่อใช้NavBackStackEntry.toRoute
กับNavType
ที่กำหนดเองซึ่งยอมรับค่า Null ได้ (I1c29b, b/342239473) - แก้ไขปัญหาการคืนค่าสถานะ Back Stack ของการนำทางที่เกิดขึ้นเมื่อพยายามคืนค่ารายการ Back Stack ที่เข้าถึงไม่ได้ผ่านรหัสจากปลายทางปัจจุบัน เนื่องจากเส้นทางได้รับการสนับสนุนโดยรหัส ปลายทางที่สร้างด้วยเส้นทางจึงได้รับผลกระทบด้วย นอกจากนี้ยังแก้ไขข้อขัดข้องที่เกิดจากการเรียกใช้
clearBackStack()
ซึ่งมีปัญหาพื้นฐานเดียวกันด้วย (I423c3, b/339908057)
เวอร์ชัน 2.8.0-beta01
14 พฤษภาคม 2024
androidx.navigation:navigation-*:2.8.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
SavedStateHandle.toRoute()
ตอนนี้รับพารามิเตอร์typeMap
สำหรับประเภทอาร์กิวเมนต์ที่กำหนดเองแล้ว (Ie39fb, b/339026523)- เพิ่ม API สำหรับทดสอบใน
navigation-testing
เพื่อสร้างSavedStateHandle
จากออบเจ็กต์ Kotlin Serializable (Id4867, b/339080702)
การแก้ไขข้อบกพร่อง
- เพิ่มเอกสารพารามิเตอร์ที่ขาดหายไปสำหรับฟังก์ชัน Kotlin DSL ของ Navigation แล้ว (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
ซึ่งรวมถึงNavGraph
startDestinations
ที่ซ้อนกันด้วย (I0e0b5, b/109505019, b/188693139)
การเปลี่ยนแปลง API
- เพิ่มคลาส
CollectionNavType<T>
ใหม่ที่เป็นนามธรรม ซึ่งเป็นคลาสย่อยของNavType<T>
สำหรับอาร์กิวเมนต์ที่อิงตามคอลเล็กชัน เช่น รายการ อาร์เรย์ แผนที่ (Ic6d63, b/188693139) - ตอนนี้อาร์เรย์
NavType
เริ่มต้นทั้งหมด (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
และStringArrayType
) มีประเภทเป็นCollectionNavType
(Idcf79, b/188693139) NavType
มี API แบบเปิดใหม่valueEquals
ที่ระบุว่าค่า 2 ค่าที่มีประเภทเดียวกันเท่ากันหรือไม่ (I6cb97, b/327229511)
การแก้ไขข้อบกพร่อง
- ตอนนี้พารามิเตอร์การค้นหาใน Deep Link อนุญาตให้ใช้ค่าในรูปแบบของเครื่องหมายปีกกาที่อยู่รอบชื่ออาร์กิวเมนต์ (เช่น
{argName}
) เป็นค่าที่ถูกต้องสำหรับNavTypes
ที่อิงตามสตริง การดำเนินการนี้จะแก้ไขปัญหาที่ค่าดังกล่าวจะถือว่าไม่ถูกต้อง (หรือไม่มีค่า) สำหรับทุกประเภท (I18302, b/327274038) - ตอนนี้ฟังก์ชัน
NavController
ที่รองรับเส้นทาง เช่นnavigate
หรือpopBackStack
จะจับคู่เส้นทางที่กรอกด้วยอาร์กิวเมนต์ของอาร์เรย์NavTypes
ได้อย่างถูกต้องแล้ว (Iea805, b/327229511)
เวอร์ชัน 2.8.0-alpha04
6 มีนาคม 2024
androidx.navigation:navigation-*:2.8.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณระบุ
SizeTranform
สำหรับการเปลี่ยนฉากใน Navigation Compose ได้แล้วโดยกำหนดให้เป็นส่วนหนึ่งของการเริ่มต้นสำหรับฟังก์ชันcomposable
และ/หรือnavigation
(I91062, b/296912651)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
NavHost
ใน Compose Navigation แสดงการเปลี่ยนไม่ถูกต้องเมื่อใช้ "กลับของระบบ" โดยไม่ใช้ท่าทางสัมผัส (Iceeae, b/325998468)
เวอร์ชัน 2.8.0-alpha03
21 กุมภาพันธ์ 2024
androidx.navigation:navigation-*:2.8.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
NavBackStackEntry.savedStateHandle
มีเครื่องหมายเป็น@MainThread
เนื่องจากใช้โค้ดที่ต้องอยู่ในเทรดหลักอยู่แล้ว (Ibb988, b/299523245)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางที่ทำให้
NavGraph
ViewModelsDESTROYED
ทำงานเร็วเกินไปเนื่องจาก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 รองรับการย้อนกลับในแอปที่คาดการณ์ได้ผ่าน
SeekableTransitionState
API ใหม่จาก 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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ฟังก์ชัน
NavGraph
equals()
จะพิจารณาโหนดของกราฟอื่นอย่างถูกต้องแทนที่จะพิจารณาเฉพาะโหนดที่เรียกใช้ ซึ่งจะช่วยให้มั่นใจได้ว่ากราฟที่มีโหนดซึ่งมีรหัสต่างกันจะไม่ถือว่าเท่ากันอีกต่อไป (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.DESTROYED
ViewModel
(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
NavBackStackEntry
arguments
และ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
ที่ว่างเปล่าโดยใช้navDeepLink
Kotlin 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
ซึ่งหมายความว่าตอนนี้NavBackStackEntry
Lifecycle
จะรอให้เอฟเฟกต์พิเศษของ Fragment ที่เข้าและออกเสร็จสมบูรณ์ก่อนที่จะย้ายLifecycle.State
สุดท้ายDialogFragmentNavigator
ตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัปNavBackStackEntries
ซึ่งหมายความว่าตอนนี้NavBackStackEntry
Lifecycle
จะรอให้DialogFragment
Lifecycle
ย้ายไปที่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
ที่นำรายการออกในเฟรมเดียวกัน ตอนนี้รายการสูงสุดที่ได้ในสแต็กย้อนกลับจะทำให้กลับไปที่RESUMED
Lifecycle.State
ได้อย่างสม่ำเสมอ (Id8067, b/276495952)
เวอร์ชัน 2.6.0-alpha09
5 เมษายน 2023
androidx.navigation:navigation-*:2.6.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha09 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการตรวจสอบเส้นทางที่ไม่ถูกต้องเพื่อให้หาก
NavDestination
มีNavArgument
ที่ไม่ใช่ค่าว่าง เส้นทางของปลายทางนี้ต้องมีตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์ที่มีชื่อเดียวกับNavArgument
ที่ไม่ใช่ค่าว่าง (Ic62bf, b/274697949) - การนำทาง Deep Link ที่อิงตาม
Action/MimeType
จะล้มเหลวหากการดำเนินการนำทางไม่มีNavArgument
ที่ต้องระบุซึ่งไม่เป็นค่าว่างตามที่NavDestination
กำหนด ซึ่งAction/MimeType
ตรงกัน (Ibfa17, b/271777424) - เมื่อ
NavController
ตั้งค่ากราฟที่มีเส้นทางและปลายทางเดียวกันกับกราฟก่อนหน้า ตอนนี้ระบบจะแทนที่โหนดกราฟปัจจุบันและปลายทางในสแต็กย้อนกลับด้วยอินสแตนซ์ใหม่ได้อย่างถูกต้อง การแก้ไขนี้จะช่วยแก้ปัญหาการขัดข้องเมื่อใช้onLaunchSingleTop
โดยไม่ได้บันทึกสถานะใน Navigation Compose นอกจากนี้ยังแก้ไขข้อผิดพลาดที่การไปยังปลายทางที่เชื่อมโยงกับกราฟรูททำให้เกิดการสร้างสแต็กย้อนกลับที่ไม่ถูกต้องด้วย (I5bc58, b/275258161, b/275407804)
เวอร์ชัน 2.6.0-alpha08
22 มีนาคม 2023
androidx.navigation:navigation-*:2.6.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha08 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavHostFragment
ช่วยให้คุณดึงNavController
ได้ทันทีที่NavHostFragment
ติดอยู่กับFragmentManager
แทนที่จะต้องรอหลังจากonCreate()
เท่านั้น (Ic6382, b/220186282)
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อแสดงกราฟที่ซ้อนกันซึ่งมีอาร์กิวเมนต์ที่ต้องระบุ (6b3581, b/249988437) - เมื่อใช้การย้อนกลับของระบบหลังจากนำทางด้วย
popUpTo
สถานะของNavController
จะปรากฏขึ้นที่รายการที่ถูกต้อง (I3a8ec, b/270447657) FragmentNavigator
จะแสดงรายการอย่างถูกต้องเมื่อมีการป๊อปแบ็กสแต็กผ่านการย้อนกลับของระบบหรือpopBackStack()
และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับ Fragment หรือไม่ก็ตาม (I81bdf)- การเพิ่ม Fragment ไปยัง
FragmentNavigator
'sFragmentManager
โดยไม่ใช้การนำทางจะไม่ทำให้เกิดข้อขัดข้องอีกต่อไป (b17204, b/274167493)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับวงจร
2.6.1
(586fe7) - ตอนนี้การนำทางจะขึ้นอยู่กับ SavedState
1.2.1
(078e4e) - ตอนนี้การนำทางจะขึ้นอยู่กับ ProfileInstaller
1.3.0
(512f0c)
เวอร์ชัน 2.6.0-alpha07
8 มีนาคม 2023
androidx.navigation:navigation-*:2.6.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.6.0-alpha07 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ตัวแปร API
getBackStackEntry
,popBackStack
,clearBackStack
ที่ใช้เส้นทางจะใช้รูปแบบเส้นทางที่มีอาร์กิวเมนต์และพารามิเตอร์การค้นหาที่อนุญาตให้เป็นค่าว่าง (I22294, b/269302500) - แก้ไขปัญหาที่การเรียก
clearBackStack()
จากNavController
จะไม่ล้างสถานะที่บันทึกไว้ใน FragmentManager ที่เชื่อมโยงกับ Back Stack ที่ล้างแล้ว (Ic1cce, b/271190202) - แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้ไฮไลต์
MenuItem
ที่ไม่ถูกต้องในBottomNavigationView
เมื่อใช้การย้อนกลับของระบบระหว่างแท็บ (I634f6, b/270447657) - แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้
NavBackStackEntry
ไม่ย้ายไปที่สถานะ RESUMED เมื่อใช้Animation
(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
ให้กับNavController
navigate
ทั้งหมดที่โอเวอร์โหลดแล้ว เพื่อให้มั่นใจว่าระบบจะเรียกใช้ฟังก์ชันเหล่านั้นในเทรดหลัก (I2c0b0, b/263427111)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการขัดข้องเมื่อพยายามไปยังส่วนต่างๆ ขณะใช้การนำทางแบบไดนามิกของ Fragment (I3ee29, b/268360479)
- แก้ไขข้อบกพร่องที่การไปยังส่วนอื่นผ่านปุ่มย้อนกลับของระบบไม่ทำให้แถบด้านล่างอัปเดตเป็นรายการที่เลือกที่ถูกต้อง (If559f, b/269044426)
ปัญหาที่ทราบ
- เมื่อใช้การนำทางกับ Fragment
NavBackStackEntry
's Lifecycle จะไม่ถึงRESUMED
เมื่อใช้ API ของAnimation
(b/269646882) - เมื่อใช้การนำทางกับ Fragment และนำทางด้วย
BottomNavigation
หากคุณพยายามกู้คืน Back Stack ที่มีหลายรายการ ระบบจะไม่สามารถอัปเดตBottomMenuItem
ได้อย่างถูกต้อง (b/270447657) - เมื่อใช้การนำทางกับ Fragment หลังจากกู้คืนสถานะแล้ว
NavBackStackEntry
Lifecycle
จะไม่ได้รับ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
ซึ่งหมายความว่าตอนนี้NavBackStackEntry
Lifecycle
จะรอให้เอฟเฟกต์พิเศษของ Fragment ที่เข้าและออกเสร็จสมบูรณ์ก่อนที่จะย้ายLifecycle.State
สุดท้าย (I3cb19, b/238686802)DialogFragmentNavigator
ตอนนี้ใช้ Transition API เมื่อไปยังส่วนต่างๆ และป๊อปอัปNavBackStackEntries
ซึ่งหมายความว่าตอนนี้NavBackStackEntry
Lifecycle
จะรอให้DialogFragment
Lifecycle
ย้ายไปที่DESTROYED
ก่อนที่จะย้ายไปที่DESTROYED
เอง (I53ee5, b/261213893)
การเปลี่ยนแปลง API
- ตอนนี้
NavigatorState
มีprepareForTransition
API เพื่อให้Navigator
ย้ายNavBackStackEntries
ไปยังLifecycle.State
ระดับกลางได้ (I42c21, b/238686802) - ตอนนี้คุณเข้าถึงสแต็กย้อนกลับที่เชื่อมโยงกับ
NavGraphNavigator
หรือComposeNavigator
ผ่านพร็อพเพอร์ตี้backstack
ได้แล้วComposeNavigator
ยังแสดงonTransitionComplete()
การเรียกกลับเพื่อทำเครื่องหมายNavBackStackEntry
ที่ดำเนินการนำทางหรือการดำเนินการpopBackStack
ว่าเสร็จสมบูรณ์แล้วด้วย (I02062, I718db, b/257519195)
การแก้ไขข้อบกพร่อง
- ตอนนี้สถานะ Navigator จะไม่ดำเนินการใดๆ เมื่อใช้
push/popWithTransition
API และมีการจัดการรายการอยู่แล้ว (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) - จากการนำทาง
2.5.3
: แก้ไขปัญหาที่ระบบไม่ลืมและนำสถานะการเขียนที่บันทึกไว้ (เช่น การใช้งาน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
ที่ว่างเปล่าโดยใช้navDeepLink
Kotlin 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
การเปลี่ยนแปลงอื่นๆ
visibleEntries
API ไม่ใช่เวอร์ชันทดลองอีกต่อไป และมีฟังก์ชันในการดึงข้อมูลรายการทั้งหมดที่ปลายทางมองเห็นได้ในปัจจุบันตาม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) visibleEntries
StateFlow
ที่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) NavDeepLink
s จะไม่ถอดรหัสอาร์กิวเมนต์ซ้ำ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้ระบบจะส่งอาร์กิวเมนต์ที่เหมาะสมไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399)
Safe Args
- ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Navigation Safe Args จะใช้กับ Android Studio เวอร์ชันก่อน 7.0 ไม่ได้อีกต่อไป แต่จะใช้ได้กับ Android Gradle Plugin 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
:NavDeepLink
s ไม่ต้องถอดรหัสอาร์กิวเมนต์ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้ระบบจะส่งอาร์กิวเมนต์ที่ถอดรหัสอย่างถูกต้องไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399) - พอร์ตจาก Navigation
2.5.0-alpha01
: ตอนนี้ Safe Args ขึ้นอยู่กับปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Navigation Safe Args จะใช้กับ Android Studio เวอร์ชันก่อน 7.0 ไม่ได้อีกต่อไป แต่จะใช้ได้กับปลั๊กอิน Android Gradle 7.1.0 ขึ้นไป (I41c88, b/213086135, b/207670704)
เวอร์ชัน 2.4.0
เวอร์ชัน 2.4.0
26 มกราคม 2022
androidx.navigation:navigation-*:2.4.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- เราได้เขียนอาร์ติแฟกต์การนำทางทั้งหมดใหม่ใน Kotlin ซึ่งช่วยปรับปรุงความสามารถในการกำหนดค่า Null ของคลาสที่ใช้ Generics (เช่น คลาสย่อย
NavType
) ฟังก์ชันส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์-ktx
ได้ย้ายไปอยู่ในอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว-ktx
อาร์ติแฟกต์จะยังคงเผยแพร่ต่อไป แต่จะไม่มีข้อมูลใดๆ - ตอนนี้อาร์ติแฟกต์
navigation-fragment
มีการใช้งานที่สร้างไว้ล่วงหน้าของเลย์เอาต์แบบ 2 บานหน้าต่างผ่านAbstractListDetailFragment
ใหม่ Fragment นี้ใช้SlidingPaneLayout
เพื่อจัดการบานหน้าต่างรายการ (ซึ่งคลาสย่อยของคุณมีให้) และบานหน้าต่างรายละเอียด ซึ่งใช้NavHostFragment
เป็นการติดตั้งใช้งาน ดังที่เห็นในการติดตั้งใช้งานตัวอย่าง - เมธอด
currentBackStackEntryAsFlow()
ในNavController
มีFlow
ที่จะปล่อยค่าออกมาทุกครั้งที่NavBackStackEntry
ปัจจุบันมีการเปลี่ยนแปลง คุณใช้โฟลว์นี้แทนการจัดการOnDestinationChangedListener
ด้วยตนเองได้ - ตอนนี้ NavController มีความสามารถในการดึงรายการอินสแตนซ์
NavBackStackEntry
ที่มองเห็นได้ทั้งหมดเป็นStateFlow
ผ่านพร็อพเพอร์ตี้visibleEntries
ที่เป็นเวอร์ชันทดลอง - ตอนนี้คุณสามารถขยายคลาส
NavType
เพื่อสร้าง NavType ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรมเท่านั้น เช่น ผ่าน Navigation Graph Kotlin DSL ตอนนี้การนำทางมี API
findStartDestination()
และgetHierarchy()
ที่ใช้ช่วยในการติดตั้งใช้งาน 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 ดังนี้
- เราได้เลิกใช้งานพร็อพเพอร์ตี้
popUpTo
Kotlin ใน Kotlin DSL แล้วเพื่อรองรับpopUpToId
- เราได้เลิกใช้งาน
getStartDestination()
API แล้วเพื่อหันไปใช้getStartDestinationId()
แทน
การไปยังส่วนต่างๆ ตามเส้นทางจะทำตามกฎเดียวกันกับDeep Link โดยนัย ซึ่งแตกต่างจากการไปยังส่วนต่างๆ ตามรหัสตรงที่สามารถไปยังปลายทางใดก็ได้ในกราฟที่ซ้อนกัน เพื่อให้มั่นใจว่าเส้นทางเหล่านี้ใช้ได้ในโปรเจ็กต์แบบหลายโมดูลโดยไม่ต้องเพิ่ม Deep Link ที่มองเห็นได้ภายนอกไปยังแต่ละปลายทางอย่างชัดเจน
Navigation Compose
อาร์ติแฟกต์ navigation-compose
ช่วยให้ผสานรวมระหว่าง Navigation Component กับ Jetpack Compose ได้ โดยจะใช้@Composable
ฟังก์ชันเป็นปลายทางในแอปพลิเคชัน
รุ่นนี้มีสิ่งต่อไปนี้
NavHost
Composable ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL โดยใช้ปลายทางcomposable
และdialog
รวมถึงรองรับ Navigator ที่ไม่บังคับ เช่น Navigator จาก Accompanist Navigation Material- ต้องรองรับการเปลี่ยนเพลงแบบค่อยๆ ระหว่างปลายทาง ภาพเคลื่อนไหวการนำทางของ Accompanist สามารถใช้เพื่อควบคุมการเปลี่ยนฉากเข้าและออกได้โดยใช้ Compose API เวอร์ชันทดลอง
- การกำหนดขอบเขตของ
Lifecycle
ไปยังปลายทางที่ประกอบได้แต่ละรายการ ปลายทางแต่ละแห่งจะเข้าสู่สถานะRESUMED
เมื่อการเปลี่ยนผ่านขาเข้าเสร็จสิ้น และจะเปลี่ยนเป็นSTARTED
ทันทีเมื่อการเปลี่ยนผ่านขาออกเริ่มต้น จึงช่วยให้คุณหลีกเลี่ยงปัญหาIllegalStateException
และปัญหาแบบมัลติแชแนลได้โดยการทริกเกอร์การเรียกnavigate
เมื่อLifecycle
เป็นRESUMED
เท่านั้น - การกำหนดขอบเขตของ
ViewModel
(ผ่านviewModel()
API ของ Lifecycle ViewModel Compose2.4.0
หรือhiltViewModel()
ของ Hilt Navigation Compose1.0.0
ที่ระดับปลายทาง โดยให้ขอบเขตที่ยังคงอยู่แม้จะมีการเปลี่ยนแปลงการกำหนดค่าและอยู่ใน Back Stack (เมื่อมีการทิ้งเนื้อหาที่เขียนด้วย Compose) และสัญญาณในonCleared()
ของ ViewModel ซึ่งบ่งบอกถึงการทิ้งอย่างถาวรและการล้างสถานะที่เชื่อมโยงกับNavBackStackEntry
นั้น - การกำหนดขอบเขตของสถานะ
rememberSaveable
ที่ระดับปลายทาง เพื่อให้มั่นใจว่าระบบจะบันทึกและกู้คืนสถานะที่ประกอบได้ทั้งหมดโดยอัตโนมัติเมื่อคุณกลับไปยังปลายทาง - รองรับการบันทึกและกู้คืนสถานะของ
NavController
และสถานะของปลายทางอย่างเต็มรูปแบบหลังจากกระบวนการสิ้นสุดลงและมีการสร้างใหม่ - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการส่งผลลัพธ์กลับไปยังปลายทางก่อนหน้า
เขียนตัวช่วยที่เฉพาะเจาะจงใน
rememberNavController()
และcurrentBackStackEntryAsState()
เพื่ออนุญาตการยกเลิกสถานะและเชื่อมต่อNavController
กับ Composable นอกNavHost
(เช่น แถบนำทางด้านล่าง)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการนำทาง Compose
การย้อนกลับหลายครั้ง
NavController มีหน้าที่จัดการ Back Stack ของปลายทาง เพิ่มปลายทางไปยัง Back Stack เมื่อคุณnavigate()
ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack()
หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions
ที่มีอยู่และการผสานรวมกับองค์ประกอบ <action>
ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและกู้คืน Back Stack
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI
ของ onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
และ NavigationView.setupWithNavController()
บันทึกและกู้คืนสถานะของปลายทางที่ป๊อปอัปโดยอัตโนมัติ ซึ่งช่วยให้รองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางกับ Fragment วิธีที่แนะนำในการผสานรวมกับ Back Stack หลายรายการคือการใช้ NavigationUI
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” />
ใน
navOptions
Kotlin DSL คุณสามารถเพิ่มพร็อพเพอร์ตี้บูลีนrestoreState
และพร็อพเพอร์ตี้บูลีนsaveState
ในบิลเดอร์popUpTo
ได้// 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()
ซึ่งเป็น เมธอดที่อัปเดตNavBackStackEntry
Lifecycle
เป็น@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) - แก้ไขปัญหาที่
onNavDestinationSelected
API ใน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
- ตอนนี้
visibleEntries
API อยู่ในเวอร์ชันทดลอง (I93f6f)
การแก้ไขข้อบกพร่อง
- ระบบจะไม่ทำลาย ViewModel อีกต่อไปเมื่อการเปลี่ยนผ่านถูกขัดจังหวะด้วยการไปยังหน้าจอเดียวกันไปมา (Id52d8, b/200817333)
- อาร์กิวเมนต์
NavDeepLink
ที่อนุญาตให้เป็นค่าว่างไม่จำเป็นต้องมีค่าเริ่มต้นอีกต่อไปเมื่อเพิ่ม 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
ทั้งหมดที่มองเห็นได้ผ่านvisibleEntries
StateFlow (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
- ตอนนี้ฟังก์ชัน
navArgument
Kotlin 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)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การเขียนการนำทางจะขึ้นอยู่กับ 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 สกัดกั้นปุ่มย้อนกลับ แม้ว่าจะไม่มีสแต็กย้อนกลับที่จะแสดงก็ตาม (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 และปลายทางเดียวกันในกราฟจะถือว่า
เท่ากันและจะไม่ล้าง
NavController
Back 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
ที่กำหนดเองสามารถใช้ APIpushWithTransaction
และ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
หรืออาร์ติแฟกต์ใดๆ ที่ขึ้นอยู่กับกฎดังกล่าว (I68800, b/190082521) OnDestinationChangedListener
ที่เรียกใช้navigate()
เป็นครั้งแรกที่ได้รับแฮนเดิลการเรียกกลับจะ ได้รับการเรียกกลับครั้งที่ 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)ตอนนี้การนำทางมี API
findDestination()
และgetHierarchy()
ที่ใช้ช่วยในการติดตั้งใช้งาน 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 หลายรายการคือการใช้ NavigationUI (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” />
ใน
navOptions
Kotlin DSL คุณสามารถเพิ่มพร็อพเพอร์ตี้บูลีนrestoreState
และพร็อพเพอร์ตี้บูลีนsaveState
ในบิลเดอร์popUpTo
ได้// 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 ดังนี้
- เราได้เลิกใช้งานพร็อพเพอร์ตี้
popUpTo
kotlin ใน 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()
ซึ่งเป็น เมธอดที่อัปเดตNavBackStackEntry
Lifecycle
เป็น@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
ซึ่งจะส่งต่อไปยัง คอนเทนเนอร์ที่ใช้ร่วมกันได้ซึ่งรวม Composable ปลายทาง (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
จะป้อนข้อมูลLocalSavedStateRegistryOwner
CompositionLocal ด้วยNavBackStackEntry
ของปลายทางนั้น เพื่อให้แน่ใจว่าสถานะใดก็ตามที่บันทึกลงในSavedStateRegistry
โดยตรงจะได้รับการบันทึกและกู้คืนพร้อมกับปลายทาง (I435d7, b/179469431)
เวอร์ชัน 1.0.0-alpha07
10 กุมภาพันธ์ 2021
androidx.navigation:navigation-compose:1.0.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Lifecycle ViewModel Compose 1.0.0-alpha01 เพื่อให้การรองรับ
viewModel()
สำหรับปลายทางcomposable
(I7a374) NavHost
ตอนนี้ใช้LocalOnBackPressedDispatcherOwner
ใหม่จาก Activity-Compose 1.3.0-alpha01 เพื่อรับOnBackPressedDispatcher
ที่ตั้งค่าไว้ในNavController
(I65b12)
เวอร์ชัน 1.0.0-alpha06
28 มกราคม 2021
androidx.navigation:navigation-compose:1.0.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
getBackStackEntry(route: String)
เมธอดส่วนขยายในNavController
ที่แสดงผลNavBackStackEntry
ที่เชื่อมโยง (If8931)
เวอร์ชัน 1.0.0-alpha05
13 มกราคม 2021
androidx.navigation:navigation-compose:1.0.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้
อัปเดตให้ขึ้นอยู่กับ Compose 1.0.0-alpha10
เวอร์ชัน 1.0.0-alpha04
16 ธันวาคม 2020
androidx.navigation:navigation-compose:1.0.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตเหล่านี้
- อัปเดตให้เข้ากันได้กับ Compose
1.0.0-alpha09
เวอร์ชัน 1.0.0-alpha03
2 ธันวาคม 2020
androidx.navigation:navigation-compose:1.0.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
popBackStack()
และnavigateUp()
ไม่ทำงานหลังจากเปลี่ยนการกำหนดค่าหรือกระบวนการสิ้นสุดและสร้างใหม่ (Icea47, b/173281473) - ตอนนี้การไปยังกราฟที่ซ้อนกันภายใน NavHost ทำงานได้อย่างถูกต้องแล้ว (I0948d, b/173647694)
เวอร์ชัน 1.0.0-alpha02
11 พฤศจิกายน 2020
androidx.navigation:navigation-compose:1.0.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ขณะนี้ Navigation Compose รองรับ NavOptions สำหรับการใช้การดำเนินการ popUpTo และ launchSingleTop แล้ว (If96c3, b/171468994)
- เพิ่มฟังก์ชันการนำทางที่ใช้เส้นทางแทน รหัส ซึ่งช่วยให้คุณสร้างกราฟที่ซ้อนกันใน Navigation Compose DSL ได้ (I1661d)
- ตอนนี้ startDestination จะอยู่ก่อนเส้นทางในรายการพารามิเตอร์สำหรับ NavHost (Ie620e)
- ตอนนี้คุณสร้างกราฟได้โดยใช้เส้นทางเป็นจุดเริ่มต้น ปลายทางภายนอก Composable ของ NavHost (Iceb75)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
android.navigation:navigation-compose:1.0.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ navigation-compose
ช่วยให้ผสานรวมระหว่าง Navigation Component กับ Jetpack Compose ได้ โดยจะใช้@Composable
ฟังก์ชันเป็นปลายทางในแอปพลิเคชัน
การเปิดตัวครั้งแรกนี้มีฟีเจอร์ต่อไปนี้
NavHost
Composable ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน 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
สำหรับคำขอพุลเพื่ออนุญาตให้defaultValue
สำหรับอาร์กิวเมนต์ที่มีapp:argType=”float”
รองรับค่าเริ่มต้นที่เป็นจำนวนเต็มแล้ว (#117, b/173766247)
เวอร์ชัน 2.3.3
เวอร์ชัน 2.3.3
27 มกราคม 2021
androidx.navigation:navigation-*:2.3.3
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ไม่มีข้อขัดข้องอีกต่อไปเมื่อป๊อปอัป
NavBackStackEntry
ก่อนที่จะย้ายLifecycle
ไปยังCREATED
(Ie3ba3) - แก้ไขการถดถอยที่เกิดจาก b/171364502 ซึ่งการไปยังกิจกรรมที่มีค่าทรัพยากรภาพเคลื่อนไหวเป็น
0
ทำให้เกิดResourceNotFoundException
(I7aedb, b/176819931)
เวอร์ชัน 2.3.2
เวอร์ชัน 2.3.2
2 ธันวาคม 2020
androidx.navigation:navigation-*:2.3.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.2 มีคอมมิตต่อไปนี้
การแก้ไขข้อบกพร่อง
- แก้ไขการถดถอยใน
NavigationUI
ซึ่งการใช้ปลายทาง<activity>
กับonNavDestinationSelected
จะนำไปยังกิจกรรมไม่สำเร็จ (I22e34, b/171364502) - แก้ไขปัญหาที่
navigation-dynamic-features-fragment
จะทําให้ไปยังปลายทางที่ติดตั้งใหม่หลายครั้ง (aosp/1486056, b/169636207) - แก้ไขปัญหาที่ระบบจะไม่ส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์
OnDestinationChangedListener
เมื่อใช้launchSingleTop
(I2c5cb) - แก้ไขปัญหาที่การไปยังกราฟการนำทางที่ซ้อนกันจะไม่สร้างอินสแตนซ์กราฟใหม่ในสแต็กย้อนกลับ (Ifc831)
- แก้ไขปัญหาที่การใช้
navigate()
กับpopUpTo
ที่นำปลายทางสุดท้ายในกราฟการนำทางออกจะไม่ทำลายและนำกราฟการนำทางออกจากสแต็กย้อนกลับทันที (I910a3) - ตอนนี้ Navigation SafeArgs ใช้ KotlinPoet เวอร์ชัน 1.7.2 ซึ่งเพิ่มการรองรับโหมด API ที่ชัดเจนของ Kotlin (I918b5)
NavHostFragment.findNavController(Fragment)
ตอนนี้ยังตรวจสอบมุมมองการตกแต่งรูทของ DialogFragment นอกเหนือจากการตรวจสอบลำดับชั้นของ Fragment และลำดับชั้นของมุมมองของ Fragment ที่มีอยู่ด้วย ซึ่งจะช่วยให้คุณทดสอบ DialogFragment ที่ใช้ Navigation ด้วยFragmentScenario
และNavigation.setViewNavController()
ได้ (I69e0d)
เวอร์ชัน 2.3.1
เวอร์ชัน 2.3.1
14 ตุลาคม 2020
androidx.navigation:navigation-*:2.3.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.1 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ระบบได้เพิ่มทรัพยากร Animator เริ่มต้นลงใน UI การนำทางแล้ว และขอแนะนำให้ใช้ทรัพยากรดังกล่าวแทนทรัพยากรภาพเคลื่อนไหวเริ่มต้น (b/167430145)
- ตอนนี้ NavOptions จะลบล้างเมธอดแฮชโค้ดและเมธอดเท่ากับ (b/161586466)
- ตอนนี้การนำทางมีปลายทางปัจจุบันใน IllegalArgumentException "ไม่มีปลายทางที่มีรหัส" ซึ่งจะช่วยปรับปรุงประสบการณ์การแก้ไขข้อบกพร่องของนักพัฒนาแอป (b/168311416)
การแก้ไขข้อบกพร่อง
- Safe Args จะไม่ตัดบรรทัดที่ส่งคืนอีกต่อไป แม้ว่าชื่อคลาสอาร์กิวเมนต์ที่สร้างขึ้นจะยาวกว่า 100 อักขระก็ตาม (b/168584987)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้
navigation-ui
ขึ้นอยู่กับ DrawerLayout 1.1.1 เพื่อให้มั่นใจว่าNavigationUI
สามารถเปิดลิ้นชักได้ แม้จะใช้LOCK_MODE_LOCKED_CLOSED
หรือLOCK_MODE_LOCKED_OPEN
ก็ตาม (b/162253907) - ตอนนี้ Safe Args ขึ้นอยู่กับ KotlinPoet 1.6.0 (aosp/1435911)
- ตอนนี้ Safe Args ต้องใช้ AGP 4.0.1 (aosp/1442337)
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
24 มิถุนายน 2020
androidx.navigation:navigation-*:2.3.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
- การผสานรวมโมดูลฟีเจอร์: อาร์ติแฟกต์
navigation-dynamic-features-runtime
และnavigation-dynamic-features-fragment
ช่วยให้คุณไปยังปลายทางที่กำหนดไว้ในโมดูลฟีเจอร์ได้ โดยระบบจะจัดการการติดตั้งโมดูลฟีเจอร์โดยอัตโนมัติตามต้องการ ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ ด้วยโมดูลฟีเจอร์ - การทดสอบการนำทาง: อาร์ติแฟกต์
navigation-testing
มีTestNavHostController
ที่ช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กย้อนกลับหลังจากการดำเนินการนำทางได้ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบการนำทาง - การแสดงผลลัพธ์:
NavBackStackEntry
ที่เชื่อมโยงกับแต่ละปลายทางใน Back Stack ของการนำทางจะช่วยให้คุณเข้าถึงSavedStateHandle
ที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการ Back Stack ที่เฉพาะเจาะจง ดูข้อมูลเพิ่มเติมได้ที่การส่งผลลัพธ์ไปยังปลายทางก่อนหน้า NavigationUI
รองรับOpenable
: การใช้งานDrawerLayout
ทั้งหมดในNavigationUI
ถูกแทนที่ด้วยอินเทอร์เฟซOpenable
ที่เป็นแบบทั่วไปมากขึ้นซึ่งเพิ่มเข้ามาใน CustomView1.1.0
และใช้งานโดยDrawerLayout
ใน DrawerLayout1.1.0
- การรองรับการดำเนินการและประเภท MIME ใน Deep Link: เราได้ขยายการทำ Deep Link เพื่อรองรับ
app:action
และapp:mimeType
นอกเหนือจากapp:uri
ที่มีอยู่ก่อนหน้านี้NavController
รองรับการไปยังส่วนต่างๆ ตามการผสมผสานของช่องเหล่านี้ผ่านคลาสNavDeepLinkRequest
ใหม่แล้ว ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ โดยใช้ NavDeepLinkRequest
ปัญหาที่ทราบ
- Manifest Merger ยังไม่รองรับการดำเนินการ Deep Link และประเภท MIME จนกว่าจะดำเนินการเสร็จสมบูรณ์
<intent-filter>
ที่สร้างขึ้นจากองค์ประกอบ<nav-graph>
ในไฟล์ Manifest จะไม่มี MIME ประเภทในองค์ประกอบ<data>
หรือ<action>
ที่กำหนดเอง คุณต้องเพิ่ม<intent-filter>
ที่เหมาะสมลงในไฟล์ Manifest ด้วยตนเอง
เวอร์ชัน 2.3.0-rc01
10 มิถุนายน 2020
androidx.navigation:navigation-*:2.3.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อแทนที่อินสแตนซ์ของปลายทางที่ไม่มีอาร์กิวเมนต์ด้วยอินสแตนซ์อื่นที่มีอาร์กิวเมนต์ด้วยsingleTop
(b/158006669) - ตอนนี้ข้อยกเว้นทั้งหมดที่
destination is unknown
NavController
แสดงจะมีข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติมเพื่อช่วยระบุสถานะของNavController
(b/157764916)
เวอร์ชัน 2.3.0-beta01
20 พฤษภาคม 2020
androidx.navigation:navigation-*:2.3.0-beta01
ได้รับการเผยแพร่ เวอร์ชัน 2.3.0-beta01 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
Lifecycle
ของNavBackStackEntry
จะไม่อัปเดตอย่างถูกต้องหลังจากกระบวนการสิ้นสุด (b/155218371) - ตอนนี้ระบบจะส่งอินสแตนซ์
OnDestinationChangedListener
ที่ลงทะเบียนก่อนเรียกใช้setGraph()
ไปยังปลายทางที่กู้คืนอย่างถูกต้องหลังจากที่กระบวนการสิ้นสุดลง (b/155218371) - เมื่อใช้
singleTop
ตอนนี้NavBackStackEntry
จะอัปเดตอาร์กิวเมนต์อย่างถูกต้องแล้ว และระบบจะส่งอาร์กิวเมนต์ที่อัปเดตไปยังอินสแตนซ์OnDestinationChangeListener
ทั้งหมด (b/156545508)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้
NavigationUI
อาร์ติแฟกต์ขึ้นอยู่กับ CustomView1.1.0-rc01
และ DrawerLayout1.1.0-rc01
แล้ว (aosp/1309696)
เวอร์ชัน 2.3.0-alpha06
29 เมษายน 2020
androidx.navigation:navigation-*:2.3.0-alpha06
ได้รับการเผยแพร่แล้ว (เวอร์ชัน 2.3.0-alpha06 มีคอมมิตเหล่านี้)
ฟีเจอร์ใหม่
- เราได้ขยายการลิงก์ในรายละเอียดเพื่อรองรับ
app:action
และapp:mimeType
นอกเหนือจากapp:uri
ที่มีอยู่ก่อนหน้านี้ ตอนนี้ NavController รองรับการไปยังส่วนต่างๆ โดยใช้ฟิลด์เหล่านี้ร่วมกันผ่านคลาสNavDeepLinkRequest
ใหม่แล้ว (b/136573074, b/135334841)
การเปลี่ยนแปลง API
- ขยายการรองรับ Kotlin DSL สำหรับปลายทางการนำทางแบบไดนามิกอย่างมาก (b/148969800)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะเพิกเฉยต่อ Intent ของ Deep Link เมื่อใช้ปลายทางการเริ่มต้นที่ซ้อนกัน (b/154532067)
เวอร์ชัน 2.3.0-alpha05
15 เมษายน 2020
androidx.navigation:navigation-*:2.3.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-alpha05 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
- สำหรับกราฟแบบไดนามิกรวมที่ใช้
<include-dynamic>
คุณไม่จำเป็นต้องระบุapp:graphPackage
อีกต่อไป และระบบจะใช้ค่าเริ่มต้นโดยการเพิ่มคำต่อท้ายmoduleName
ไปยังapplicationId
หลังจุด หากต้องการปรับแต่งgraphPackage
ตอนนี้ระบบรองรับตัวยึดตำแหน่ง${applicationId}
แล้ว (b/152696768) - ตอนนี้ Kotlin DSL ของ Navigation Graph จะแสดง
defaultArguments
Map
สำหรับการดำเนินการ ซึ่งเป็นการจำลองความสามารถในการตั้งค่าเริ่มต้นในองค์ประกอบ<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
คลาสนี้เป็นทางเลือกแทนการใช้NavController
แบบจำลองเมื่อทดสอบการนำทาง ซึ่งช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กย้อนกลับได้หลังจากดำเนินการนำทาง (b/140884273) navigation-dynamic-features-fragment
ใหม่ (และ Dependency แบบทรานซิทีฟ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
, กิจกรรม1.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) - ตอนนี้ Safe Args ที่สร้าง
Directions
คลาส Java จะมีค่าเริ่มต้น (b/141099045) - ตอนนี้ Safe Args ที่สร้าง
Args
คลาส Java จะมีค่าเริ่มต้น (b/140123727) - เมื่อใช้
Toolbar
NavigationUI
จะไม่เคลื่อนไหวการเปลี่ยนแปลงข้อความเมื่อย้ายระหว่างปลายทางระดับบนสุด 2 แห่ง (b/140848160)
เวอร์ชัน 2.2.0-alpha03
18 กันยายน 2019
androidx.navigation:navigation-*:2.2.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.2.0-alpha03 มีคอมมิตต่อไปนี้
การเปลี่ยนแปลงลักษณะการทำงาน
- การโทร
setViewModelStore()
หลังจากโทรsetGraph
จะส่งผลให้เกิดIllegalStateException
NavHost
ควรกำหนดค่านี้เสมอเป็นส่วนหนึ่งของการตั้งค่าเริ่มต้นเพื่อให้มั่นใจว่าอินสแตนซ์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()
สำหรับผู้ใช้ 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) - เมธอด
NavController
setHostOnBackPressedDispatcherOwner()
ถูกแทนที่ด้วยเมธอด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-alpha03
b/132077777- ตอนนี้
DialogFragmentNavigator
จัดการการดำเนินการpopBackStack()
และnavigateUp()
ได้อย่างถูกต้องแล้ว b/132576764 - แก้ไขปัญหา
IllegalStateException: unknown destination during restore
เมื่อไปยังส่วนต่างๆ ระหว่างกราฟที่ซ้อนกันซ้ำๆ b/131733658
เวอร์ชัน 2.1.0-alpha03
7 พฤษภาคม 2019
androidx.navigation:*:2.1.0-alpha03
ได้รับการเผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ปัญหาที่ทราบ
- NavHostFragment ยังคงสกัดกั้นปุ่มย้อนกลับของระบบแม้ว่าจะใช้
app:defaultNavHost="false"
b/132077777
ฟีเจอร์ใหม่
- ตอนนี้คุณสร้างจุดหมายปลายทาง
<dialog>
ที่จะแสดงDialogFragment
เมื่อคุณnavigate
ไปยังจุดหมายปลายทางนั้นได้แล้วNavHostFragment
รองรับปลายทางของกล่องโต้ตอบโดยค่าเริ่มต้น b/80267254 - นอกจากการเรียกใช้
navigate
ด้วยรหัสทรัพยากรหรืออินสแตนซ์NavDirections
แล้ว ตอนนี้คุณยังไปยังส่วนต่างๆ ผ่านUri
ได้ด้วย ซึ่งใช้<deepLink>
ที่คุณเพิ่มไปยังปลายทางเพื่อไปยังปลายทางที่ถูกต้อง b/110412864
การเปลี่ยนแปลงลักษณะการทำงาน
- เราได้เพิ่มความเร็วของภาพเคลื่อนไหวเริ่มต้นที่ NavigationUI มีให้จาก 400 มิลลิวินาทีเป็น 220 มิลลิวินาทีเพื่อให้ตรงกับความเร็วของภาพเคลื่อนไหวเริ่มต้นของกิจกรรมและ Fragment b/130055522
การเปลี่ยนแปลง API
- เราได้เลิกใช้งาน
createFragmentNavigator()
เมธอดของNavHostFragment
แล้ว และย้ายฟังก์ชันการทำงานไปยังเมธอดonCreateNavController()
ใหม่เพื่อให้ชัดเจนยิ่งขึ้นว่านี่คือจุดแรกเข้าที่ถูกต้องในการเพิ่ม Navigator ที่กำหนดเองเมื่อสร้างคลาสย่อยของNavHostFragment
b/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()
สำหรับผู้ใช้ Kotlin หรือโดยใช้ APIgetViewModelStore()
ที่เพิ่มลงในNavController
b/111614463
การเปลี่ยนแปลง API
- ตอนนี้คุณเพิ่ม
app:targetPackage
ไปยังปลายทาง<activity>
เพื่อจำกัดชื่อแพ็กเกจที่ตรงกันได้แล้ว โดยรองรับapp:targetPackage="${applicationId}"
สำหรับการจำกัดแพ็กเกจให้ใช้กับรหัสแอปพลิเคชันของคุณเอง b/110975456
แก้ไขข้อบกพร่อง
- ระบบจะไม่แยกวิเคราะห์
android:name
สำหรับปลายทาง<activity>
เป็นคลาสในเวลาที่เกิดเงินเฟ้ออีกต่อไป ซึ่งจะป้องกันไม่ให้เกิด ClassNotFoundExceptions เมื่อใช้ฟีเจอร์แบบไดนามิก b/124538597
เวอร์ชัน 2.1.0-alpha01
19 มีนาคม 2019
นี่คือรุ่นอัลฟ่าแรกของ Navigation 2.1.0
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้การนำทางจะขึ้นอยู่กับ
androidx.core:core:1.0.1
และandroidx.fragment:fragment:1.1.0-alpha05
นอกจากนี้ รุ่นนี้ยังนำ การอ้างอิงandroidx.legacy:legacy-support-core-utils:1.0.0
ออกด้วย b/128632612
การเปลี่ยนแปลง API
- เราได้เพิ่ม
Navigation.createNavigateOnClickListener(NavDirections)
เมธอดใหม่ เพื่อเป็นทางเลือกแทนการสร้างเครื่องมือฟังการคลิกด้วย รหัสทรัพยากรและ Bundle b/127631752 FragmentNavigator.instantiateFragment
เลิกใช้งานแล้ว ตอนนี้การใช้งานเริ่มต้น ใช้FragmentFactory
เพื่อสร้างอินสแตนซ์ของ Fragment b/119054429
การแก้ไขข้อบกพร่อง
- การนำทางจะไม่ส่งค่าว่าง
Bundle
เมื่อมีอาร์กิวเมนต์แนบมา กับปลายทางอีกต่อไป ซึ่งจะแก้ไขปัญหาเมื่อใช้android:defaultValue="@null"
b/128531879 - ตอนนี้ Safe Args ขึ้นอยู่กับ KotlinPoet 1.1.0 ซึ่งแก้ไขปัญหาเกี่ยวกับ ชื่อแพ็กเกจที่ยาวมาก b/123654948
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
14 มีนาคม 2019
การนำทาง 2.0.0
จะเปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc02
เวอร์ชัน 2.0.0-rc02
6 มีนาคม 2019
Navigation 2.0.0-rc02 มีอาร์ติแฟกต์ใหม่ที่มีรหัสกลุ่ม androidx.navigation
และเปลี่ยนการอ้างอิงเป็นรายการที่เทียบเท่าใน AndroidX
ลักษณะการทำงานของ 2.0.0-rc02 จะเหมือนกับลักษณะการทำงานของ Navigation 1.0.0-rc02 และไม่จำเป็นต้องเปลี่ยนแปลงโค้ดเพื่ออัปเดตจาก 1.0.0-rc02 นอกเหนือจากการอัปเดตการขึ้นต่อกันให้ตรงกับการขึ้นต่อกันใหม่
โปรเจ็กต์ต้องย้ายข้อมูลไปยัง AndroidX เพื่อใช้ Navigation เวอร์ชัน 2.X Navigation 1.0 เวอร์ชันเสถียรจะเป็นรุ่นสุดท้ายที่ใช้การอ้างอิง Support Library การพัฒนาทั้งหมดในอนาคตหลังจากเวอร์ชัน 1.0 จะอิงตาม AndroidX และสร้างขึ้นบนเวอร์ชันเสถียร 2.0
การอ้างอิงก่อน AndroidX
สำหรับ Navigation เวอร์ชันก่อน AndroidX ให้รวมทรัพยากร Dependency เหล่านี้
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
สำหรับ Safe args ให้เพิ่ม classpath ต่อไปนี้ในไฟล์ top level 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_TASK
b/126082008 - แก้ไขปัญหาที่
ActivityNavigator.applyPopAnimationsToPendingTransition
ไม่ใช้ภาพเคลื่อนไหวเมื่อกดออกของป๊อปอัปที่ถูกต้อง b/126237567 - ตอนนี้โค้ด Kotlin ที่สร้างโดย Safe Args จะกำหนดอักขระหลีกสำหรับคีย์เวิร์ด Kotlin อย่างถูกต้อง
เช่น
in
และfun
ในชื่อแพ็กเกจที่เชื่อมโยงกับคลาสR
b/126020455
เวอร์ชัน 1.0.0-rc01
21 กุมภาพันธ์ 2019
นี่คือรุ่นที่อาจได้รับการเผยแพร่สำหรับรุ่นเสถียร 1.0.0 ของ Navigation รุ่นนี้มีการแก้ไขข้อบกพร่อง 1 รายการ
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้ Fragment และการดำเนินการนำทาง
singleTop
b/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-beta01
b/123933201 - ตอนนี้การนำทางจะตั้งค่า
ClassLoader
อย่างถูกต้องในระหว่างการกู้คืน สถานะอินสแตนซ์ที่บันทึกไว้ ซึ่งจะช่วยหลีกเลี่ยงปัญหาเมื่อใช้คลาสที่กำหนดเองในNavigator
สถานะที่บันทึกไว้หรือในอาร์กิวเมนต์ที่ส่งไปยังNavDestination
b/123893858 - คลาส NavArgs ที่สร้างโดย Safe Args จะไม่ขัดข้องอีกต่อไปเมื่อกู้คืนอาร์กิวเมนต์
Parcelable[]
จากสถานะอินสแตนซ์ที่บันทึกไว้ b/123963545 - ตอนนี้ Safe Args จะล้างคลาส Kotlin ที่สร้างขึ้นโดยไม่จำเป็นอย่างถูกต้องแล้ว b/124120883
เวอร์ชัน 1.0.0-beta01
4 กุมภาพันธ์ 2019
นี่คือเวอร์ชันเบต้าแรกของการนำทาง 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
ที่สร้างขึ้นคือ
NavDirections
b/123233147 - คลาสเส้นทางที่สร้างโดย Safe Args จะไม่มีตัวสร้างสาธารณะอีกต่อไป - คุณควรโต้ตอบกับเมธอดแบบคงที่ที่สร้างขึ้นเท่านั้น b/123031660
- คลาส
NavDirections
ที่สร้างขึ้นโดย Safe Args จะไม่มีตัวสร้างสาธารณะอีกต่อไป แต่ควรสร้างผ่านเมธอดแบบคงที่ในคลาส Directions ที่สร้างขึ้น b/122963206 - ตอนนี้ระบบจะทำเครื่องหมาย
Bundle
ที่ส่งคืนจากNavDirections
getArguments()
เป็น@NonNull
แทนที่จะเป็น@Nullable
b/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"
จะไม่แสดงสแต็กย้อนกลับอีกต่อไปเมื่อใช้กับเมธอดNavigationUI
b/120104424AppBarConfiguration
ตอนนี้คุณสามารถตั้งค่าอินสแตนซ์สำรองOnNavigateUpListener
ซึ่งจะเรียกใช้เมื่อnavController.navigateUp()
แสดงผลfalse
b/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
ได้รับการตั้งค่าเป็นfinal
แล้ว aosp/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 คือNonNull
b/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
Navigation 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
Navigation 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
จะกลายเป็นsetDemoControllerIndex
b/79995048 - เช่น
action_show_settings
จะกลายเป็นactionShowSettings
b/79642240
- เช่น
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ตอนนี้ระบบจะถือว่าอาร์กิวเมนต์ไม่ใช่ค่าว่างโดยค่าเริ่มต้น หากต้องการอนุญาตค่า Null ในอาร์กิวเมนต์สตริงและ Parcelable ให้เพิ่ม
app:nullable="true"
b/79642307 - ตอนนี้คุณใช้
app:type="long"
กับ defaultValues ในรูปแบบ "123L" ได้แล้ว b/79563966 - ตอนนี้รองรับอาร์กิวเมนต์ที่สามารถส่งผ่านได้แล้ว โดยใช้ชื่อคลาสที่สมบูรณ์ในตัวเองสำหรับ
app:type
ค่าเริ่มต้นที่รองรับมีเพียง"@null"
b/79563966 - ตอนนี้คลาส Args จะใช้
equals()
และhashCode()
แล้ว b/79642246 - ตอนนี้คุณใช้ปลั๊กอิน Safe Args กับโปรเจ็กต์ไลบรารีได้แล้ว b/80036553
- ตอนนี้คุณใช้ปลั๊กอิน Safe Args กับโปรเจ็กต์ฟีเจอร์ได้แล้ว b/110011752
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อไปยังส่วนต่างๆ ระหว่างเมธอดวงจรของ Fragment b/109916080
- แก้ไขปัญหาเมื่อไปยังส่วนต่างๆ ของกราฟที่ซ้อนกันหลายครั้ง b/110178671
- แก้ไขปัญหาเมื่อใช้
setPopUpTo
กับปลายทางแรกในกราฟ b/109909461 - แก้ไขปัญหาที่ค่า
app:defaultValue
ทั้งหมดถูกส่งเป็นสตริง b/110710788 - ตอนนี้ aapt2 ที่มาพร้อมกับปลั๊กอิน Android Gradle 3.2 Beta 01 จะเพิ่มกฎ keep สำหรับทุกแอตทริบิวต์
android:name
ในไฟล์ XML ของการนำทาง b/79874119 - แก้ไขปัญหาหน่วยความจำรั่วไหลเมื่อแทนที่ FragmentNavigator เริ่มต้น b/110900142
เวอร์ชัน 1.0.0-alpha02
7 มิถุนายน 2018
การเปลี่ยนแปลงลักษณะการทำงาน
ตอนนี้
FragmentNavigator
ใช้setReorderingAllowed(true)
แล้ว b/109826220ตอนนี้การนำทางจะ URLDecode อาร์กิวเมนต์ที่แยกวิเคราะห์จาก URL ของ Deep Link แล้ว b/79982454
การแก้ไขข้อบกพร่อง
แก้ไข
IllegalStateException
เมื่อเรียกใช้ navigate จากเมธอดวงจรของ Fragment b/79632233ตอนนี้การนำทางจะขึ้นอยู่กับ Support Library 27.1.1 เพื่อแก้ไขการกะพริบเมื่อใช้ภาพเคลื่อนไหว b/80160903
แก้ไข
IllegalArgumentException
เมื่อใช้ defaultNavHost="true" เป็น Fragment ย่อย b/79656847แก้ไข
StackOverflowError
เมื่อใช้ NavDeepLinkBuilder b/109653065แก้ไข
IllegalArgumentException
เมื่อกลับไปที่กราฟที่ซ้อนกัน b/80453447แก้ไขปัญหาเกี่ยวกับ Fragment ที่ทับซ้อนกันเมื่อใช้
launchSingleTop
b/79407969ตอนนี้การนำทางจะสร้างสแต็กย้อนกลับสังเคราะห์ที่ถูกต้องสำหรับกราฟที่ซ้อนกันแล้ว b/79734195
ตอนนี้ NavigationUI จะไฮไลต์รายการที่ถูกต้องเมื่อใช้กราฟที่ซ้อนกันเป็น
MenuItem
b/109675998
การเปลี่ยนแปลง API
เราได้เลิกใช้งานแอตทริบิวต์
clearTask
สำหรับการกระทำและ API ที่เกี่ยวข้องในNavOptions
แล้ว b/80338878เราเลิกใช้งานแอตทริบิวต์
launchDocument
สำหรับการดำเนินการและ API ที่เกี่ยวข้องในNavOptions
แล้ว b/109806636
เวอร์ชัน 1.0.0-alpha01
8 พฤษภาคม 2018
การนำทางเป็นเฟรมเวิร์กสำหรับการสร้างการนำทางในแอป
การเปิดตัวครั้งแรกนี้คือ 1.0.0-alpha01