การไปยังรายการต่างๆ
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
11 ธันวาคม 2024 | 2.8.5 | - | - | 2.9.0-alpha04 |
การประกาศทรัพยากร 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.8.4" // 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.8.4" // 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.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" 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.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)
การแก้ไขข้อบกพร่อง
- จากการนําทาง
2.8.5
: แก้ไขปัญหาที่NavHost
อาจแสดงข้อยกเว้นภายในPredictiveBackHandler
หากมีการป๊อปสแต็กย้อนกลับลงเหลือ 1 รายการและระบบเรียกใช้การย้อนกลับในเฟรมเดียวกัน (I1a429, b/375343407) - จากการนําทาง
2.8.5
: แก้ไขNavDestination
NullPointerException
เมื่ออัปเดตstartDestination
ของกราฟ (I99421, b/361560785)
เวอร์ชัน 2.9.0-alpha03
13 พฤศจิกายน 2024
androidx.navigation:navigation-*:2.9.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.9.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ความปลอดภัยของประเภทการนําทางรองรับคลาสค่าเป็นเส้นทางหรือเป็นประเภทอาร์กิวเมนต์ของเส้นทางแล้ว (I9344a, b/374347483)
การแก้ไขข้อบกพร่อง
- แก้ไข
ConcurrentModificationException
ที่อาจเกิดขึ้นเมื่อLifecycleObserver
ที่แนบอยู่กับNavBackStackEntry
ทริกเกอร์การเปลี่ยนแปลงสแต็กด้านหลังเมื่อLifecycleOwner
โฮสต์ เช่น กิจกรรมหรือ Fregment ที่บรรจุอยู่ เปลี่ยนสถานะวงจรชีวิตของLifecycleOwner
(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 กับปลั๊กอิน Gradle ของ Android เวอร์ชัน 8.4 ขึ้นไป (b/368070326, b/371463741)
เวอร์ชัน 2.8
เวอร์ชัน 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 และเรียกใช้การนําทางในเฟรมเดียวกับที่ภาพเคลื่อนไหวปัจจุบันกําลังสิ้นสุด (I26cb1, b/353294030)
- แก้ไข
ConcurrentModificationException
ที่อาจเกิดขึ้นเมื่อLifecycleObserver
ที่แนบอยู่กับNavBackStackEntry
ทริกเกอร์การเปลี่ยนแปลงสแต็กด้านหลังเมื่อLifecycleOwner
โฮสต์ เช่น กิจกรรมหรือ Fregment ที่มีการเปลี่ยนแปลงสถานะวงจรชีวิตของLifecycleOwner
(Ia9494)
เวอร์ชัน 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 16 (AGP 8.7) ขึ้นไป (b/371926651)
เวอร์ชัน 2.8.2
2 ตุลาคม 2024
androidx.navigation:navigation-*:2.8.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.8.2 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ความปลอดภัยของประเภทการนําทางรองรับคลาส Serializable ที่มี
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)
การแก้ไขข้อบกพร่อง
- ตอนนี้การนำทางกำหนดให้เส้นทางที่ส่งไปยัง
startDestination
ของNavGraph
ต้องมีค่าสำหรับอาร์กิวเมนต์ที่จำเป็นทั้งหมด ซึ่งรวมถึงอาร์กิวเมนต์ที่ไม่ใช่ค่า Null และไม่มีค่าเริ่มต้น (I18e74, b/362594265) - อาร์กิวเมนต์ที่ปลอดภัยสำหรับการไปยังส่วนต่างๆ เพิ่มการรองรับสตริงที่ไม่ใช่ค่า Null เพื่อให้ระบบแยกวิเคราะห์และจัดเก็บค่า "null" ไว้ในแพ็กเกจตามที่เป็นอยู่ ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งระบบจะแยกวิเคราะห์ค่า "null" ให้เป็นออบเจ็กต์ Null การเปลี่ยนแปลงนี้จะมีผลกับประเภทสตริงที่ไม่ใช่ Null เท่านั้น ส่วนสตริงที่อนุญาตค่า Null จะไม่มีการเปลี่ยนแปลง (I08b4a, b/348936238)
NavDestination
จะทํา Deep Link ไม่ได้อีกต่อไป ยกเว้นผ่าน Deep Link ที่เพิ่มไปยังปลายทางอย่างชัดแจ้ง ซึ่งหมายความว่าคุณจะไปยังเส้นทางของปลายทางได้โดยใช้ฟังก์ชันนำทางที่โอเวอร์โหลดซึ่งรับเส้นทางสตริงเท่านั้น การอัปเดตนี้ช่วยแก้ไขช่องโหว่ที่ทำให้สามารถทํา Deep Link ไปยังปลายทางที่อาจได้รับการปกป้องได้ (Ie30e6)
อัปเดตทรัพยากร Dependency
- ตอนนี้ 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
ความปลอดภัยของประเภท Kotlin DSL สำหรับการนําทาง
- ตอนนี้การนําทางมีความปลอดภัยของประเภทสําหรับ Kotlin DSL (ซึ่ง Navigation Compose ใช้) โดยใช้การแปลงข้อมูล Kotlin เพื่อให้คุณกําหนดปลายทางในกราฟการนําทางผ่านออบเจ็กต์และคลาสข้อมูลที่ปลอดภัยของประเภทได้ ดังนี้
// 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
การนําทาง เขียนการคาดคะเนกลับ
- ตอนนี้ Navigation Compose รองรับการย้อนกลับในแอปแบบคาดการณ์ผ่าน
SeekableTransitionState
API ใหม่จาก compose-animation แล้ว ซึ่งจะช่วยให้คุณใช้ท่าทางสัมผัส "กลับ" เพื่อดูปลายทางก่อนหน้าที่มีการเปลี่ยนภาพที่กำหนดเองได้ก่อนที่จะตัดสินใจว่าจะยืนยันธุรกรรมผ่านท่าทางสัมผัสที่เสร็จสมบูรณ์หรือยกเลิก
คอมโพสิชันสำหรับส่วนย่อยการนำทาง
- เพิ่มอาร์ติแฟกต์
navigation-fragment-compose
ใหม่ที่มีComposableNavHostFragment
แทนNavHostFragment
ซึ่งช่วยให้คุณเพิ่มปลายทางที่คอมโพสิเบิลลงในไฟล์ XML การนำทางได้ ปลายทางcomposable
แต่ละรายการต้องแสดงเป็นเมธอด@Composable
ระดับบนสุดที่ไม่มีอาร์กิวเมนต์ ซึ่งใช้ชื่อแบบเต็มที่เป็นแอตทริบิวต์android:name
ในปลายทางแต่ละรายการ เมื่อไปยังปลายทางใดปลายทางหนึ่งเหล่านี้ ระบบจะสร้างส่วนที่ประกอบด้วยเพื่อแสดงเนื้อหาที่คอมโพสิเบิล
// 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, Boolean, 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 ระบบจะรองรับเฉพาะ Enums ที่ฝังอยู่ในคลาสอื่นโดยค่าเริ่มต้น ระบบจะรองรับ Enums ระดับบนสุดในรุ่นถัดไป
การแก้ไขข้อบกพร่อง
- เมื่อนำทางไปยังจุดหมายที่ซ้ำกันหรือแชร์กัน การนำทางจะให้ความสำคัญกับการไปยังจุดหมายที่ตรงกันมากที่สุดจากตำแหน่งปัจจุบันในกราฟ (Ic89a4, b/352006850)
- ตอนนี้การนําทางใน safe args ได้เพิ่ม
NavType.EnumType
ใหม่แล้ว ซึ่งหมายความว่าEnum
ประเภทต่างๆ ไม่จำเป็นต้องมีNavType
ที่กำหนดเองอีกต่อไป โปรดทราบว่าSerialName
ของEnum
ต้องเป็นชื่อแบบสมบูรณ์ในตัวเองเริ่มต้น (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
วิธีนี้ยังช่วยให้ปลายทางที่กลับมาแสดงภาพเคลื่อนไหวอย่างถูกต้องแทนที่จะกระโดดกลับเข้าที่หลังจากการพลิก (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) - แก้ไขปัญหาการคืนค่าสถานะกองซ้อนของการนำทางย้อนกลับซึ่งเกิดขึ้นเมื่อพยายามกู้คืนรายการกองซ้อนของการนำทางย้อนกลับที่เข้าถึงไม่ได้ผ่านรหัสจากปลายทางปัจจุบัน เนื่องจากเส้นทางมีรหัสรองรับ ปลายทางที่สร้างด้วยเส้นทางจึงได้รับผลกระทบด้วย การอัปเดตนี้ยังแก้ไขข้อขัดข้องที่เกิดจากการเรียกใช้
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 ของการนำทาง (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 เสร็จสมบูรณ์แล้ว และ 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
ฟีเจอร์ใหม่
- ตอนนี้อาร์ติแฟกต์
navigation-fragment-compose
มีองค์ประกอบLocalFragment
ในพื้นที่สำหรับเมธอดแบบคอมโพสิเบิลภายในComposableFragment
(If35e5) - ตอนนี้
NavType
รองรับรายการ Int, String, Boolean, 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
ในปลายทางแต่ละรายการ เมื่อไปยังปลายทางใดปลายทางหนึ่งเหล่านี้ ระบบจะสร้างส่วนที่ประกอบด้วยเพื่อแสดงเนื้อหาที่คอมโพสิเบิล (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 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 แล้ว 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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถส่งอาร์กิวเมนต์ไปยัง
startDestination
ของNavGraph
ได้โดยตรงในเส้นทาง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
มีvalueEquals
API แบบเปิดใหม่ซึ่งจะระบุว่าค่า 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 ได้แล้วโดยกำหนดSizeTranform
เป็นส่วนหนึ่งของการเริ่มต้นใช้งานสำหรับฟังก์ชันcomposable
และ/หรือnavigation
(I91062, b/296912651)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
NavHost
ในการนําทางการเขียนไม่แสดงการเปลี่ยนอย่างถูกต้องเมื่อใช้การกดแป้น Back ของระบบโดยไม่มีท่าทางสัมผัส (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
ViewModelDESTROYED
เร็วเกินไปเนื่องจากViewModel
ของรายการที่เกี่ยวข้องไม่ได้เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ (Ib6bb7, b/317581849)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ 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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การคอมโพสิชันการนำทางจะขึ้นอยู่กับ การคอมโพสิชัน
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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- พอร์ตจาก Navigation
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 ครั้งหากสแต็กย้อนกลับว่างเปล่าทั้งหมดก่อนการเปลี่ยนแปลงการกําหนดค่าหรือการเรียกsetGraph
เฉพาะในกรณีที่ Intent ที่เข้ามามีการตั้งค่า FlagFLAG_ACTIVITY_NEW_TASK
เท่านั้น (I73c7f)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การนำทางด้วยส่วนย่อยจะขึ้นอยู่กับ Fragment 1.6.2 ซึ่งจะแก้ไขปัญหาที่ระบบจะไม่ล้างอินสแตนซ์
ViewModel
ของส่วนย่อยที่ฝังอยู่เมื่อเรียกใช้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) - แก้ไขปัญหาที่การกดแป้น Back ของระบบทําให้
currentDestination
ไม่อัปเดตอย่างถูกต้องเพื่อให้ตรงกับส่วนที่แสดง (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 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนําทางด้วย FRGMENTS ซึ่งทําให้รายการ
visibleEntries
มีรายการที่ไม่ถูกต้อง (I5caa9, b/288520638) - แก้ไขปัญหาที่ทำให้ปลายทางหน้าต่างลอย (เช่น
Dialogs
,Bottomsheets
ฯลฯ) ไม่ได้รับRESUMED
Lifecycle Callback (I3b866, b/287505132)
เวอร์ชัน 2.7.2
เวอร์ชัน 2.7.2
6 กันยายน 2023
androidx.navigation:navigation-*:2.7.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การนำทางจะขึ้นอยู่กับ Lifecycle
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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ Navigation Compose ขึ้นอยู่กับ Compose 1.5.1
เวอร์ชัน 2.7.1
เวอร์ชัน 2.7.1
23 สิงหาคม 2023
androidx.navigation:navigation-*:2.7.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนําทางด้วยเครื่องมือเขียน ซึ่งเมื่อใช้
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 Compose ได้
ซึ่งหมายความว่า NavHost
รองรับการตั้งค่าทรานซิชันที่กำหนดเองทั้งหมดที่มีใน AnimatedNavHost
จะไม่มีการเปลี่ยนแปลงเพิ่มเติมในภาพเคลื่อนไหวการนำทางของ Accompanist และเราจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมกับคำแนะนำในการย้ายข้อมูลกลับไปยัง Navigation Compose โดยตรง แต่การดำเนินการนี้จะตรงข้ามกับคำแนะนำในการย้ายข้อมูลโดยที่คุณไม่จําเป็นต้องเปลี่ยนแปลง API อื่นๆ หากใช้ Accompanist เวอร์ชันอัลฟ่าล่าสุดอยู่แล้ว (0.31.2-alpha
) (b/197140101)
การแก้ไขข้อบกพร่อง
- ตอนนี้ NavHost ใน Navigation Compose จะขัดจังหวะการเรียกกลับของระบบอย่างถูกต้องแล้ว แม้ว่ากิจกรรมจะหยุดและเริ่มอีกครั้งแล้วก็ตาม (Icb6de, b/279118447)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การนําทางจะขึ้นอยู่กับการเขียน
1.5.0
ขึ้นจาก1.1.0
เวอร์ชัน 2.7.0-rc01
26 กรกฎาคม 2023
androidx.navigation:navigation-*:2.7.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Lambda
EnterTransition
และExitTransition
ที่สร้างขึ้นเป็นส่วนหนึ่งของNavHost
อาจยังคงอยู่ในหน่วยความจำแม้ว่าจะนำNavHost
ออกจากการคอมโพสิชันแล้วก็ตาม (I893d0)
ปัญหาที่ทราบ
- มีปัญหาจาก 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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้การคอมไพล์การนำทางมีลําดับ 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 Compose ได้
ซึ่งหมายความว่า NavHost
รองรับการตั้งค่าทรานซิชันที่กำหนดเองทั้งหมดที่มีอยู่ใน AnimatedNavHost
จะไม่มีการเปลี่ยนแปลงเพิ่มเติมในภาพเคลื่อนไหวการนำทางของ Accompanist และเราจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมกับคำแนะนำในการย้ายข้อมูลกลับไปยัง Navigation Compose โดยตรง แต่การดำเนินการนี้จะตรงข้ามกับคำแนะนำในการย้ายข้อมูลโดยที่คุณไม่จําเป็นต้องเปลี่ยนแปลง API อื่นๆ หากใช้ Accompanist เวอร์ชันอัลฟ่าล่าสุดอยู่แล้ว (0.31.2-alpha
) (b/197140101)
การแก้ไขข้อบกพร่อง
- จากการนําทาง
2.6.0-rc02
: แก้ไขปัญหาเกี่ยวกับการนําทางใน Fragments ที่การนําทางด้วยpopUpTo
และการแยก Fragment ออกจากกองซ้อนด้านหลังโดยไม่สร้างมุมมองขึ้นมาใหม่จะทำให้ระบบหยุดทํางาน (Ieb8d4, b/281726455)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การไปยังส่วนต่างๆ จะขึ้นอยู่กับการเขียน
1.5.0-beta01
เวอร์ชัน 2.6.0
เวอร์ชัน 2.6.0
7 มิถุนายน 2023
androidx.navigation:navigation-*:2.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญในการนําทางตั้งแต่เวอร์ชัน 2.5.0
- ตอนนี้
arguments
ของNavBackStackEntry
และarguments
ที่ส่งไปยังOnDestinationChangedListener
เป็นเพียงสําเนาของอาร์กิวเมนต์แบบคงที่ซึ่งสร้างขึ้นเมื่อคุณไปยังปลายทาง ซึ่งหมายความว่าการเปลี่ยนแปลงที่ทำกับ Bundle เหล่านั้นจะไม่แสดงในการเข้าถึงarguments
หรืออินสแตนซ์OnDestinationChangedListener
อื่นๆ ในภายหลัง - ตอนนี้
NavDeepLink
รองรับค่าเริ่มต้นสำหรับอาร์เรย์ ซึ่งช่วยให้รองรับพารามิเตอร์การค้นหาซ้ำที่จะจับคู่กับประเภทอาร์เรย์ของอาร์กิวเมนต์ นอกจากนี้NavType
ยังมีเมธอดเริ่มต้นที่ลบล้างได้เพื่อรวมค่าที่แยกวิเคราะห์ 2 ค่าเข้าด้วยกัน - ตอนนี้คลาสย่อยที่กำหนดเองของ
NavType
สามารถลบล้างserializeAsValue
เพื่อจัดรูปแบบค่าเป็นสตริงได้แล้ว ซึ่งช่วยให้ทั้งการจัดรูปแบบและการถอดรูปแบบ (ผ่านparseValue
) ได้รับการรวมไว้ในคลาสNavType
โดยสมบูรณ์ ตอนนี้StringType
ลบล้างเมธอดนี้เพื่อเรียกUri.encode
ในString
ที่ระบุ
การเปลี่ยนแปลงที่สําคัญใน Navigation Compose ตั้งแต่เวอร์ชัน 2.5.0
- เมื่อแสดงตัวอย่างคอมโพสิเบิลด้วย
NavHost
ตอนนี้ระบบจะแสดงstartDestination
ของ NavGraph โดยค่าเริ่มต้น - ตอนนี้
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
รองรับเส้นทางทั้งหมดที่มีอาร์กิวเมนต์ที่กรอกไว้บางส่วนหรือทั้งหมด โปรดทราบว่าอาร์กิวเมนต์ต้องตรงกันทุกประการกับอาร์กิวเมนต์ของรายการ - การพยายามสร้าง
NavDeepLink
ว่างเปล่าโดยใช้navDeepLink
Kotlin DSL จะส่งผลให้เกิดคำเตือน Lint ที่ระบุว่า Deep Link ต้องมี uri, action และ/หรือ mimetype จึงจะใช้งานได้
การเปลี่ยนแปลงที่สําคัญในการนําทางด้วย Fragments ตั้งแต่เวอร์ชัน 2.5.0
NavHostFragment
จะไม่ขัดขวางปุ่มย้อนกลับของระบบอีกต่อไป ซึ่งจะช่วยให้FragmentManager
ที่อยู่เบื้องหลังจัดการระบบได้ ซึ่งจะช่วยให้ Fragment1.7.0-alpha01
ขึ้นไปแสดงภาพเคลื่อนไหวการกดย้อนกลับแบบคาดการณ์ในแอปบนอุปกรณ์ Android U ได้- เมื่อใช้การนําทางด้วย Fragments การพยายามทำ
FragmentTransaction
ด้วยตนเองซึ่งเพิ่ม Fragment ลงในกองซ้อนที่กลับของFragmentManager
จะทำให้เกิดIllegalArgumentException
คุณควรเพิ่มข้อมูลโค้ดผ่านnavigate()
API เสมอ - เมื่อใช้สตริง
${applicationId}
ที่ตรงกันทุกประการเป็นตัวยึดตําแหน่งในแอตทริบิวต์app:data
และapp:dataPattern
ในองค์ประกอบกิจกรรมของไฟล์ XML การนำทาง ระบบจะป้อนpackageName
ของบริบทลงในตัวยึดตําแหน่งโดยอัตโนมัติเมื่อมีการขยาย - ตอนนี้
FragmentNavigator
ใช้ Transition API เมื่อไปยังส่วนต่างๆ และแสดงNavBackStackEntries
ซึ่งหมายความว่าตอนนี้NavBackStackEntry
Lifecycle
จะรอให้เอฟเฟกต์พิเศษของการเข้าและออกของเศษเสร็จสมบูรณ์ก่อนย้าย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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการนําทางในฟragment ซึ่งการนําทางด้วย
popUpTo
และการแยกฟragment ออกจากกองซ้อนด้านหลังโดยไม่สร้างมุมมองขึ้นมาใหม่จะทำให้ระบบหยุดทํางาน (Ieb8d4, b/281726455)
เวอร์ชัน 2.6.0-rc01
10 พฤษภาคม 2023
androidx.navigation:navigation-*:2.6.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนําทางด้วยแฟรกเมนต์ที่การนําแฟรกเมนต์ออกผ่านการนําทางด้วย
popUpTo
ในonResume()
lifecycle callback จะทําให้เกิดIllegalStateException
(I21884, b/279644470)
เวอร์ชัน 2.6.0-beta01
19 เมษายน 2023
androidx.navigation:navigation-*:2.6.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ขณะนี้
NavBackStackEntry
มีการใช้งานtoString
ที่กําหนดเอง (Iff00b)
การแก้ไขข้อบกพร่อง
- เมื่อใช้การนําทางด้วย Fragments การพยายามทำ
FragmentTransaction
ด้วยตนเองซึ่งเพิ่ม Fragment ลงในกองซ้อนที่กลับของFragmentManager
จะทำให้เกิดIllegalArgumentException
คุณควรเพิ่มข้อมูลโค้ดผ่าน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
ที่ไม่อนุญาตให้เป็นค่า Null เส้นทางของปลายทางนี้ต้องมีตัวยึดตําแหน่งสำหรับ args ที่มีชื่อเหมือนกับNavArgument
ที่ไม่อนุญาตให้เป็นค่า Null (Ic62bf, b/274697949) - ตอนนี้การนำทางด้วย Deep Link ตาม
Action/MimeType
จะดำเนินการไม่สำเร็จหากการดำเนินการนำทางไม่มีNavArgument
ที่ไม่ใช่ค่า Null ซึ่งNavDestination
ที่Action/MimeType
จับคู่ด้วยต้องใช้ (Ibfa17, b/271777424) - เมื่อ
NavController
ตั้งค่ากราฟที่มีเส้นทางและปลายทางเดียวกับกราฟก่อนหน้า ตอนนี้ระบบจะแทนที่โหนดกราฟปัจจุบันและปลายทางของกองซ้อนที่กลับด้วยอินสแตนซ์ใหม่อย่างเหมาะสม การแก้ไขนี้จะช่วยแก้ปัญหาข้อขัดข้องเมื่อใช้onLaunchSingleTop
โดยไม่บันทึกสถานะใน Navigation Compose การอัปเดตนี้ยังแก้ไขข้อผิดพลาดในการไปยังปลายทางที่เชื่อมโยงกับการสร้างกราฟรูทและกองซ้อนที่ย้อนกลับไม่ถูกต้องด้วย (I5bc58, b/275258161, b/275407804)
เวอร์ชัน 2.6.0-alpha08
22 มีนาคม 2023
androidx.navigation:navigation-*:2.6.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha08 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavHostFragment
ให้คุณดึงข้อมูลNavController
ได้ทันทีที่NavHostFragment
แนบอยู่กับFragmentManager
แทนที่จะดึงข้อมูลได้หลังจากonCreate()
เท่านั้น (Ic6382, b/220186282)
การแก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อแสดงกราฟที่ซ้อนกันซึ่งมีอาร์กิวเมนต์ที่ไม่ใช่ Null (6b3581, b/249988437) - เมื่อใช้แป้นย้อนกลับของระบบหลังจากไปยังส่วนต่างๆ ด้วย
popUpTo
สถานะของNavController
จะปรากฏขึ้นที่รายการที่ถูกต้อง (I3a8ec, b/270447657) - ตอนนี้
FragmentNavigator
จะแสดงรายการอย่างถูกต้องเมื่อระบบแสดงรายการสแต็กย้อนกลับผ่านปุ่มย้อนกลับของระบบหรือpopBackStack()
และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับข้อมูลโค้ดโค้ดหรือไม่ (I81bdf) - การเพิ่มข้อมูลโค้ดไปยัง
FragmentNavigator
'sFragmentManager
โดยไม่ใช้การนําทางจะไม่ทําให้เกิดความขัดข้องอีกต่อไป (b17204, b/274167493)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การนําทางจะขึ้นอยู่กับวงจร
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 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ตัวแปร
getBackStackEntry
,popBackStack
,clearBackStack
API ที่ใช้เส้นทางจะใช้รูปแบบเส้นทางที่มีอาร์กิวเมนต์ที่อนุญาตค่า Null และพารามิเตอร์การค้นหาที่อนุญาตค่า Null (I22294, b/269302500) - แก้ไขปัญหาที่การเรียก
clearBackStack()
จากNavController
จะไม่ล้างสถานะที่บันทึกไว้ในตัวจัดการ Fragment ที่เชื่อมโยงกับกองซ้อนที่ล้างไปแล้ว (Ic1cce, b/271190202) - แก้ไขการถดถอยใน 2.6.0-alpha06 ซึ่งทําให้ระบบไฮไลต์
MenuItem
ที่ไม่ถูกต้องในBottomNavigationView
เมื่อใช้การกดแป้นย้อนกลับของระบบระหว่างแท็บ (I634f6, b/270447657) - แก้ไขการถดถอยใน 2.6.0-alpha06 ซึ่งทําให้ระบบไม่ย้าย
NavBackStackEntry
ไปยังสถานะ "ดำเนินการต่อ" เมื่อใช้Animation
(Ib3589, b/269646882)
เวอร์ชัน 2.6.0-alpha06
22 กุมภาพันธ์ 2023
androidx.navigation:navigation-*:2.6.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha06 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เมื่อแสดงตัวอย่างคอมโพสิเบิลด้วย
NavHost
ตอนนี้ระบบจะแสดงstartDestination
ของ NavGraph โดยค่าเริ่มต้น (I2b89f)
การเปลี่ยนแปลง API
- ตอนนี้การโอเวอร์โหลด
NavController
navigate
ทั้งหมดจะมีคำอธิบายประกอบด้วย@MainThread
เพื่อให้แน่ใจว่ามีการเรียกใช้บนเธรดหลัก (I2c0b0, b/263427111)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องเมื่อพยายามไปยังส่วนต่างๆ ขณะใช้การนําทางแบบไดนามิกของข้อมูลโค้ด (I3ee29, b/268360479)
- แก้ไขข้อบกพร่องที่การไปยังส่วนอื่นผ่านปุ่มย้อนกลับของระบบไม่อัปเดตแถบด้านล่างเป็นรายการที่เลือกไว้อย่างถูกต้อง (If559f, b/269044426)
ปัญหาที่ทราบ
- เมื่อใช้การนําทางด้วย Fregment วงจรชีวิตของ
NavBackStackEntry
ไม่สามารถเข้าถึงRESUMED
ได้เมื่อใช้Animation
API (b/269646882) - เมื่อใช้การนําทางด้วย Fragments และไปยังส่วนต่างๆ ด้วย
BottomNavigation
หากคุณพยายามกู้คืนกองซ้อนที่ย้อนกลับซึ่งมีหลายรายการBottomMenuItem
จะอัปเดตอย่างไม่ถูกต้อง (b/270447657) - เมื่อใช้การนําทางด้วย Fragments หลังจากกู้คืนสถานะแล้ว
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
จะรอให้เอฟเฟกต์พิเศษของการเข้าและออกของเศษเสร็จสมบูรณ์ก่อนย้าย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
ของปลายทางนั้นอย่างถูกต้องที่ด้านบนของกองซ้อนที่ซ้อนกัน (Id4bea, b/253256629) - ตอนนี้การนำทางจะแทนที่อินสแตนซ์
DialogFragment
อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันโดยตั้งค่า FlaglaunchSingleTop
เป็น "จริง" (I45b5a, b/149572817) - 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 ไปยังปลายทางที่มีอาร์กิวเมนต์เริ่มต้นเป็นค่าว่าง (I51c24, b/243183636)
อัปเดตทรัพยากร Dependency
- ตอนนี้การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารี 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)
การอัปเดตทรัพยากร Dependency
เวอร์ชัน 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
ขึ้นอยู่กับเวอร์ชัน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, action และ/หรือ mimetype จึงจะใช้งานได้ (I08d2f, b/154038883)
การเปลี่ยนแปลง API
- เพิ่มฟังก์ชันส่วนขยาย
NavDestination
ใหม่เพื่อแยกวิเคราะห์ป้ายกำกับแบบไดนามิกที่มีอาร์กิวเมนต์ในรูปแบบandroid:label="{arg}"
เป็นสตริง รองรับอาร์กิวเมนต์ReferenceType
โดยการแยกวิเคราะห์ค่าR.string
เป็นค่าสตริง (I07d89, b/236269380)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
arguments
ของ NavBackStackEntry และarguments
ที่ส่งไปยังOnDestinationChangedListener
เป็นเพียงสําเนาของอาร์กิวเมนต์แบบคงที่ซึ่งสร้างขึ้นเมื่อคุณไปยังปลายทาง ซึ่งหมายความว่าการเปลี่ยนแปลงที่ทำกับ Bundle เหล่านั้นจะไม่แสดงในการเข้าถึงarguments
หรืออินสแตนซ์OnDestinationChangedListener
อื่นๆ ในภายหลัง (I676f5)
การแก้ไขข้อบกพร่อง
- จากการนําทาง
2.5.2
: ตอนนี้การนําทางแบบไดนามิกจะพยายามติดตั้งปลายทางของกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางเหล่านั้น (Ia2c16, b/240292838) - จากการนําทาง
2.5.2
: ตอนนี้การนําทางจะแทนที่อินสแตนซ์ของ FRG อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันและตั้งค่า FlaglaunchSingleTop
เป็น "จริง" (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)
- ตอนนี้การนำทางจะแทนที่อินสแตนซ์ของ Fregment อย่างถูกต้องเมื่อไปยังปลายทางเดียวกันและตั้งค่า Flag
launchSingleTop
เป็น "จริง" (I5a2f1, b/237374580) - แก้ไข
IllegalStateException
ที่เกิดจากการไปยังกราฟที่ฝังซ้อนกัน 2 ชั้นซึ่งแชร์รายการหลักกับปลายทางเริ่มต้นใหม่ที่ปรากฏขึ้น (I9f7cb, b/243778589)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การนำทาง
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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ไลบรารีการนําทางจะขึ้นอยู่กับ Lifecycle
2.5.1
(Ib4451) - ตอนนี้ไลบรารีการนำทางจะขึ้นอยู่กับกิจกรรม
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
แบบไม่มีสถานะผ่านCreationExtras
ของ Lifecycle2.5.0
แล้ว
Navigation SafeArgs
Navigation Safe Args
ได้อัปเกรด Dependency ของAndroid Gradle Plugin
ให้ใช้7.0.4
ซึ่งทำให้เวอร์ชัน AGP ก่อน7.0
ใช้งานไม่ได้- เพิ่มการรองรับแอตทริบิวต์เนมสเปซ build.gradle เพื่อใช้แทน applicationId
การเปลี่ยนแปลงอื่นๆ
visibleEntries
API ไม่ได้อยู่ในขั้นทดลองอีกต่อไปและมีฟังก์ชันในการดึงข้อมูลรายการทั้งหมดที่มีปลายทางที่แสดงอยู่ในปัจจุบันตามNavController
เวอร์ชัน 2.5.0-rc02
15 มิถุนายน 2022
androidx.navigation:navigation-*:2.5.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องที่เกิดจากการสลับไปมาอย่างรวดเร็วระหว่างปลายทางด้านล่างเมื่อใช้การเขียนการนําทาง
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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มกฎ lint ใหม่เพื่อเตือนไม่ให้วางองค์ประกอบ
<deeplink>
ภายในองค์ประกอบ<activity>
ในไฟล์navigation.xml
(Ic15a5, b/178403185)
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะทิ้งขอบเขตคอมโพสิเบิลใน
NavHost
และDialogHost
ตามลำดับที่คาดไว้ กล่าวคือ ระบบจะทิ้งคอมโพสิเบิลด้านในก่อนคอมโพสิเบิลด้านนอก (I157e6) - ตอนนี้ SafeArgs ของการนำทางใช้
PathSensitivity.RELATIVE
ในArgumentsGenerationTask
เพื่อให้ย้ายตำแหน่งแคชได้ ซึ่งหมายความว่าตอนนี้คุณใช้รายการแคชซ้ำจากบิลด์ CI กับบิลด์ในเครื่องได้แล้ว (I5f67c, b/173420454) - เราได้อัปเดตกฎ Lint ของ
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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การนําทางจะขึ้นอยู่กับวงจร
2.5.0-beta01
ซึ่งจะแก้ไขIllegalStateException
เมื่อฝังNavHost
หนึ่งภายในNavHost
อีกรายการหนึ่งในแท็บการนำทางด้านล่างที่ไม่ใช่หลักเมื่อใช้กองซ้อนกลับหลายรายการ
เวอร์ชัน 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
จะต่ำกว่า "เริ่มต้น" รายการที่มองเห็นได้จะยังคงเหมือนเดิม (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) - ตอนนี้ 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
อย่างถูกต้องเมื่อใช้การเชื่อมโยงข้อมูลกับกราฟที่ฝังอยู่ (Ifbb51, b/214577959) - จากการนําทาง
2.4.1
: เมื่อทํา Deep Link ผ่านNavGraph
ที่ฝังไว้หลายรายการ ตอนนี้กองซ้อนที่ย้อนกลับจะรวมปลายทางเริ่มต้นระดับกลางอย่างเหมาะสมแล้ว (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()
ของ Fregment จะดำเนินการไม่สำเร็จด้วยIllegalStateException
(I8a14d) NavDeepLink
s จะไม่ถอดรหัส args ซ้ำอีกต่อไป ซึ่งหมายความว่าระบบจะส่ง args ที่ถูกต้องไปยังปลายทางสุดท้าย (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) - ย้ายจาก Navigation
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
อย่างถูกต้องเมื่อใช้การเชื่อมโยงมุมมองกับกราฟที่ฝังอยู่ (Ifbb51, b/214577959) - เมื่อทํา Deep Link ผ่าน
NavGraph
ที่ซ้อนกันหลายรายการ ตอนนี้กองซ้อนที่ซ้อนกันจะรวมปลายทางเริ่มต้นระดับกลางอย่างเหมาะสม (I504c0, b/214383060) - ย้ายข้อมูลมาจาก Navigation
2.5.0-alpha01
: แก้ไขปัญหาการเข้าถึง ViewModel ที่สร้างขึ้นผ่านby navGraphViewModels()
จากonCreate()
ของ Fragment จะดำเนินการไม่สำเร็จด้วยIllegalStateException
(I8a14d) - ย้ายข้อมูลมาจากการนำทาง
2.5.0-alpha01
:NavDeepLink
จะไม่ถอดรหัสอาร์กิวเมนต์ซ้ำอีกต่อไป ซึ่งหมายความว่าระบบจะส่งอาร์กิวเมนต์ที่ถอดรหัสอย่างถูกต้องไปยังปลายทางสุดท้าย (I31b0a, b/210711399) - พอร์ตจาก Navigation
2.5.0-alpha01
: ตอนนี้ 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.0
เวอร์ชัน 2.4.0
26 มกราคม 2022
androidx.navigation:navigation-*:2.4.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- เราได้เขียนอาร์ติแฟกต์การนำทางทั้งหมดขึ้นใหม่ใน Kotlin ซึ่งช่วยปรับปรุงความสามารถในการเป็น Null ของคลาสที่ใช้ทั่วไป (เช่น
NavType
คลาสย่อย) ฟังก์ชันส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์-ktx
ได้ย้ายไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว ระบบจะเผยแพร่อาร์ติแฟกต์-ktx
ต่อไป แต่อาร์ติแฟกต์จะว่างเปล่า - ตอนนี้อาร์ติแฟกต์
navigation-fragment
มีการใช้งาน เลย์เอาต์แบบ 2 แผงที่สร้างไว้ล่วงหน้าผ่านAbstractListDetailFragment
ใหม่ ข้อมูลโค้ดนี้ใช้SlidingPaneLayout
เพื่อจัดการแผงรายการ (ซึ่งคลาสย่อยของคุณให้ไว้) และแผงรายละเอียด ซึ่งใช้NavHostFragment
ในการนำไปใช้งาน ดังที่เห็นในตัวอย่างการใช้งาน - เมธอด
currentBackStackEntryAsFlow()
ในNavController
ให้Flow
ที่แสดงทุกครั้งที่NavBackStackEntry
ในปัจจุบันมีการเปลี่ยนแปลง ขั้นตอนนี้สามารถใช้แทนการจัดการOnDestinationChangedListener
ด้วยตนเอง - ตอนนี้ NavController ดึงข้อมูลรายการอินสแตนซ์
NavBackStackEntry
ที่มองเห็นได้ทั้งหมดเป็นStateFlow
ผ่านพร็อพเพอร์ตี้visibleEntries
เวอร์ชันทดลองได้แล้ว - ตอนนี้คุณขยายคลาส
NavType
เพื่อสร้าง NavTypes ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเฉพาะเมื่อคุณสร้างกราฟการนำทางแบบเป็นโปรแกรมเท่านั้น เช่น ผ่าน Navigation Graph Kotlin DSL ตอนนี้ Navigation มี
findStartDestination()
และgetHierarchy()
API ที่สามารถใช้เพื่อช่วยในการติดตั้งใช้งาน NavigationUI ที่กําหนดเองfindStartDestination()
เป็นฟังก์ชันส่วนขยายในNavGraph
ที่จะค้นหาปลายทางเริ่มต้นจริงที่จะแสดงเมื่อคุณไปยังกราฟ แม้ว่าstartDestination
จะเป็นNavGraph
ที่ฝังอยู่ก็ตามgetHierarchy()
คือฟังก์ชันในNavDestination
ที่ใช้เพื่อยืนยันว่าปลายทางหนึ่งๆ อยู่ภายในลําดับชั้นของอีกปลายทางหนึ่งหรือไม่val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
เมธอด
NavigationUI
ที่ใช้BottomNavigationView
ได้รับการอัปเดตให้ใช้ซุปเปอร์คลาสที่เปิดตัวในเนื้อหา1.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) }
เส้นทางการนําทางและ DSL ของ Kotlin
การนำทางเวอร์ชันเก่าๆ อาศัยที่ปลายทางแต่ละแห่งมีรหัสจำนวนเต็มแบบคงที่ซึ่งจะระบุปลายทางนั้นๆ โดยไม่ซ้ำกับปลายทางอื่นๆ และช่วยให้คุณ 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
ให้การผสานรวมระหว่างคอมโพเนนต์การนำทางกับ Jetpack Compose ซึ่งจะใช้ฟังก์ชัน @Composable
เป็นปลายทางในแอปพลิเคชัน
ฟีเจอร์ของรุ่นนี้ ได้แก่
- คอมโพสิชัน
NavHost
ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL ได้โดยใช้ปลายทางcomposable
และdialog
รวมถึงรองรับ Navigator ที่ไม่บังคับ เช่น รายการจาก Accompanist Navigation Material - การรองรับการเฟดระหว่างปลายทางแบบบังคับ คุณสามารถใช้ภาพเคลื่อนไหวการนําทางประกอบเพื่อควบคุมทรานซิชันของการเข้าและออกโดยใช้ Compose API เวอร์ชันทดลอง
- การกําหนดขอบเขตของ
Lifecycle
ไปยังปลายทางแบบคอมโพสิเบิลแต่ละรายการ ปลายทางแต่ละแห่งจะถึงสถานะRESUMED
ก็ต่อเมื่อทรานซิชันขาเข้าเสร็จสิ้นแล้ว และจะลดลงเป็นSTARTED
ทันทีเมื่อทรานซิชันขาออกเริ่มต้นขึ้น ซึ่งจะช่วยให้คุณหลีกเลี่ยงปัญหาIllegalStateException
และปัญหาการแตะหลายจุดทั้งหมดได้โดยเรียกใช้การเรียกnavigate
เฉพาะเมื่อLifecycle
เป็นRESUMED
- การกําหนดขอบเขตของ
ViewModel
(ผ่านviewModel()
API ของ Lifecycle ViewModel Compose2.4.0
หรือhiltViewModel()
ของ Hilt Navigation Compose1.0.0
ที่ระดับปลายทาง ซึ่งให้ขอบเขตที่ยังคงอยู่หลังจากการเปลี่ยนแปลงการกําหนดค่าและอยู่ในกองซ้อนด้านหลัง (เมื่อมีการทิ้งเนื้อหา Composable ของคุณ) และสัญญาณในonCleared()
ของ ViewModel ที่บ่งบอกถึงการทิ้งและล้างสถานะที่เชื่อมโยงกับNavBackStackEntry
นั้นอย่างถาวร - การกําหนดขอบเขตสถานะ
rememberSaveable
ที่ระดับปลายทาง เพื่อให้ระบบบันทึกและกู้คืนสถานะคอมโพสิเบิลทั้งหมดโดยอัตโนมัติเมื่อคุณกลับไปที่ปลายทาง - รองรับการบันทึกและกู้คืนสถานะของ
NavController
และสถานะของปลายทางหลังจากกระบวนการสิ้นสุดและสร้างใหม่ - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า
เขียนตัวช่วยที่เฉพาะเจาะจงใน
rememberNavController()
และcurrentBackStackEntryAsState()
เพื่ออนุญาตให้ยกสถานะและเชื่อมต่อNavController
กับคอมโพสิเบิลนอก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()
}
}
}
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการไปยังส่วนต่างๆ ของเครื่องมือเขียน
กองซ้อนที่ย้อนกลับหลายกอง
NavController มีหน้าที่จัดการกองซ้อนที่ซ้อนกันของปลายทาง เพิ่มปลายทางลงในกองซ้อนที่ซ้อนกันเมื่อคุณ navigate()
ไปยังปลายทาง และนำปลายทางออกเมื่อคุณเรียก popBackStack()
หรือเรียกใช้ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions
ที่มีอยู่และการผสานรวมเข้ากับองค์ประกอบ <action>
ใน XML กราฟการนำทางเพื่อรองรับการบันทึกและกู้คืนกองซ้อนที่ย้อนกลับ
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI
ของ onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
และ NavigationView.setupWithNavController()
บันทึกและกู้คืนสถานะของปลายทางที่ป๊อปโดยอัตโนมัติ ซึ่งช่วยให้รองรับกองซ้อนที่ย้อนกลับได้หลายกองโดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนําทางกับ Fragments เราขอแนะนําให้ใช้วิธีนี้เพื่อผสานรวมกับกองซ้อนที่ย้อนกลับหลายกอง
API พื้นฐานสําหรับการบันทึกและกู้คืนสถานะจะแสดงผ่านแพลตฟอร์มต่างๆ ดังนี้
ใน Navigation 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
ที่อยู่ในขอบเขตปลายทางการนำทาง เราได้อัปเดต Navigator
API เพื่อให้ 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) - แก้ไขแล้วในการนําทาง
2.5.0-alpha01
: Safe Args 2.4.0 ใช้ร่วมกับปลั๊กอิน Android Gradle 7.1.0 ขึ้นไปไม่ได้ (b/213086135) - Deep Link ที่มีกราฟการนำทางที่ฝังอยู่หลายรายการไม่สร้างกองซ้อนย้อนกลับอย่างถูกต้อง (b/214383060)
เวอร์ชัน 2.4.0-rc01
15 ธันวาคม 2021
androidx.navigation:navigation-*:2.4.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-rc01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
NavDeepLink
ตอนนี้อาร์กิวเมนต์ที่แยกวิเคราะห์จะพิจารณาเครื่องหมายดอลลาร์ในลักษณะเดียวกับเครื่องหมายคําถามที่ใช้เป็นตัวคั่นระหว่างอาร์กิวเมนต์ (I21309, b/180042703)
การแก้ไขข้อบกพร่อง
- Deep Link จะไม่ละเว้นอาร์กิวเมนต์ที่มีค่าเหมือนกับชื่อของตัวยึดตําแหน่งอีกต่อไป (If8017, b/207389470)
NavController
จะไม่ขัดข้องอีกต่อไปเมื่อแสดงปลายทางที่ฝังอยู่โดยใช้ทรานซิชันหลังจากมีการกู้คืนNavController
แล้ว (I0f7c9, b/205021623)- ตอนนี้ข้อความแสดงข้อผิดพลาดเมื่อใช้
startDestination
ที่ไม่ถูกต้องจะเป็นเส้นทางเริ่มต้นของปลายทางโดยค่าเริ่มต้น หากมี (I86b9d, b/208041894)
การแก้ไขข้อบกพร่องของ Compose สำหรับการนำทาง
- แก้ไขข้อขัดข้องที่อาจเกิดขึ้นเนื่องจากการสลับไปมาอย่างรวดเร็วระหว่างจุดหมายเริ่มต้นและจุดหมายอื่นโดยใช้รายการเมนูการนำทางด้านล่าง (Ic8976, b/208887901)
- ตอนนี้ปลายทางของกล่องโต้ตอบจะได้รับการกู้คืนอย่างถูกต้องที่ด้านบนของหน้าจอหลังจากการเปลี่ยนแปลงการกําหนดค่าหรือกระบวนการสิ้นสุด (I4c0dc, b/207386169)
- แก้ไขปัญหาที่การพยายามดึงข้อมูล
ViewModel
จากNavBackStackEntry
ของกล่องโต้ตอบจะดำเนินการไม่สำเร็จเมื่อปิดกล่องโต้ตอบ (I6b96d, b/206465487) - แก้ไขปัญหาเมื่อใช้ปลายทาง
activity
กับNavHost
ของ Navigation Compose ซึ่งจะส่งผลให้มีการจัดเรียงใหม่อย่างไม่สิ้นสุด (I8f64c) - แก้ไขข้อบกพร่องในการคอมโพสิชันการนําทางที่เก็บการอ้างอิงกิจกรรมเก่าไว้หลังจากการเปลี่ยนแปลงการกําหนดค่าหรือการหยุดทํางานของกระบวนการ (I4efcb, b/204905432)
การแก้ไขข้อบกพร่องของ Safe Args
SafeArgs
ไม่ขัดข้องอีกต่อไปเมื่อพยายามกู้คืนอาร์เรย์ที่แยกออกเป็นส่วนๆ ที่กำหนดเองหลังจากกระบวนการสิ้นสุด (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 แบบชัดเจนและแบบไม่ชัดเจนจะเพิ่ม Flag
saveState
โดยอัตโนมัติเมื่อไปยังกราฟอื่น เพื่อให้มั่นใจว่าโค้ด เช่นNavigationUI.setupWithNavController
และโค้ดที่ใช้กองซ้อน Back หลายรายการจะทํางานตามที่คาดไว้ (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 กับ Fregment ได้ดียิ่งขึ้น (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
อย่างถูกต้อง ซึ่งหมายความว่าตอนนี้การเรียกใช้dismiss()
API แบบแอซิงโครนัสสําหรับ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)
- แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบซึ่งเกิดขึ้นหลังจากป๊อปกลับไปยังปลายทางแบบคอมโพสิเบิลที่มี
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 ไปยังเครื่องมือสร้างกราฟการนําทางที่ฝังไว้ และระบบจะเพิ่มอาร์กิวเมนต์และ Deep Link เหล่านั้นลงในกราฟที่แสดงผลโดยอัตโนมัติ (I8a470, b/182545357)
การเปลี่ยนแปลง API
- ตอนนี้ฟังก์ชัน
navArgument
Kotlin DSL เป็นส่วนหนึ่งของnavigation-common
แล้ว ไม่ใช่navigation-compose
ซึ่งจะต้องอัปเดตการนําเข้าเพื่อใช้ฟังก์ชันนี้ต่อไป (I1d095)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้เมื่อสร้างอาร์กิวเมนต์ Safe Args จะใส่พารามิเตอร์ที่ไม่มีค่าเริ่มต้นไว้ก่อนพารามิเตอร์ที่มีค่าเริ่มต้น (I89709, b/198493585)
การแก้ไขข้อบกพร่อง
- เมื่อใช้ Navigation Compose ทาง NavGraph จะ
DESTROYED
ก็ต่อเมื่อองค์ประกอบย่อยทั้งหมดเป็นDESTROYED
(I86552, b/198741720) - อาร์กิวเมนต์
NavDeepLink
ที่ลบได้ไม่จำเป็นต้องมีค่าเริ่มต้นอีกต่อไป (Ia14ef, b/198689811) - ตอนนี้การเรียก
setGraph()
ด้วยกราฟใหม่จะล้างกองซ้อนที่บันทึกไว้ทั้งหมดด้วย นอกเหนือจากลักษณะการทำงานก่อนหน้านี้ในการแสดงกองซ้อนที่บันทึกไว้ (I97f96) - แก้ไขปัญหาที่ระบบไม่แจ้งเตือนอินสแตนซ์
OnDestinationChangedListener
และcurrentBackStackEntryFlow
เมื่อใช้launchSingleTop
(Iaaebc)
การอัปเดตทรัพยากร Dependency
- ตอนนี้การเขียนการนําทางจะขึ้นอยู่กับ 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
เพื่อสร้าง NavTypes ที่กำหนดเองได้แล้ว ระบบจะรองรับประเภทที่กำหนดเองเฉพาะเมื่อคุณสร้างกราฟการนำทางแบบเป็นโปรแกรม เช่น ผ่าน 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) - ตอนนี้การคอมโพสิชันการนําทางจะคอมโพสใหม่อย่างถูกต้องเมื่อเปลี่ยนอาร์กิวเมนต์สแต็กย้อนกลับและใช้
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 จะบันทึกสถานะอย่างถูกต้องหลังจากการเปลี่ยนแปลงการกําหนดค่าและเมื่อเปลี่ยนกราฟขณะใช้ฟีเจอร์กองซ้อนย้อนกลับหลายรายการ (If5a3d, b/195141957)
- การเลือกแท็บเดิมอีกครั้งเมื่อใช้การเขียนการนําทางที่มีกองซ้อนกลับหลายรายการจะไม่ทําให้หน้าจอว่างเปล่าอีกต่อไป (I860dc, b/194925622)
- ตอนนี้
NavHost
จะสังเกตการเปลี่ยนแปลงในLifecycle.State
ของNavBackStackEntry
ซึ่งหมายความว่าการใช้NavHost
ใน FRG จะได้รับการคอมโพสิทใหม่อย่างถูกต้องเมื่อวงจรเปลี่ยนแปลงแทนที่จะส่งผลให้หน้าจอว่างเปล่า (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 ขัดขวางปุ่มย้อนกลับแม้ว่าจะไม่มีกองซ้อนย้อนกลับที่จะแสดง (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
(I0b8db, b/175392262)
การแก้ไขข้อบกพร่อง
- แก้ไข
NoSuchElementException
เมื่อเรียกpopBackStack()
จากภายในLifecycleObserver
ที่แนบอยู่กับNavBackStackEntry
ซึ่งเกิดจากอัปเดตสถานะของ NavController ซ้ำ (I64621) - ตอนนี้
AbstractListDetailFragment
อนุญาตให้นำSlidingPaneLayout
ออกจาก APK ของคุณได้ทั้งหมดเมื่อไม่ได้ใช้AbstractListDetailFragment
(I611ad) - ตอนนี้
NavGraph
และNavDestination
จะลบล้างเมธอด equals เพื่อให้ระบบถือว่าออบเจ็กต์ 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
ใหม่ ข้อมูลโค้ดนี้ใช้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
ที่กําหนดเองสามารถใช้pushWithTransaction
และpopWithTransition
API ในNavigatorState
เพื่อพุชหรือป๊อปปลายทางแบบไม่พร้อมกันได้แล้ว โปรดทราบว่ายังไม่มีโปรแกรมนำทางใดที่ใช้ API นี้ (Ic4d7c, b/172112072)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
NavDeepLinkBuilder
จะเพิ่มPendingIntent.FLAG_IMMUTABLE
ลงในPendingIntent
ที่createPendingIntent()
แสดงผล เพื่อให้ API นี้ทํางานตามที่คาดไว้เมื่อกําหนดเป้าหมายเป็น Android 12 (If8c52)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ
<include-dynamic>
ที่ระบบจะไม่ส่งอาร์กิวเมนต์ที่ส่งไปยังกราฟไปยังกราฟที่รวมแบบไดนามิกอย่างถูกต้อง (I3e115) - แก้ไข
NullPointerException
เมื่อไปยังปลายทางโดยใช้อาร์กิวเมนต์string[]
ที่มีค่าเริ่มต้นเป็น@null
(I1fbe8) - เพิ่มกฎ ProGuard สำหรับ
@Navigator.Name
เพื่อแก้ไขปัญหาเมื่อใช้ R8 3.1 โหมดเต็ม (I2add9, b/191654433) - SafeArgs จะไม่ทำงานไม่สำเร็จอีกต่อไปเมื่อคุณสร้างแอปด้วย
Kotlin
เวอร์ชันก่อน1.5.0
(Icd1ff, b/190739257)
เวอร์ชัน 2.4.0-alpha03
16 มิถุนายน 2021
androidx.navigation:navigation-*:2.4.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ต้องใช้การเรียก
navigate()
2 ครั้งเพื่อไปยังกราฟแบบไดนามิกที่รวมอยู่ (I7785c, b/188859835) - แก้ไขการถดถอยที่เกิดขึ้นในการนําทาง
2.4.0-alpha01
ซึ่งsetupActionBarWithNavController()
จะไม่นําไอคอนขึ้นออกอย่างถูกต้องเมื่อคุณอยู่ที่ปลายทางระดับบนสุด (I5d443, b/189868637) - แก้ไข
IllegalStateException
เมื่อเรียกใช้popBackStack()
หลังจากที่ก่อนหน้านี้แสดงกราฟรูทของ NavController (I2a330, b/190265699) - ตอนนี้กฎ ProGuard สำหรับ
by navArgs()
จะทำงานอย่างถูกต้องเมื่อใช้navigation-common
หรืออาร์ติแฟกต์ใดๆ ที่ขึ้นอยู่กับby navArgs()
(I68800, b/190082521) OnDestinationChangedListener
ที่เรียกใช้navigate()
เป็นครั้งแรกเมื่อได้รับคอลแบ็กตอนนี้จะได้รับการเรียกกลับครั้งที่ 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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ระบบรองรับเส้นทางสำหรับปลายทางของกิจกรรม, ฟragment และกล่องโต้ตอบ รวมถึงทั่วทั้ง DynamicNavigation Kotlin DSL แล้ว (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
ได้เพิ่ม API เวอร์ชันทดลองไว้ชั่วคราวเพื่อให้คุณเลือกไม่บันทึกสถานะได้ แม้ว่าการบันทึกสถานะเสมอจะเป็นลักษณะการทำงานที่ถูกต้อง แต่ยังคงมีการใช้ไลบรารีที่เลิกใช้งาน (เช่น รายการที่เก็บไว้) ซึ่งระบบไม่รองรับเมื่อบันทึกสถานะ ดังนั้นจึงเปิดโอกาสให้แอปค่อยๆ เปลี่ยนจาก API ที่ระบบไม่รองรับ (Idf93c)ตอนนี้ Navigation มี
findDestination()
และgetHierarchy()
API ที่สามารถใช้เพื่อช่วยในการติดตั้งใช้งาน NavigationUI ที่กําหนดเองfindDestination()
คือฟังก์ชันส่วนขยายในNavGraph
ที่จะค้นหาปลายทางภายในกราฟgetHierarchy()
คือฟังก์ชันในNavDestination
ที่ใช้เพื่อยืนยันว่าปลายทางหนึ่งๆ อยู่ภายในลําดับชั้นของอีกปลายทางหนึ่งหรือไม่ (I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
วิธีการ NavigationUI ที่ใช้
BottomNavigationView
ได้รับการอัปเดตให้ใช้ Superclass ที่เปิดตัวใน Material1.4.0
,NavigationBarView
แทน ซึ่งจะช่วยให้ใช้วิธีการเหล่านี้กับNavigationRailView
ได้ (Ib0b36, b/182938895)เมื่อขยายองค์ประกอบ
<action>
ผ่าน XML แอตทริบิวต์ภาพเคลื่อนไหวจะใช้แอตทริบิวต์ที่ดึงมาจากธีมได้โดยใช้ไวยากรณ์app:enterAnim="?attr/transitionEnter"
(I07bc1, b/178291654)
การเปลี่ยนแปลง API
- เราเลิกใช้งานตัวสร้าง DSL ของ Kotlin ที่ใช้รหัสแล้ว และควรแทนที่ด้วยตัวสร้างที่ใช้เส้นทาง (I85b42, b/188816479) (I9f58f, b/188816479)
การแก้ไขข้อบกพร่อง
- ตอนนี้
DialogFragmentNavigator
ใช้NavigatorState.pop()
API เพื่อแจ้งNavController
เมื่อปิดกล่องโต้ตอบโดยการกดปุ่มย้อนกลับของระบบหรือคลิกนอกกล่องโต้ตอบ เพื่อให้สถานะNavController
ซิงค์กับสถานะของ Navigator เสมอ (I2ead9) การนำทางจะไม่แสดง
ConcurrentModificationException
อีกต่อไปเมื่อใช้การดัดแปลงรายการOnDestinationChangedListeners
จากด้วยonDestinationChanged
callback (Ib1707, b/188860458)Safe Args ไม่ขัดข้องอีกต่อไปเมื่อพยายามสร้างพร็อพเพอร์ตี้ direction ใน Kotlin (Id2416, b/188564435)
ตอนนี้เรากำกับเนื้อหาให้กับเมธอด setId ใน NavDestination อย่างถูกต้องแล้วด้วย
@IdRes
เพื่อให้ยอมรับเฉพาะรหัสทรัพยากรเท่านั้น (I69b80)ตอนนี้พารามิเตอร์ int ของ
findNode
เป็นresId
แทนresid
(I7711d)
อัปเดตทรัพยากร Dependency
- ตอนนี้ 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 มีหน้าที่จัดการกองซ้อนที่ซ้อนกันของปลายทาง เพิ่มปลายทางลงในกองซ้อนที่ซ้อนกันเมื่อคุณ navigate()
ไปยังปลายทาง และนำปลายทางออกเมื่อคุณเรียก popBackStack()
หรือเรียกใช้ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions
ที่มีอยู่และการผสานรวมกับรายการ <action>
ใน XML กราฟการนำทางเพื่อรองรับการบันทึกและการกู้คืนกองซ้อนที่ย้อนกลับ (b/80029773)
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI
ของ onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
และ NavigationView.setupWithNavController()
บันทึกและกู้คืนสถานะของปลายทางที่ป๊อปโดยอัตโนมัติ ซึ่งช่วยให้รองรับกองซ้อนที่ย้อนกลับได้หลายกองโดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนําทางกับ Fragments เราขอแนะนําให้ใช้วิธีนี้เพื่อผสานรวมกับกองซ้อนที่ย้อนกลับหลายกอง (Ie07ca)
API พื้นฐานสําหรับการบันทึกและกู้คืนสถานะจะแสดงผ่านแพลตฟอร์มต่างๆ ดังนี้
ใน Navigation 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
ที่อยู่ในขอบเขตปลายทางการนำทาง เราได้อัปเดต Navigator
API เพื่อให้ Navigator
แต่ละรายการรองรับการบันทึกและกู้คืนสถานะของตนเอง
เราได้อัปเดต ComposeNavigator
สำหรับปลายทาง composable
ใน Navigation Compose และ FragmentNavigator
และ DynamicFragmentNavigator
สำหรับปลายทาง <fragment>
ใน Navigation ด้วย Fregment เพื่อใช้ 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 ของคลาสที่ใช้ทั่วไป (เช่น
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
รองรับ Navigator ที่กําหนดเองซึ่งใช้@Navigator.Name("dialog")
เดียวกันกับDialogFragmentNavigator
เริ่มต้น (Ib1c2c, b/175979140) - ปรับปรุงลักษณะการทํางานของ
NavigatorProvider#addNavigator
เพื่อให้การเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันไม่ก่อให้เกิดปัญหา (#176, b/187443146)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ simonschiller ที่สร้างการรองรับ Safe Args ที่สามารถสร้างเมธอด
fromSavedStateHandle()
สำหรับคลาสNavArgs
แต่ละคลาส (#122, b/136967621) - ขอขอบคุณ Bradleycorn ที่ทำให้การแยกวิเคราะห์อาร์กิวเมนต์ Enum จาก Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#152, b/135857840)
- ขอขอบคุณ osipxd ที่ช่วยแก้ไขปัญหาที่ตัวยึดตําแหน่งอาร์กิวเมนต์ต่อท้ายจะมีลําดับความสําคัญเหนือกว่า Deep Link ที่มีส่วนต่อท้ายที่ตรงกันทุกประการ (#153, b/184072811)
- ขอขอบคุณ tatocaster ที่อัปเดต Safe Args ให้ใช้ KotlinPoet
1.8.0
(#172, b/183990444) - ขอขอบคุณ jossiwolf ที่ทำให้ช่อง
name
และargument
รวมถึงฟังก์ชันการจัดโครงสร้างใหม่ของNamedNavArgument
เป็นสาธารณะ (#174, b/181320559) - ขอขอบคุณ jossiwolf ที่แนะนำส่วนขยาย
NavBackStackEntry#provideToCompositionLocals
ใหม่ซึ่งระบุNavBackStackEntry
ให้กับองค์ประกอบที่เกี่ยวข้อง (#175, b/187229439) - ขอขอบคุณ jossiwolf ที่ปรับปรุงลักษณะการทํางานของ
NavigatorProvider#addNavigator
เพื่อให้การเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันไม่ก่อให้เกิดปัญหา (#176, b/187443146)
Navigation Compose เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-alpha10
7 เมษายน 2021
androidx.navigation:navigation-compose:1.0.0-alpha10
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha10 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้
NavHost
ยอมรับModifier
แล้ว ซึ่งจะส่งต่อไปยังคอนเทนเนอร์คอมโพสิเบิลที่รวมคอมโพสิเบิลปลายทาง (I85aca, b/175125483)
การแก้ไขข้อบกพร่อง
NavHost
ใช้งานได้แล้วแม้ว่าจะไม่พบOnBackPressedDispatcherOwner
ก็ตาม ซึ่งกรณีนี้เกิดขึ้นเมื่อแสดงตัวอย่างNavHost
(I7d8b4)- ตอนนี้การเขียนการนําทางจะขึ้นอยู่กับการนําทาง
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 มีการคอมมิตเหล่านี้
การอัปเดตทรัพยากร Dependency
- ตอนนี้ 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 จะอยู่ก่อน route ในรายการพารามิเตอร์สําหรับ NavHost (Ie620e)
- ตอนนี้คุณสร้างกราฟโดยใช้เส้นทางเป็นจุดเริ่มต้นและจุดหมายนอกคอมโพสิชัน NavHost ได้แล้ว (Iceb75)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
android.navigation:navigation-compose:1.0.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.0.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ navigation-compose
ให้การผสานรวมระหว่างคอมโพเนนต์การนำทางกับ Jetpack Compose ซึ่งจะใช้ฟังก์ชัน @Composable
เป็นปลายทางในแอปพลิเคชัน
การเผยแพร่ครั้งแรกนี้ให้สิ่งต่อไปนี้
- คอมโพสิเบิล
NavHost
ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL ได้ - การกําหนดขอบเขตของวงจร
ViewModel
และสถานะที่จดจําไว้ที่ระดับปลายทาง - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
- รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า
- เขียนตัวช่วยที่เฉพาะเจาะจงใน
rememberNavController()
และcurrentBackStackEntryAsState()
เพื่ออนุญาตให้ยกสถานะและเชื่อมต่อNavController
กับคอมโพสิเบิลนอกNavHost
(เช่น แถบนําทางด้านล่าง)
ดูข้อมูลเพิ่มเติมได้ที่คู่มือการไปยังส่วนต่างๆ ของเครื่องมือเขียน
เวอร์ชัน 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
ซึ่งจะทํางานแบบเดียวกับที่มีอยู่แล้วสําหรับการทํา Deep Link ภายนอก (I975c3, b/181521877)
การแก้ไขข้อบกพร่อง
- เพิ่ม
OnBackPressedCallbacks
ลงในตัวจัดเตรียมที่มี เนื่องจากตอนนี้ LifecycleOwner จะขัดจังหวะการกลับมาอย่างเหมาะสมแล้ว หลังจากที่วงจรชีวิตของกิจกรรมเป็นSTOPPED
แล้วเป็นSTARTED
(Iff94f, b/182284739)NavBackStackEntry
- ตอนนี้การแยกวิเคราะห์โดเมนของ Deep Link จะไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ เพื่อให้
www.example.com
ตรงกับทั้งwww.example.com
และwww.Example.com
โปรดทราบว่าชื่อพารามิเตอร์การค้นหาจะยังคงคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#144, b/153829033) - แก้ไข
NullPointerException
ที่อาจเกิดขึ้นเมื่อปลายทางมีอาร์กิวเมนต์เริ่มต้นที่ไม่ใช่ Null หลายรายการ และคุณไปยังปลายทางนั้นขณะลบล้างเฉพาะอาร์กิวเมนต์ย่อยเท่านั้น (aosp/1644827)
การอัปเดตทรัพยากร Dependency
- ตอนนี้ปลั๊กอิน Navigation Safe Args Gradle ต้องใช้ปลั๊กอิน Kotlin Gradle 1.4.31 (aosp/1661058, b/181156413)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ
bentrengrove
สำหรับคำขอดึงที่ทำให้การแยกวิเคราะห์โดเมนของ 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 ซึ่งรองรับทั้งค่าจำนวนเต็มดิบและค่าฐาน 16 ที่มี0x
นำหน้า (#127, b/179166693) - ตอนนี้
android:defaultValue
สำหรับอาร์กิวเมนต์ที่มีapp:argType="float"
รองรับค่าเริ่มต้นที่เป็นจำนวนเต็มแล้ว ซึ่งจะช่วยให้คุณใช้android:defaultValue="0"
ได้โดยไม่ต้องใช้0.0
(#117, b/173766247)
การแก้ไขข้อบกพร่อง
- แก้ไขความคืบหน้าการติดตั้งที่หยุดชะงักเมื่อใช้การรองรับฟีเจอร์แบบไดนามิกของการนำทาง (Ib27a7, b/169636207)
- การเรียก
setViewModelStore
หรือsetLifecycleOwner
ด้วยออบเจ็กต์เดียวกันกับที่ตั้งไว้แล้วจะไม่ทํางาน (Idf491, b/177825470) - ตอนนี้ Safe-Args จะเพิ่มการกำกับเนื้อหาที่ระงับในเมธอดที่เหมาะสมเมื่อใช้ Java (I8fbc5, b/179463137)
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ
JvmName
สำหรับคำขอดึงข้อมูลเพื่อให้แน่ใจว่าตอนนี้ระบบจะแยกวิเคราะห์อาร์กิวเมนต์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
ของNavBackStackEntry
จะถูกย้ายไปยัง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 ที่มีอยู่ด้วย ซึ่งจะช่วยให้คุณทดสอบข้อมูลโค้ดที่แสดงเป็นกล่องโต้ตอบซึ่งใช้การไปยังส่วนต่างๆ ด้วย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 จะลบล้างเมธอดแฮชโค้ดและ equals (b/161586466)
- ตอนนี้การนําทางจะรวมปลายทางปัจจุบันไว้ใน "ไม่มีปลายทางที่มีรหัส" IllegalArgumentException ซึ่งควรปรับปรุงประสบการณ์การแก้ไขข้อบกพร่องของนักพัฒนาแอป (b/168311416)
การแก้ไขข้อบกพร่อง
- Safe Args จะไม่ตัดบรรทัดผลลัพธ์อีกต่อไป แม้ว่าชื่อคลาสอาร์กิวเมนต์ที่สร้างขึ้นจะยาวกว่า 100 อักขระก็ตาม (b/168584987)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้
navigation-ui
ต้องใช้ DrawerLayout 1.1.1 เพื่อให้มั่นใจว่าNavigationUI
จะเปิดลิ้นชักได้แม้ว่าจะใช้LOCK_MODE_LOCKED_CLOSED
หรือLOCK_MODE_LOCKED_OPEN
ก็ตาม (b/162253907) - ตอนนี้ Safe Args ขึ้นอยู่กับ KotlinPoet 1.6.0 (aosp/1435911)
- ตอนนี้ Safe Args ขึ้นอยู่กับ AGP 4.0.1 (aosp/1442337)
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
24 มิถุนายน 2020
androidx.navigation:navigation-*:2.3.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
- การผสานรวมโมดูลฟีเจอร์: อาร์ติแฟกต์
navigation-dynamic-features-runtime
และnavigation-dynamic-features-fragment
ช่วยให้คุณไปยังปลายทางที่กําหนดไว้ในโมดูลฟีเจอร์ได้ โดยจะจัดการการติดตั้งโมดูลฟีเจอร์โดยอัตโนมัติตามต้องการ ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ ด้วยโมดูลฟีเจอร์ - การทดสอบการนําทาง: อาร์ติแฟกต์
navigation-testing
มีTestNavHostController
ที่ช่วยให้คุณกําหนดปลายทางปัจจุบันและยืนยันกองซ้อนที่ย้อนกลับได้หลังจากการนําทาง ดูข้อมูลเพิ่มเติมได้ที่ทดสอบการนําทาง - การคืนค่าผลลัพธ์: ตอนนี้
NavBackStackEntry
ที่เชื่อมโยงกับปลายทางแต่ละรายการในกองซ้อนย้อนกลับของการนําทางช่วยให้คุณเข้าถึงSavedStateHandle
ที่เหมาะสมสําหรับการจัดเก็บสถานะที่บันทึกไว้จํานวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการกองซ้อนย้อนกลับที่เฉพาะเจาะจงได้ ดูข้อมูลเพิ่มเติมที่การส่งคืนผลลัพธ์ไปยังปลายทางก่อนหน้า NavigationUI
รองรับOpenable
: การใช้DrawerLayout
ทั้งหมดในNavigationUI
ได้รับการแทนที่ด้วยอินเทอร์เฟซOpenable
ทั่วไปมากขึ้นซึ่งเพิ่มไว้ใน CustomView1.1.0
และใช้งานโดยDrawerLayout
ใน DrawerLayout1.1.0
- การรองรับการดําเนินการและประเภท Mime ใน Deep Link: เราได้ขยายการให้บริการการทำ Deep Link เพื่อรองรับ
app:action
และapp:mimeType
นอกเหนือจากapp:uri
ที่มีให้บริการก่อนหน้านี้ ตอนนี้NavController
รองรับการไปยังส่วนต่างๆ โดยใช้การผสมผสานของช่องเหล่านี้ผ่านคลาสNavDeepLinkRequest
ใหม่ ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ โดยใช้ NavDeepLinkRequest
ปัญหาที่ทราบ
- เครื่องมือผสานไฟล์ Manifest ยังไม่รองรับการดำเนินการ 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)
การอัปเดตทรัพยากร Dependency
- ตอนนี้อาร์ติแฟกต์
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) - ตอนนี้ Navigation Graph Kotlin DSL แสดง
defaultArguments
Map
สําหรับการดําเนินการ ซึ่งสอดคล้องกับความสามารถในการตั้งค่าเริ่มต้นในองค์ประกอบ<action>
ในไฟล์ XML ของ Navigation (b/150345605)
การแก้ไขข้อบกพร่อง
- จาก Navigation 2.2.2: แก้ไข
IllegalStateException
เมื่อทํา Deep Link ไปยังปลายทางเริ่มต้นของกราฟเมื่อคุณมีอินสแตนซ์NavHostFragment
หลายรายการในกิจกรรม (b/147378752)
การอัปเดตทรัพยากร Dependencies
- ตอนนี้การนําทางจะขึ้นอยู่กับเศษ
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 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับกิจกรรมของโมดูลฟีเจอร์และปลายทางของแฟรกเมนต์ใน Navigation Kotlin DSL (b/148969800)
การเปลี่ยนแปลง API
- ตอนนี้คลาส
DynamicExtras
ไม่ได้ใช้รูปแบบตัวสร้างอีกต่อไปและสามารถสร้างได้โดยตรง (aosp/1253671) - ตอนนี้
DynamicActivityNavigator
ใช้Context
ในเครื่องมือสร้างแทนActivity
(aosp/1250252)
การแก้ไขข้อบกพร่อง
NavigationUI
ไม่ละเว้นป้ายกำกับว่าง (ปลายทางที่มีandroid:label=””
) อีกต่อไป และตั้งค่าชื่อเป็นสตริงว่างอย่างถูกต้อง (b/148679860)
การอัปเดตทรัพยากร Dependency
- ตอนนี้อาร์ติแฟกต์ของฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับ 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)
การเปลี่ยนแปลงทรัพยากร Dependency
- การนำทางได้เปลี่ยนกลับไปใช้ 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
ซึ่งเหมาะสำหรับจัดเก็บสถานะที่บันทึกไว้เพียงเล็กน้อยซึ่งควรเชื่อมโยงกับรายการสแต็กที่ซ้อนกันโดยเฉพาะ ดูตัวอย่าง Use Case ได้ที่การแสดงผลลัพธ์ (b/79672220)
การเปลี่ยนแปลง API
- เราได้เพิ่มวิธีการที่สะดวกของ
getCurrentBackStackEntry()
และgetPreviousBackStackEntry()
เพื่อให้ดึงข้อมูลNavBackStackEntry
สำหรับปลายทางปัจจุบันและก่อนหน้าได้ง่ายขึ้น (b/79672220)
การแก้ไขข้อบกพร่อง
- ตอนนี้
navigateUp()
จะส่งอาร์กิวเมนต์ของปลายทางปัจจุบันและKEY_DEEP_LINK_INTENT
ไปยังปลายทางก่อนหน้าเมื่อเปิดแอปในกองงานของคุณเอง (b/147456890)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้การนําทางจะขึ้นอยู่กับ 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
ใหม่ (และnavigation-dynamic-features-runtime
ซึ่งเป็นข้อกำหนดแบบเปลี่ยนผ่าน) ช่วยให้คุณรวมปลายทางหรือกราฟการนำทางทั้งหมด (ผ่าน<include-dynamic>
) จากโมดูลฟีเจอร์ได้ ซึ่งทำให้การติดตั้งโมดูลฟีเจอร์แบบออนดีมานด์เป็นไปอย่างราบรื่นเมื่อไปยังปลายทางเหล่านั้น ดูข้อมูลเพิ่มเติมได้ที่ไปยังส่วนต่างๆ ด้วยโมดูลฟีเจอร์ (b/132170186)
แก้ไขข้อบกพร่อง
- จากการนําทาง
2.2.1
: ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้องแทนที่จะเพิ่มต่อท้ายองค์ประกอบ{argument}
ที่ตามหลังหรือไม่ตรงกับ Deep Link (b/147447512) - จากการนําทาง
2.2.1
: กฎ ProGuard ของnavigation-ui
สําหรับDrawerArrowDrawable
ได้รับการอัปเดตแล้วเพื่อให้แน่ใจว่าไม่จําเป็นต้องใช้android.enableJetifier=true
(b/147610424) - จากการนำทาง
2.2.1
: ตอนนี้โมดูลnavigation-common-ktx
มีชื่อแพ็กเกจไฟล์ Manifest ที่ไม่ซ้ำกันแทนที่จะใช้ชื่อแพ็กเกจไฟล์ Manifest เดียวกับnavigation-runtime-ktx
(aosp/1141947)
การอัปเดตทรัพยากร Dependencies
- จาก 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
การอัปเดตทรัพยากร Dependency
- ตอนนี้การนําทางจะขึ้นอยู่กับเศษ
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)
การอัปเดตทรัพยากร Dependencies
- ตอนนี้การนำทาง
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()
ได้แล้ว โดยส่งรหัสของปลายทางหรือกราฟการนําทางในกองซ้อนด้านหลังNavBackStackEntry
ที่แสดงผลจะระบุLifecycleOwner
,ViewModelStoreOwner
(เหมือนกับที่แสดงผลโดยNavController.getViewModelStoreOwner()
) และSavedStateRegistryOwner
ที่ขับเคลื่อนโดยการนำทาง นอกเหนือจากการให้อาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น - การผสานรวม SavedState ของ Lifecycle ViewModel: ตอนนี้
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)
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้การนำทางจะขึ้นอยู่กับ 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 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้การนําทางจะขึ้นอยู่กับ 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
และคลาสย่อยของNavDestination
จะลบล้างtoString()
เพื่อให้ข้อมูลการแก้ไขข้อบกพร่องที่เป็นประโยชน์มากขึ้น (b/141264986)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะไม่สนใจพารามิเตอร์การค้นหาเพิ่มเติมเมื่อจับคู่ Deep Link แทนที่จะทำให้การจับคู่ไม่สําเร็จ (b/141482822)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะไม่สนใจอาร์กิวเมนต์ในเส้นทางของ Deep Link หากระบุพารามิเตอร์การค้นหาด้วย (b/141505755)
- ตอนนี้ส่วนขยาย
navArgs()
Kotlin ในActivity
มีข้อความแสดงข้อผิดพลาดที่ดีขึ้นเมื่อไม่มีส่วนเสริม (b/141408999) - ตอนนี้คลาส Java
Directions
ที่ Safe Args สร้างขึ้นจะมีค่าเริ่มต้น (b/141099045) - ตอนนี้คลาส Java
Args
ที่ Safe Args สร้างขึ้นจะมีค่าเริ่มต้น (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
- จากการนําทาง
2.1.0-rc01
: นําgetViewModelStore()
API ที่เลิกใช้งานแล้วในNavController
ซึ่งเปิดตัวใน2.1.0-alpha02
ออกแล้ว (aosp/1091021)
แก้ไขข้อบกพร่อง
- ตอนนี้
NavHostFragment
ใช้FragmentContainerView
แล้ว ซึ่งจะแก้ไขปัญหาการจัดลําดับ z ของภาพเคลื่อนไหวและการแยกการส่งข้อมูลส่วนแทรกของหน้าต่างไปยัง Fregments (b/137310379)
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
5 กันยายน 2019
androidx.navigation:navigation-*:2.1.0
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.0.0
- การกำหนดขอบเขต ViewModel ให้กับกราฟการนำทาง: ตอนนี้คุณสามารถสร้าง ViewModel ที่กําหนดขอบเขตในระดับกราฟการนำทางได้โดยใช้
by navGraphViewModels()
property delegate สําหรับผู้ใช้ Kotlin ที่ใช้ไลบรารี-ktx
หรือใช้getViewModelStoreOwner()
API ที่เพิ่มลงใน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
แล้ว เครื่องมือนำทางที่กำหนดเองซึ่งเพิ่มได้ผ่าน 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)
- แก้ไขข้อบกพร่องที่กองซ้อนย้อนกลับของการนําทางจะไม่ได้ซิงค์กันเมื่อมีการปรากฏ Fragment ขณะเพิ่ม Fragment เริ่มต้น (b/133832218)
เวอร์ชัน 2.1.0-alpha05
5 มิถุนายน 2019
androidx.navigation:*:2.1.0-alpha05
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- เราได้เปลี่ยนชื่อและย้าย API ที่เกี่ยวข้องกับโฮสต์ใน
NavController
ไปยังคลาสย่อยใหม่ของNavController
ซึ่งก็คือNavHostController
(aosp/966091) - เมธอด
setHostOnBackPressedDispatcherOwner()
ของNavController
เปลี่ยนไปใช้เมธอด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 ให้มาอยู่ที่ 220 มิลลิวินาทีจากเดิม 400 มิลลิวินาทีเพื่อให้ตรงกับความเร็วภาพเคลื่อนไหวเริ่มต้นของกิจกรรมและฟragment b/130055522
การเปลี่ยนแปลง API
- เราได้เลิกใช้งานเมธอด
createFragmentNavigator()
ของNavHostFragment
แล้ว และย้ายฟังก์ชันการทำงานไปยังเมธอดonCreateNavController()
ใหม่เพื่อให้ชัดเจนยิ่งขึ้นว่านี่คือจุดแรกเข้าที่ถูกต้องในการเพิ่ม Navigator ที่กําหนดเองเมื่อสร้างคลาสย่อยของNavHostFragment
b/122802849 - เพิ่มเมธอด
hasDeepLink()
ลงในNavDestination
เพื่อให้คุณตรวจสอบได้ว่าปลายทางหนึ่งๆ จัดการUri
หนึ่งๆ ได้หรือไม่ หรือในกรณีของNavGraph
ปลายทางใดก็ได้ในกราฟการนำทาง b/117437718
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์
OnDestinationChangedListener
อย่างถูกต้องแล้ว b/130630686 - ตอนนี้
NavHostFragment
จะขัดจังหวะเหตุการณ์ Back ของระบบโดยใช้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 หรือโดยใช้getViewModelStore()
API ที่เพิ่มลงใน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
การเปลี่ยนแปลงทรัพยากร Dependency
- ตอนนี้การไปยังส่วนต่างๆ จะขึ้นอยู่กับ
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
แบบ Null อีกต่อไปเมื่อมีอาร์กิวเมนต์ที่แนบมากับปลายทาง ซึ่งจะแก้ไขปัญหาเมื่อใช้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 นอกเหนือจากการอัปเดต Dependency ให้ตรงกับDependency ใหม่
โปรเจ็กต์ต้องย้ายข้อมูลไปยัง AndroidX เพื่อใช้ Navigation เวอร์ชัน 2.X Navigation 1.0 เวอร์ชันเสถียรจะเป็นรุ่นสุดท้ายที่ใช้การพึ่งพา Support Library การพัฒนาทั้งหมดในอนาคตหลังจาก 1.0 จะอิงตาม AndroidX และต่อยอดจากเวอร์ชันเสถียร 2.0
ไลบรารีที่ใช้ก่อน AndroidX
สําหรับเวอร์ชันการนําทางก่อน 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 ให้เพิ่มเส้นทางต่อไปนี้ในไฟล์ 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 ของการนำทาง รุ่นนี้มีการแก้ไขข้อบกพร่องหลายรายการ
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะไม่สนใจ
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 ของการนำทาง รุ่นนี้มีการแก้ไขข้อบกพร่อง 1 รายการ
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้ FRGMENT และ
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
นี่เป็นเวอร์ชันเบต้าแรกของ Navigation API และนับจากนี้ไป Navigation API คาดว่าจะทำงานได้อย่างเสถียรจนกว่าจะถึงเวอร์ชันถัดไป เว้นแต่จะเกิดปัญหาร้ายแรง รุ่นนี้มีการแก้ไขข้อบกพร่องและการเปลี่ยนแปลงลักษณะการทำงานบางอย่าง
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้การนําทางจะทําให้ค่าเริ่มต้นของอาร์กิวเมนต์ได้รับการปฏิบัติอย่างเหมือนกันขณะรันไทม์และผ่าน Safe Args ด้วยเหตุนี้ เฉพาะอาร์กิวเมนต์ที่มี
app:argType="reference"
เท่านั้นที่จะมีค่าเริ่มต้นซึ่งชี้ไปยังทรัพยากรอื่นได้ (เช่น@color/colorPrimary
) การพยายามใช้ค่าเริ่มต้นอ้างอิงกับapp:argType
อื่นจะทำให้เกิดข้อยกเว้นเมื่อแยกวิเคราะห์ XML การนำทาง b/123551990 - ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle 3.3.0 aosp/888413
- ตอนนี้ Safe Args ต้องใช้ Kotlin 1.3.20 aosp/888414
การแก้ไขข้อบกพร่อง
- ตอนนี้คุณใช้ Safe Args ในโมดูลไลบรารีและฟีเจอร์ของปลั๊กอิน Android Gradle ทุกเวอร์ชันได้แล้ว 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 เท่านั้นโดยเฉพาะ โดยใช้อาร์กิวเมนต์เริ่มต้นและคลาสแบบคงที่แทนรูปแบบตัวสร้างที่ยังคงใช้งานได้ผ่านปลั๊กอินandroidx.navigation.safeargs
เวอร์ชันเก่า b/110263087
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ Deep Link ที่ตรงกันจะเอนเอียงไปทาง 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 - คลาส Directions ที่ Safe Args สร้างขึ้นจะไม่มีตัวสร้างแบบสาธารณะอีกต่อไป คุณควรโต้ตอบกับเมธอดแบบคงที่ที่สร้างขึ้นเท่านั้น b/123031660
- ชั้นเรียน
NavDirections
ที่ Safe Args สร้างขึ้นจะไม่มีตัวสร้างแบบสาธารณะอีกต่อไป ควรจะสร้างขึ้นผ่านเมธอดแบบคงที่ในชั้นเรียน Directions ที่สร้างขึ้นเท่านั้น b/122963206 - ตอนนี้
Bundle
ที่แสดงผลจากgetArguments()
ของNavDirections
มีสถานะเป็น@NonNull
ไม่ใช่@Nullable
b/123243957
การแก้ไขข้อบกพร่อง
- ตอนนี้
NavDeepLinkBuilder
จัดการPendingIntent
หลายรายการพร้อมกันไปยังปลายทางเดียวกันได้อย่างถูกต้องแล้วโดยใช้อาร์กิวเมนต์ที่คุณส่งเข้ามาเพื่อระบุความเป็นเอกลักษณ์ b/120042732 - ตอนนี้
NavController
จัดการการดำเนินการpopBackStack()
อย่างถูกต้องแล้วเมื่อใช้NavHostFragment
ที่ฝังอยู่หรือรายการอื่นๆ ที่เป็น Fragment ย่อยที่มีกองซ้อนย้อนกลับ b/122770335 NavigationUI
ตั้งค่าคำอธิบายเนื้อหาของปุ่มขึ้นอย่างถูกต้องแล้วตอนนี้ b/120395362- ตอนนี้คลาส Directions ที่ Safe Args สร้างขึ้นจะจัดการการดำเนินการส่วนกลางที่มีรหัสเดียวกับการดำเนินการในปลายทางได้อย่างถูกต้องแล้ว b/122962504
- ตอนนี้คลาส
NavDirections
ที่ Safe Args สร้างขึ้นมีค่าhashCode()
ที่เท่ากันอย่างถูกต้องแล้วเมื่อequals()
จะแสดงผลเป็น True b/123043662 - ตอนนี้
FragmentNavigator
จะแสดงข้อความแสดงข้อผิดพลาดที่ดีขึ้นหากคุณพยายามทำFragmentTransactions
ที่กำหนดเองในFragmentManager
ของNavHostFragment
คุณควรใช้getChildFragmentManager()
เสมอ b/112927148
เวอร์ชัน 1.0.0-alpha09
18 ธันวาคม 2018
รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง
เราเลือกที่จะไม่พัฒนาอาร์ติแฟกต์ android.arch.navigation:navigation-testing
ต่อไป แม้ว่าการจําลองจะมีประโยชน์สําหรับการทดสอบภายในของ NavController
แต่เราขอแนะนําอย่างยิ่งให้ใช้กลยุทธ์การทดสอบอื่น เช่น การจําลองอินสแตนซ์ NavController
เพื่อยืนยันว่ามีการเรียกใช้ navigate()
ที่ถูกต้อง แนวทางนี้มีการอธิบายอย่างละเอียดในการพูดคุยเกี่ยวกับกิจกรรมเดียวที่ AndroidDevSummit 2018 และเราจะจัดทำเอกสารประกอบเพิ่มเติมเกี่ยวกับการทดสอบด้วยการนำทางโดยเฉพาะ
ฟีเจอร์ใหม่
MenuItem
ที่มีmenuCategory="secondary"
จะไม่แสดงกองซ้อนย้อนกลับอีกต่อไปเมื่อใช้กับเมธอดNavigationUI
b/120104424- ตอนนี้
AppBarConfiguration
ให้คุณตั้งค่าอินสแตนซ์สำรอง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 - ตอนนี้การนำทางจะขึ้นอยู่กับคลังสนับสนุน 28.0.0 b/120293333
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
- เปลี่ยนชื่อ
OnNavigatedListener
เป็นOnDestinationChangedListener
แล้ว b/118670572 - ตอนนี้
OnDestinationChangedListener
ส่งBundle
ของอาร์กิวเมนต์ด้วย aosp/837142 - ระบบได้นำแอตทริบิวต์
app:clearTask
และapp:launchDocument
รวมถึงเมธอดที่เกี่ยวข้องออกแล้ว ใช้app:popUpTo
กับรูทของกราฟเพื่อนำปลายทางทั้งหมดออกจากกองซ้อนที่ซ้อนกันอยู่ b/119628354 - ตอนนี้
ActivityNavigator.Extras
ใช้รูปแบบBuilder
และเพิ่มความสามารถในการตั้งค่า FlagIntent.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
instead. 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>
จะป้อนข้อมูล ARG จาก ARG ที่ไม่ใช่สตริงโดยการเรียกtoString()
b/120161365
Safe Args
- Safe Args รองรับออบเจ็กต์ Serializable รวมถึงค่า 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 มีการพึ่งพาที่แก้ไขแล้วสำหรับปลั๊กอิน Android Gradle 3.2.1 b/113167627
- ตอนนี้คุณสร้างเส้นทางสำหรับคลาสภายในได้แล้ว b/117407555
- แก้ปัญหาเกี่ยวกับการสร้างเส้นทางไปยังกราฟ <include> b/116542123
เวอร์ชัน 1.0.0-alpha06
20 กันยายน 2018
ฟีเจอร์ใหม่
- ตอนนี้รองรับองค์ประกอบแบบใช้ร่วมกันในการเปลี่ยนภาพสําหรับปลายทางที่เป็นส่วนและกิจกรรมแล้ว b/79665225 ดูข้อมูลเพิ่มเติมได้ที่ใช้การนําทางด้วยคอมโพเนนต์สถาปัตยกรรมการนําทาง
- ตอนนี้การเลือกรายการใน
NavigationView
จะปิดชีตด้านล่างที่มี b/112158843
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ตอนนี้เมธอด
navigate()
ของ Navigator จะรับพารามิเตอร์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()
ของคลาส Args ที่สร้างขึ้น b/111450897 - แก้ไขการสร้างที่ไม่สําเร็จใน Safe Args b/109409713
- แก้ไขการเปลี่ยนจากตัวระบุทรัพยากรเป็นชื่อ Java b/111602491
- แก้ไขข้อความแสดงข้อผิดพลาดเกี่ยวกับ Nullability ในปลั๊กอิน Safe Args
- เพิ่มคำอธิบายประกอบเกี่ยวกับความสามารถในการเป็น Null ที่ขาดหายไป
เวอร์ชัน 1.0.0-alpha04
19 กรกฎาคม 2018
การนำทาง 1.0.0-alpha04
และปลั๊กอิน gradle ของ Safe Args ที่เกี่ยวข้องมีการเปลี่ยนแปลง API, การเปลี่ยนแปลงลักษณะการทำงาน และการแก้ไขข้อบกพร่องหลายรายการ
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- NavHostFragment จะตั้งค่า Fragment ปัจจุบันเป็น Fragment การนำทางหลักเสมอ เพื่อให้แน่ใจว่าระบบจะปิดตัวจัดการ Fragment ย่อยก่อนที่จะปิด NavController ด้านนอก b/111345778
Safe Args
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ:
app:type
เปลี่ยนเป็นapp:argType
เพื่อหลีกเลี่ยงความขัดแย้งกับไลบรารีอื่นๆ เช่น ConstraintLayout 2.0.0-alpha1 b/111110548 - ตอนนี้ข้อความแสดงข้อผิดพลาดจาก Safe Args คลิกได้แล้ว b/111534438
- ตอนนี้คลาส Args ยืนยันว่าแอตทริบิวต์
NonNull
ไม่ได้เป็น Null จริงๆ b/111451769 - เพิ่มคำอธิบายประกอบ
NonNull
เพิ่มเติมลงในคลาส NavDirections และ Args ที่สร้างขึ้น b/111455455 b/111455456
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบหลังจากทำการ Deep Link ไปยังปลายทางของข้อมูลโค้ด b/111515685
เวอร์ชัน 1.0.0-alpha03
12 กรกฎาคม 2018
การนำทาง 1.0.0-alpha03
และปลั๊กอิน gradle ของ Safe Args ที่เชื่อมโยงกันมีการเปลี่ยนแปลง API, การเปลี่ยนแปลงลักษณะการทำงาน และการแก้ไขข้อบกพร่องหลายรายการ
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับแถบเครื่องมือแล้ว b/109868820
- เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับ CollapsingToolbarLayout แล้ว b/110887183
- ตอนนี้ popBackStack() จะแสดงผลเป็นเท็จเมื่อกองซ้อนย้อนกลับว่างเปล่า หรือเมื่อรหัสปลายทางที่ระบุไม่ได้อยู่ในกองซ้อนย้อนกลับ b/110893637
- ตอนนี้ FragmentNavigator จะไม่สนใจการดำเนินการไปยังส่วนต่างๆ หลังจากที่ FragmentManager บันทึกสถานะแล้ว เพื่อหลีกเลี่ยงข้อยกเว้น "ดำเนินการนี้ไม่ได้หลังจาก onSaveInstanceState" b/110987825
Safe Args
- การเปลี่ยนแปลงที่ส่งผลต่อเวอร์ชันเก่า: ระบบจะแทนที่อักขระที่ไม่ใช่ตัวอักษรและตัวเลขในชื่อการดำเนินการและอาร์กิวเมนต์ด้วยรูปแบบตัวพิมพ์ใหญ่ขึ้นต้นและตัวพิมพ์เล็กตามลำดับในชื่อเมธอด NavDirections ที่เกี่ยวข้อง
- เช่น
DemoController.index
จะกลายเป็นsetDemoControllerIndex
b/79995048 - เช่น
action_show_settings
จะกลายเป็นactionShowSettings
b/79642240
- เช่น
- การเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง: ตอนนี้ระบบจะถือว่าอาร์กิวเมนต์ไม่ใช่ค่า Null โดยค่าเริ่มต้น หากต้องการอนุญาตค่า Null ในสตริงและอาร์กิวเมนต์ที่แยกได้ ให้เพิ่ม
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 เบต้า 01 ได้เพิ่มกฎการเก็บรักษาสำหรับแอตทริบิวต์
android:name
ทั้งหมดในไฟล์ XML การนำทาง b/79874119 - แก้ไขหน่วยความจำรั่วไหลเมื่อแทนที่ FragmentNavigator เริ่มต้น b/110900142
เวอร์ชัน 1.0.0-alpha02
7 มิถุนายน 2018
การเปลี่ยนแปลงลักษณะการทำงาน
ตอนนี้
FragmentNavigator
ใช้setReorderingAllowed(true)
b/109826220ตอนนี้การนําทางจะถอดรหัสอาร์กิวเมนต์ที่แยกวิเคราะห์จาก URL ของ Deep Link b/79982454
การแก้ไขข้อบกพร่อง
แก้ไข
IllegalStateException
เมื่อเรียกใช้การไปยังส่วนต่างๆ จากเมธอดวงจรชีวิตของ Fragment b/79632233ตอนนี้การนําทางจะขึ้นอยู่กับคลังสนับสนุน 27.1.1 เพื่อแก้ไขการกะพริบเมื่อใช้ภาพเคลื่อนไหว b/80160903
แก้ไข
IllegalArgumentException
เมื่อใช้ defaultNavHost="true" เป็นรายการย่อย b/79656847แก้ไข
StackOverflowError
เมื่อใช้ NavDeepLinkBuilder b/109653065แก้ไข
IllegalArgumentException
เมื่อไปยังกราฟที่ซ้อนกัน b/80453447แก้ไขปัญหาเกี่ยวกับส่วนที่ซ้อนกันเมื่อใช้
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