การไปยังรายการต่างๆ
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
13 พฤศจิกายน 2024 | 2.8.4 | - | - | 2.9.0-alpha03 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มการอ้างอิงไปยัง Navigation คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
Groovy
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" }
Kotlin
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") }
Safe Args
To add Safe Args
to your project, include the following classpath
in your top level build.gradle
file:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.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") } }
You must also apply one of two available plugins.
To generate Java language code suitable for Java or mixed Java and Kotlin modules, add
this line to your app or module's build.gradle
file:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
You must have android.useAndroidX=true
in your
gradle.properties
file as per
Migrating to AndroidX.
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบ ktx
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.9
เวอร์ชัน 2.9.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 ออกในบิลด์ที่ผ่านการ Minify (I90e79, b/358137294)
ปัญหาที่ทราบ
- มีปัญหาเกี่ยวกับกฎใหม่ของ Lint ที่เพิ่มใน
Navigation 2.8.*
ซึ่งทำให้เกิดข้อผิดพลาดObsolete custom lint check
เมื่อพยายามเรียกใช้ Lint กับปลั๊กอิน Gradle ของ Android เวอร์ชัน 8.4 ขึ้นไป (b/368070326, b/371463741)
เวอร์ชัน 2.8
เวอร์ชัน 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
ในการนําทางการเขียนไม่แสดงการเปลี่ยนอย่างถูกต้องเมื่อใช้ปุ่มย้อนกลับของระบบโดยไม่มีท่าทางสัมผัส (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
เมื่อใช้การกดแป้น Back ของระบบระหว่างแท็บ (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
ของlaunchSingleTop
นั้นๆ ไว้ที่ด้านบนของกองซ้อนที่ซ้อนกัน (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) - ตอนนี้ Navigation Safe Args รองรับการใช้เนมสเปซที่กําหนดใน
build.gradle
แทนแพ็กเกจใน AndroidManifest แล้ว (I659ef, b/217414933)
เวอร์ชัน 2.5.0-alpha02
9 กุมภาพันธ์ 2022
androidx.navigation:navigation-*:2.5.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จากการนําทาง
2.4.1
: ตอนนี้NavHostFragment
จะตั้งค่าOnBackPressedDispatcher
อย่างถูกต้องเมื่อใช้การเชื่อมโยงข้อมูลกับกราฟที่ฝังอยู่ (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) - พอร์ตจาก Navigation
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()
ของ Fregment จะดำเนินการไม่สำเร็จพร้อมแสดง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) - แก้ไขข้อบกพร่องใน Navigation Compose ที่เก็บการอ้างอิงกิจกรรมเก่าไว้หลังจากการเปลี่ยนแปลงการกําหนดค่าหรือการหยุดทํางานของกระบวนการ (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)
การอัปเดตทรัพยากรที่เกี่ยวข้อง
- ตอนนี้การนําทางจะขึ้นอยู่กับเศษ
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)
การอัปเดตทรัพยากรที่เกี่ยวข้อง
- จาก 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
การอัปเดตทรัพยากรที่เกี่ยวข้อง
- ตอนนี้การนําทางจะขึ้นอยู่กับเศษ
1.2.4
(aosp/1277325)
เวอร์ชัน 2.2.1
เวอร์ชัน 2.2.1
5 กุมภาพันธ์ 2020
androidx.navigation:navigation-*:2.2.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.1 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้องแทนที่จะเพิ่มต่อท้ายองค์ประกอบ
{argument}
ที่ตามหลังหรือไม่ตรงกับ Deep Link (b/147447512) - กฎ
navigation-ui
ProGuard สำหรับDrawerArrowDrawable
ได้รับการอัปเดตเพื่อให้แน่ใจว่าไม่จำเป็นต้องใช้android.enableJetifier=true
(b/147610424) - ตอนนี้โมดูล
navigation-common-ktx
มีชื่อแพ็กเกจไฟล์ Manifest ที่ไม่ซ้ำกันแทนที่จะใช้ชื่อแพ็กเกจไฟล์ Manifest เดียวกับnavigation-runtime-ktx
(aosp/1141947)
การอัปเดตทรัพยากรที่เกี่ยวข้อง
- ตอนนี้การนำทาง
2.2.1
จะขึ้นอยู่กับ Lifecycle ViewModel SavedState2.2.0
และ Fragment1.2.1
เวอร์ชัน 2.2.0
เวอร์ชัน 2.2.0
22 มกราคม 2020
androidx.navigation:navigation-*:2.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.1.0
- NavBackStackEntry: ตอนนี้คุณเรียก
NavController.getBackStackEntry()
ได้แล้ว โดยส่งรหัสของปลายทางหรือกราฟการนําทางในกองซ้อนด้านหลังNavBackStackEntry
ที่แสดงผลจะระบุLifecycleOwner
,ViewModelStoreOwner
(เหมือนกับที่แสดงผลโดยNavController.getViewModelStoreOwner()
) และSavedStateRegistryOwner
ที่ขับเคลื่อนโดยการนำทาง นอกเหนือจากการให้อาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น - การผสานรวม SavedState ของ Lifecycle ViewModel: ตอนนี้
SavedStateViewModelFactory
เป็นโรงงานเริ่มต้นที่ใช้เมื่อใช้by navGraphViewModels()
หรือตัวสร้างViewModelProvider
ที่มีViewModelStoreOwner
ที่NavController.getBackStackEntry()
หรือNavController.getViewModelStoreOwner()
แสดงผล - การรองรับพารามิเตอร์การค้นหาสําหรับ Deep Link: ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่จัดเรียงใหม่แล้ว อาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือไม่มีค่าเป็นตัวเลือกเมื่อจับคู่ 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()
property delegate สําหรับผู้ใช้ 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 ของ Navigation ให้ใส่ 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
อีกต่อไป แต่ระบบจะละเว้น เพื่อช่วยแก้ไขปัญหาเกี่ยวกับNavHostFragment
ที่ฝังอยู่หรือมีหลายรายการ b/121340440
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
- วิธีการ
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
ที่ฝังอยู่หรือรายการย่อยอื่นๆ ของ Framgent ที่มีกองซ้อนย้อนกลับ 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