การไปยังรายการต่างๆ
อัปเดตล่าสุด | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
4 กันยายน 2024 | 2.8.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency สำหรับการนำทาง คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับ
ในแอปหรือโมดูล
Groovy
dependencies { def nav_version = "2.8.3" // 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.3" // 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.3" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.3" 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม
เวอร์ชัน 2.8
เวอร์ชัน 2.8.0
4 กันยายน 2024
ปล่อย androidx.navigation:navigation-*:2.8.0
แล้ว เวอร์ชัน 2.8.0 มีสัญญาผูกมัดเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.7.0
การนำทางด้วย Kotlin DSL Type-Safety
- ตอนนี้การนำทางมีความปลอดภัยสำหรับประเภทสำหรับ Kotlin DSL (ใช้โดย Navigation Compose) โดยใช้ Kotlin Serialization เพื่อให้คุณกำหนดปลายทางในกราฟการนำทางผ่านออบเจ็กต์และคลาสข้อมูลที่ปลอดภัยประเภทต่างๆ ดังนี้
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
ดูข้อมูลเพิ่มเติมที่บล็อกโพสต์เกี่ยวกับความปลอดภัยตามประเภทการเขียนในฟีเจอร์ช่วยเขียนการนำทาง
การย้อนกลับในการเขียนการนำทางการเขียน
- ตอนนี้การเขียนในการไปยังส่วนต่างๆ รองรับฟีเจอร์การคาดคะเนในแอปอีกครั้งผ่าน API ใหม่ของ
SeekableTransitionState
จากการสร้างภาพเคลื่อนไหว วิธีนี้ช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมการเปลี่ยนที่กำหนดเองได้ ก่อนที่จะตัดสินใจทำธุรกรรมผ่านท่าทางสัมผัสที่สมบูรณ์หรือยกเลิก
ส่วนย่อยการนำทางประกอบ
- เพิ่มอาร์ติแฟกต์
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" />
การเปลี่ยนแปลงอื่นๆ
- การเขียนในการนำทางต้องใช้ 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)
- ขณะนี้การนำทาง 2.8 สามารถทำงานอย่างถูกต้องกับ SDK 34 และจะไม่เปลี่ยนไปใช้ SDK 35 จนกว่ารุ่น 2.9 จะพร้อมกับไลบรารี AndroidX อื่นๆ (b/358798728)
เวอร์ชัน 2.8.0-beta07
7 สิงหาคม 2024
ปล่อย androidx.navigation:navigation-*:2.8.0-beta07
แล้ว เวอร์ชัน 2.8.0-beta07 มีสัญญาผูกมัดเหล่านี้
ปัญหาที่ทราบ
- เนื่องจาก b/358137294 ระบบรองรับเฉพาะ Enum ที่ซ้อนอยู่ในคลาสอื่นเท่านั้นเมื่อแกะกล่อง เราจะรองรับ Enum ระดับบนสุดในรุ่นถัดไป
แก้ไขข้อบกพร่อง
- เมื่อไปยังปลายทางที่ซ้ำกันหรือปลายทางที่แชร์ การนำทางจะให้ความสำคัญกับการไปยังจุดหมายที่ใกล้เคียงที่สุดจากตำแหน่งปัจจุบันในกราฟ (Ic89a4, b/352006850)
- ตอนนี้การไปยังส่วนต่างๆ ในอาร์กิวเมนต์ที่ปลอดภัยได้เพิ่ม
NavType.EnumType
ใหม่แล้ว ซึ่งหมายความว่าEnum
ประเภทไม่จำเป็นต้องใช้NavType
ที่กำหนดเองอีกต่อไป โปรดทราบว่าSerialName
ของEnum
ต้องเป็นชื่อเริ่มต้นแบบเต็ม (I66d22, b/346475493) - การไปยังส่วนต่างๆ ในอาร์กิวเมนต์ที่ปลอดภัยได้เพิ่มการรองรับในตัวสำหรับประเภทอาร์กิวเมนต์ที่เป็นค่าว่าง ซึ่งรวมถึง
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 มีสัญญาผูกมัดเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การตรวจสอบ Lint ของ
WrongStartDestinationType
ไม่ตรวจสอบออบเจ็กต์ Companion ในประเภทคลาสที่ส่งผ่าน ซึ่งทำให้ Lint ตรวจไม่พบข้อผิดพลาด (I92b09)
เวอร์ชัน 2.8.0-beta05
10 กรกฎาคม 2024
ปล่อย androidx.navigation:navigation-*:2.8.0-beta05
แล้ว เวอร์ชัน 2.8.0-beta05 มีสัญญาผูกมัดเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในการนำทางของ
singleTop
เมื่อNavGraphs
ที่ฝังไว้ใช้เส้นทางstartDestination
เดียวกัน (I17b94, b/294408596)
เวอร์ชัน 2.8.0-beta04
26 มิถุนายน 2024
ปล่อย androidx.navigation:navigation-*:2.8.0-beta04
แล้ว เวอร์ชัน 2.8.0-beta04 มีสัญญาผูกมัดเหล่านี้
แก้ไขข้อบกพร่อง
- ขณะนี้การนำทางรองรับการนำทางด้วยสตริงว่างในอาร์กิวเมนต์เส้นทาง (Ic5dbd, b/339481310)
- ปรับปรุงข้อความแสดงข้อผิดพลาดสำหรับตัวอนุกรมแบบกำหนดเองที่ประกาศในช่องชั้นเรียนโดยตรงผ่าน
@Serializable(with =...)
เพื่อชี้แจงว่าขณะนี้ฟีเจอร์นี้ไม่ได้รับการสนับสนุน (I052b0, b/341319151) - ตอนนี้ API ทดสอบ
SavedStateHandleFactory
สามารถใช้ในการทดสอบที่ไม่ใช่ Android ได้ แต่จะต้องใช้ Robolectric เพื่อรองรับการแยกวิเคราะห์อาร์กิวเมนต์ด้วยแพ็กเกจ (I76cdc, b/340966212) - แก้ไขข้อขัดข้องจากการคืนค่าสถานะเมื่อให้แอปกลับมาทำงานอีกครั้งหลังจากกระบวนการทำงานล้มเหลวโดยใช้การนำทางที่ปลอดภัยตามประเภทใน Compose (Ia8f38, b/341801005)
- แก้ไขปัญหาในการเขียนข้อความการนำทาง โดยหลังจากยกเลิกท่าทางสัมผัสการย้อนกลับที่คาดการณ์แล้ว
NavBackStackEntry
ที่ผู้ใช้ย้อนกลับจะไม่กลับไปยังสถานะของวงจรการใช้งานRESUMED
นอกจากนี้ วิธีนี้ยังช่วยให้ปลายทางที่กลับมาเคลื่อนไหวได้อย่างถูกต้องแทนที่จะสแนปให้เข้าที่หลังจากการสะบัด (I97a0c, b/346608857) - เมื่อใช้การย้อนกลับแบบคาดการณ์กับการเขียนการนำทาง ปลายทางที่ป๊อปจะมีลำดับ 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
ที่เป็นค่าว่าง อาร์กิวเมนต์เอาต์พุตจะเป็นค่าเริ่มต้นที่ประกาศในคลาส Serialible หรือค่าที่ส่งกลับเป็น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
ที่กำหนดเองซึ่งเป็นค่าว่าง (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 Serialified (รหัส 4867, b/339080702)
แก้ไขข้อบกพร่อง
- เพิ่มเอกสารพารามิเตอร์สำหรับฟังก์ชัน DSL ของ Navigation Kotlin แล้ว (I26a36)
เวอร์ชัน 2.8.0-alpha08
1 พฤษภาคม 2024
ปล่อย androidx.navigation:navigation-*:2.8.0-alpha08
แล้ว เวอร์ชัน 2.8.0-alpha08 มีคอมมิตเหล่านี้
อาร์กิวเมนต์ที่ปลอดภัยในการเขียนการนำทาง
- การดำเนินการเพื่อสนับสนุนความปลอดภัยของประเภทเวลาคอมไพล์สำหรับการเขียนการนำทาง และผู้ใช้ navigation Kotlin DSL ที่อิงตาม Kotlin Serialization ได้เสร็จสมบูรณ์แล้ว และตอนนี้ API ทดลองก่อนหน้านี้มีความเสถียรแล้ว
ฟังก์ชันนี้ใช้การแบ่งอนุกรมของ 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-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 ในการเขียนการนำทางโดยใช้แนวทางที่อิงตาม Kotlin Serialization ยังคงดำเนินต่อไป API เหล่านี้ยังไม่เสร็จและทำเครื่องหมายด้วยคำอธิบายประกอบ
ExperimentalSafeArgsApi
ระบบจะนำคำอธิบายประกอบนี้ออกเมื่อแพลตฟอร์ม API ทั้งหมดเสร็จสมบูรณ์ในรุ่นต่อๆ ไป (Iefd95, I409c8, ซึ่ง
เวอร์ชัน 2.8.0-alpha06
3 เมษายน 2024
ปล่อย androidx.navigation:navigation-*:2.8.0-alpha06
แล้ว เวอร์ชัน 2.8.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เริ่มรองรับ Safe Args ในการเขียนการนำทางโดยใช้วิธีการที่อิงตาม Kotlin Serialization แล้ว API เหล่านี้ยังไม่เสร็จและทำเครื่องหมายด้วยคำอธิบายประกอบ
ExperimentalSafeArgsApi
ระบบจะนำคำอธิบายประกอบนี้ออกเมื่อแพลตฟอร์ม API ทั้งหมดเสร็จสมบูรณ์ในรุ่นต่อๆ ไป (I6444e7, I988896, I2a1c5, I43a51, I8366a1, Ic5444e7, I988896, I2a1c5, I43a51, I8366a1, Ic576a1, Ic576a1, Ic576a1, Ic576a1, Ic576a1, Ic598996, I988996, I2a1c5, I43a51,I83641
แก้ไขข้อบกพร่อง
- ขณะนี้
NavHost
ใช้Alignment.TopStart
เป็นอาร์กิวเมนต์ contentAlignment เริ่มต้น ซึ่งจะสอดคล้องกับค่าเริ่มต้นสำหรับAnimatedContent
และแก้ไขกรณีของการปรับขนาดที่ไม่คาดคิดจากการเปลี่ยนกึ่งกลาง (I09e72, b/330111602) - เมื่อสะบัดท่าทางสัมผัสกลับแบบคาดเดาขณะใช้การเขียนการนำทาง
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
จะให้ APIvalueEquals
แบบเปิดใหม่ซึ่งพิจารณาว่าค่า 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
สำหรับการเปลี่ยนในการเขียนการนำทางด้วยการกำหนดองค์ประกอบดังกล่าวเป็นส่วนหนึ่งของการเริ่มต้นฟังก์ชัน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)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางที่ทำให้ ViewModels ของ
NavGraph
เปลี่ยนเป็นDESTROYED
เร็วเกินไป เนื่องจากViewModel
ของรายการที่เชื่อมโยงไม่ได้เป็นส่วนหนึ่งของสถานะที่บันทึกไว้ (Ib6bb7, b/317581849)
การอัปเดตการขึ้นต่อกัน
- การเขียนในการนำทางจะขึ้นอยู่กับการเขียน 1.7.0-alpha03
เวอร์ชัน 2.8.0-alpha02
7 กุมภาพันธ์ 2024
ปล่อย androidx.navigation:navigation-*:2.8.0-alpha02
แล้ว เวอร์ชัน 2.8.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้การเขียนในการไปยังส่วนต่างๆ รองรับฟีเจอร์การคาดคะเนในแอปอีกครั้งผ่าน API ใหม่ของ
SeekableTransitionState
จากการสร้างภาพเคลื่อนไหว วิธีนี้ช่วยให้คุณใช้ท่าทางสัมผัสย้อนกลับเพื่อดูปลายทางก่อนหน้าพร้อมการเปลี่ยนที่กำหนดเองได้ ก่อนที่จะตัดสินใจทำธุรกรรมผ่านท่าทางสัมผัสที่สมบูรณ์หรือยกเลิก (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)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การเขียนในการไปยังส่วนต่างๆ อาศัยการเขียน
1.7.0-alpha01
ในการแก้ไขปัญหาที่อาจทำให้เกิดการปรับขนาดภาพเคลื่อนไหวที่ไม่คาดคิด (b/297258205)
การสนับสนุนภายนอก
- ขอขอบคุณ SimonMarquis ที่แก้ไขปัญหาการแสดงผลสำหรับอาร์กิวเมนต์ที่ไม่ใช่สตริงเมื่อใช้ตัวช่วยของ
NavigationUI
ในการสร้างแถบแอปชื่อ
เวอร์ชัน 2.7.7
เวอร์ชัน 2.7.7
7 กุมภาพันธ์ 2024
ปล่อย androidx.navigation:navigation-*:2.7.7
แล้ว เวอร์ชัน 2.7.7 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ย้อนกลับจากการนำทาง
2.8.0-alpha01
: แก้ไขการรั่วไหลของBackStackState
ที่การเรียกsaveState()
หลายครั้งในNavBackStackEntry
ครั้งเดียวจะส่งผลให้ระบบบันทึกสถานะหลายสถานะ แต่จะคืนค่าได้เฉพาะสถานะที่บันทึกไว้ครั้งแรกเท่านั้น (I598b0, b/309559751) - พอร์ตไปยังการนำทาง
2.8.0-alpha01
: แก้ไขปัญหาที่ระบบแสดงอาร์กิวเมนต์ที่ไม่ใช่สตริงอย่างไม่ถูกต้องเมื่อใช้ตัวช่วยเหลือNavigationUI
ในการสร้างแถบชื่อของแถบแอป (#636, b/316676794)
การสนับสนุนภายนอก
- ขอขอบคุณ SimonMarquis ที่แก้ไขปัญหาการแสดงผลสำหรับอาร์กิวเมนต์ที่ไม่ใช่สตริงเมื่อใช้ตัวช่วยของ
NavigationUI
ในการสร้างแถบแอปชื่อ
เวอร์ชัน 2.7.6
เวอร์ชัน 2.7.6
13 ธันวาคม 2023
ปล่อย androidx.navigation:navigation-*:2.7.6
แล้ว เวอร์ชัน 2.7.6 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ฟังก์ชัน
NavGraph
equals()
จะพิจารณาโหนดของกราฟอื่นอย่างถูกต้อง แทนที่จะพิจารณาเฉพาะโหนดการเรียกใช้ ซึ่งจะทำให้กราฟที่มีโหนดที่มีรหัสต่างกันไม่ถือว่าเท่ากันอีกต่อไป (I401cb, b/311414915)
เวอร์ชัน 2.7.5
เวอร์ชัน 2.7.5
1 พฤศจิกายน 2023
ปล่อย androidx.navigation:navigation-*:2.7.5
แล้ว เวอร์ชัน 2.7.5 มีคอมมิตเหล่านี้
การปรับปรุงประสิทธิภาพ
- เพิ่มประสิทธิภาพได้อย่างมาก (ทั้งในแง่ของเวลาและจำนวนการจัดสรร) ในการเปรียบเทียบกราฟ 2 กราฟ ซึ่งหมายความว่าการเรียกเช่น
setGraph
ซึ่งเปรียบเทียบกราฟใหม่กับกราฟที่มีอยู่เป็นการภายในจะทำได้เร็วขึ้นมากและส่งผลให้มีการข้ามเฟรมน้อยลง ขอขอบคุณ Michał Z สำหรับการวิเคราะห์อย่างละเอียดที่นำไปสู่การปรับปรุงครั้งนี้ (I6ad62) - ตอนนี้
NavHost
จะแสดงผลปลายทางเริ่มต้นในการแต่งเพลงแรกแทนที่จะต้องรอให้บัตรผ่านที่ 2 อ่านสถานะที่อัปเดตแล้ว (I439a7, b/304852206)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Back Stack จะขัดข้องหากคุณเรียก
setGraph
มากกว่า 1 ครั้งด้วยกราฟที่เหมือนกันทุกประการในกรณีที่มีปลายทางในกราฟซึ่งมีการดำเนินการที่เชื่อมโยงปลายทาง 2 แห่ง (Ieaed7) - กล่องโต้ตอบที่นำทางไปแล้วปิดไปในเวลาต่อมาอย่างรวดเร็วจะไม่รั่วไหลในรายการ
NavController.visibleEntries
อีกต่อไป (I67586, b/287969970) - เมื่อมีการเรียกรายการแล้วตามด้วยการเปลี่ยนแปลงการกำหนดค่า ระบบจะล้าง
ViewModel
ของรายการอย่างเหมาะสมหากsaveState
เป็นค่าเท็จ (Idf242, b/298164648) - แก้ไขปัญหาที่
NavController
จัดการ Deep Link เดียวกันได้มากกว่า 1 ครั้งหากสแต็กด้านหลังว่างเปล่าทั้งหมดก่อนที่จะมีการเปลี่ยนการกำหนดค่าหรือเรียกใช้setGraph
เฉพาะเมื่อ Intent ขาเข้ามีการตั้งค่าแฟล็กFLAG_ACTIVITY_NEW_TASK
(I73c7f)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนำทางด้วย Fragment ขึ้นอยู่กับ 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) - แก้ปัญหาการกดย้อนกลับของระบบทำให้
currentDestination
ไม่อัปเดตอย่างถูกต้องเพื่อให้ตรงกับ Fragment ที่แสดง (Id0d6c, b/289877514) - ตอนนี้วงจรการใช้งาน
DialogFragment
จะย้ายไปยังสถานะRESUMED
อย่างถูกต้องเมื่อมีการปิดกล่องโต้ตอบด้านบน (I88f0d, b/301811387)
เวอร์ชัน 2.7.3
เวอร์ชัน 2.7.3
20 กันยายน 2023
ปล่อย androidx.navigation:navigation-*:2.7.3
แล้ว เวอร์ชัน 2.7.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางด้วย Fragments ที่ทำให้รายการ
visibleEntries
มีรายการที่ไม่ถูกต้อง (I5caa9, b/288520638) - แก้ไขปัญหาที่ทำให้ปลายทางของหน้าต่างแบบลอย (เช่น
Dialogs
,Bottomsheets
ฯลฯ) ไม่ได้รับ Callback ของRESUMED
Lifecycle (I3b866, b/287505132)
เวอร์ชัน 2.7.2
เวอร์ชัน 2.7.2
6 กันยายน 2023
ปล่อย androidx.navigation:navigation-*:2.7.2
แล้ว เวอร์ชัน 2.7.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การนำทางขึ้นอยู่กับอายุการใช้งาน
2.6.2
ซึ่งแก้ไขการโต้ตอบระหว่างrememberSaveable
กับNavHost
ของการเขียนในการไปยังส่วนต่างๆ ซึ่งจะทำให้สถานะrememberSaveable
ของปลายทางและอินสแตนซ์SavedStateHandle
ที่ViewModel
เป็นเจ้าของได้รับการคืนค่าอย่างถูกต้องหลังจากกระบวนการยุติการทำงานและการสร้างใหม่ (b/298059596, b/289436035) - แก้ไขปัญหาเมื่อแสดงกล่องโต้ตอบหลายรายการในการเขียนการนำทางพร้อมกัน โดยที่กล่องโต้ตอบที่ถูกบดบังบางส่วน (เช่น ไม่ใช่กล่องโต้ตอบด้านบนสุด) จะอยู่ในสถานะอายุการใช้งาน
CREATED
ไม่ใช่สถานะSTARTED
(aosp/2728520, b/289257213) - แก้ไขปัญหาเมื่อแสดงกล่องโต้ตอบหลายรายการในการเขียนการนำทางพร้อมกัน โดยที่การปิดกล่องโต้ตอบที่ด้านบนสุดจะทำให้กล่องโต้ตอบบนสุดใหม่ติดอยู่ในสถานะอายุการใช้งาน
STARTED
แทนที่จะย้ายไปที่RESUMED
อย่างถูกต้อง (aosp/2629401, b/286371387) - Navigation Safe Args ไม่ได้สร้างอินสแตนซ์อย่างตั้งใจอีกต่อไปหากไม่ได้มีการดำเนินการจริง (I0e385, b/260322841)
การอัปเดตการขึ้นต่อกัน
- การเขียนในการนำทางขึ้นอยู่กับ 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 Animation กลับไปยัง Navigation Compose ด้วยตนเองได้
ซึ่งหมายความว่าการสนับสนุนทั้งหมดสำหรับการตั้งค่าการเปลี่ยนที่กำหนดเองซึ่งมีอยู่ใน AnimatedNavHost
จะได้รับการสนับสนุนโดยตรงใน NavHost
จะไม่มีการเปลี่ยนแปลงใดๆ เพิ่มเติมในภาพเคลื่อนไหวของการนำทางตามควบคู่ และจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมกับคำแนะนำวิธีย้ายข้อมูลกลับไปยังเครื่องมือช่วยเขียนการนำทาง แต่จะกลับด้านคำแนะนำในการย้ายข้อมูล โดยที่ไม่จำเป็นต้องเปลี่ยนแปลง API อื่นใดหากคุณใช้ Accompanist Alpha เวอร์ชันล่าสุด (0.31.2-alpha
) อยู่แล้ว (b/197140101)
แก้ไขข้อบกพร่อง
- ตอนนี้ NavHost ในการเขียนในการนำทางจะสกัดกั้นระบบกลับการเรียกอย่างถูกต้องแม้ว่ากิจกรรมจะถูกหยุดและกลับมาทำงานอีกครั้งแล้วก็ตาม (Icb6de, b/279118447)
การอัปเดตการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับการเขียน
1.5.0
จาก1.1.0
เวอร์ชัน 2.7.0-rc01
26 กรกฎาคม 2023
ปล่อย androidx.navigation:navigation-*:2.7.0-rc01
แล้ว เวอร์ชัน 2.7.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
EnterTransition
และExitTransition
lambda ที่สร้างขึ้นเป็นส่วนหนึ่งของ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
ในการเขียนการนำทางสามารถดักฟังระบบกลับของการเรียกอย่างถูกต้อง แม้หลังจากที่Activity
ถูกSTOPPED
และRESUMED
แล้วก็ตาม (Icb6de, b/279118447)
เวอร์ชัน 2.7.0-alpha01
24 พฤษภาคม 2023
ปล่อย androidx.navigation:navigation-*:2.7.0-alpha01
แล้ว เวอร์ชัน 2.7.0-alpha01 มีคอมมิตเหล่านี้
ภาพเคลื่อนไหวจาก Accompanist
ตอนนี้ AnimatedContent
มีความเสถียรแล้ว เราจึงสามารถย้ายโค้ดจาก Accompanist Navigation Animation กลับไปยัง Navigation Compose ด้วยตนเองได้
ซึ่งหมายความว่าการสนับสนุนทั้งหมดสำหรับการตั้งค่าการเปลี่ยนที่กำหนดเองซึ่งมีอยู่ใน AnimatedNavHost
จะได้รับการสนับสนุนโดยตรงใน NavHost
จะไม่มีการเปลี่ยนแปลงใดๆ เพิ่มเติมในภาพเคลื่อนไหวของการนำทางตามควบคู่ และจะเลิกใช้งานอย่างเป็นทางการในเร็วๆ นี้ พร้อมกับคำแนะนำวิธีย้ายข้อมูลกลับไปยังเครื่องมือช่วยเขียนการนำทาง แต่จะกลับด้านคำแนะนำในการย้ายข้อมูล โดยที่ไม่จำเป็นต้องเปลี่ยนแปลง API อื่นใดหากคุณใช้ Accompanist Alpha เวอร์ชันล่าสุด (0.31.2-alpha
) อยู่แล้ว (b/197140101)
แก้ไขข้อบกพร่อง
- จากการนำทาง
2.6.0-rc02
: แก้ไขปัญหาเกี่ยวกับการนำทางในส่วนย่อย ซึ่งการนำทางด้วยpopUpTo
และนำส่วนย่อยออกจากสแต็กด้านหลังโดยไม่สร้างมุมมองใหม่อาจทำให้ระบบหยุดทำงาน (Ieb8d4, b/281726455)
การอัปเดตการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับการเขียน
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
จะเป็นสำเนาของอาร์กิวเมนต์ที่เปลี่ยนแปลงไม่ได้ซึ่งสร้างขึ้นเมื่อคุณนำทางไปยังปลายทางเท่านั้น ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ที่ทำกับแพ็กเกจเหล่านั้นจะไม่ปรากฏในการเข้าถึงอินสแตนซ์arguments
หรืออินสแตนซ์OnDestinationChangedListener
อื่นๆ ในภายหลัง- ตอนนี้
NavDeepLink
รองรับค่าเริ่มต้นสำหรับอาร์เรย์ ซึ่งช่วยให้รองรับพารามิเตอร์การค้นหาที่ซ้ำกันซึ่งจะแมปกับประเภทอาร์เรย์ของอาร์กิวเมนต์ ตอนนี้NavType
มีเมธอดเริ่มต้นซึ่งสามารถลบล้างได้เพื่อรวมค่าที่แยกวิเคราะห์แล้ว 2 ค่า - ตอนนี้คลาสย่อยที่กำหนดเองของ
NavType
สามารถลบล้างserializeAsValue
เพื่อทำให้ค่าเป็นอนุกรมเป็นสตริงได้แล้ว ทำให้การรวมทั้งการทำให้เป็นอนุกรมและดีซีเรียลไลซ์ (ผ่านparseValue
) รวมอยู่ในคลาสNavType
ได้โดยสมบูรณ์ ตอนนี้StringType
จะลบล้างเมธอดนี้เพื่อเรียกUri.encode
ในString
ที่ระบุ
การเปลี่ยนแปลงที่สำคัญของการเขียนในการนำทางตั้งแต่เวอร์ชัน 2.5.0
- เมื่อแสดงตัวอย่าง Composable ด้วย
NavHost
ระบบจะแสดงstartDestination
ของ NavGraph โดยค่าเริ่มต้น NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
ในขณะนี้เส้นทางรองรับทั้งหมดที่มีอาร์กิวเมนต์บางส่วนหรือทั้งหมด โปรดทราบว่าอาร์กิวเมนต์ต้องตรงกันกับอาร์กิวเมนต์ของรายการ- ตอนนี้การพยายามสร้าง
NavDeepLink
ที่ว่างเปล่าโดยใช้ Kotlin DSL ของnavDeepLink
จะส่งผลให้มีคำเตือน Lint ที่ระบุว่า Deep Link ต้องใช้ URI, Action และ/หรือ mimetype จึงจะใช้งานได้
การเปลี่ยนแปลงที่สำคัญของการนำทางด้วย Fragments ตั้งแต่เวอร์ชัน 2.5.0
NavHostFragment
ไม่ขัดขวางปุ่มย้อนกลับของระบบอีกต่อไป ซึ่งจะช่วยให้FragmentManager
พื้นฐานจัดการระบบได้อีกครั้ง การดำเนินการนี้จะอนุญาตให้ Fragment1.7.0-alpha01
ขึ้นไปแสดงภาพเคลื่อนไหวย้อนกลับแบบคาดการณ์ในแอปในอุปกรณ์ Android U- เมื่อใช้การนำทางด้วยส่วนย่อย การพยายามดำเนินการ
FragmentTransaction
ด้วยตนเองที่เพิ่มส่วนย่อยในสแต็กแบ็กของFragmentManager
จะทำให้เกิดIllegalArgumentException
คุณควรเพิ่ม Fragment ผ่านnavigate()
API เสมอ - เมื่อใช้สตริง
${applicationId}
ที่แน่นอนเป็นตัวยึดตำแหน่งในแอตทริบิวต์app:data
และapp:dataPattern
ในองค์ประกอบกิจกรรมของไฟล์ XML การนำทาง ระบบจะเติมตัวยึดตำแหน่งด้วยpackageName
ของบริบทเมื่อเพิ่มค่าเงินเฟ้อโดยอัตโนมัติ - ตอนนี้
FragmentNavigator
ใช้ API การเปลี่ยนเมื่อนำทางและเปิดNavBackStackEntries
ซึ่งหมายความว่าตอนนี้Lifecycle
ของNavBackStackEntry
จะรอให้เอฟเฟกต์พิเศษของ Fragment สำหรับการเข้าและออกเสร็จสมบูรณ์ก่อนย้ายLifecycle.State
ชิ้นสุดท้าย - ตอนนี้
DialogFragmentNavigator
ใช้ API การเปลี่ยนเมื่อนำทางและเปิดNavBackStackEntries
ซึ่งหมายความว่าตอนนี้Lifecycle
ของNavBackStackEntry
จะรอให้Lifecycle
ของDialogFragment
ย้ายไปที่DESTROYED
ก่อนที่จะย้ายไปยังDESTROYED
เอง - ตอนนี้
NavHostFragment
จะช่วยให้คุณเรียกข้อมูลNavController
ทันทีที่แนบNavHostFragment
กับFragmentManager
ได้ แทนที่จะดำเนินการหลังonCreate()
เท่านั้น - ตอนนี้การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารีการนำส่งฟีเจอร์ Play แบบละเอียด
- ตอนนี้ 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการนำทางใน Fragments ที่การนำทางด้วย
popUpTo
และนำส่วนย่อยออกจากแบ็กสแต็กโดยไม่สร้างมุมมองใหม่อาจทำให้ระบบหยุดทำงาน (Ieb8d4, b/281726455)
เวอร์ชัน 2.6.0-rc01
10 พฤษภาคม 2023
ปล่อย androidx.navigation:navigation-*:2.6.0-rc01
แล้ว เวอร์ชัน 2.6.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการนำทางที่มีส่วนย่อยซึ่งการนำส่วนย่อยออกผ่านการไปยังส่วนต่างๆ ด้วย
popUpTo
ใน Callback วงจรonResume()
จะทำให้เกิดIllegalStateException
(I21884, b/279644470)
เวอร์ชัน 2.6.0-beta01
19 เมษายน 2023
ปล่อย androidx.navigation:navigation-*:2.6.0-beta01
แล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavBackStackEntry
จะแสดงการใช้งานtoString
ที่กำหนดเอง (Iff00b)
แก้ไขข้อบกพร่อง
- เมื่อใช้การนำทางด้วยส่วนย่อย การพยายามดำเนินการ
FragmentTransaction
ด้วยตนเองที่เพิ่มส่วนย่อยในสแต็กแบ็กของFragmentManager
จะทำให้เกิดIllegalArgumentException
คุณควรเพิ่ม Fragment ผ่านnavigate()
API เสมอ (I6d38e) - เมื่อมี
navigate
ที่เพิ่มรายการและpopBackStack
ที่นํารายการดังกล่าวออกในเฟรมเดียวกัน รายการบนสุดที่ได้ในสแต็กด้านหลังจะทำให้รายการกลับไปเป็นLifecycle.State
ของRESUMED
อย่างสม่ำเสมอ (Id8067, b/276495952)
เวอร์ชัน 2.6.0-alpha09
5 เมษายน 2023
ปล่อย androidx.navigation:navigation-*:2.6.0-alpha09
แล้ว เวอร์ชัน 2.6.0-alpha09 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- การตรวจสอบคงที่สำหรับเส้นทางที่ไม่ถูกต้อง กล่าวคือหาก
NavDestination
มีNavArgument
ที่ไม่เป็นค่าว่าง เส้นทางของปลายทางนี้ต้องมีตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์ที่มีชื่อเดียวกันกับNavArgument
ที่เป็นค่าว่าง (Ic62bf, b/274697949) - ตอนนี้การไปยังส่วนต่างๆ ของ Deep Link ที่อิงตาม
Action/MimeType
จะล้มเหลวหากการดำเนินการนำทางไม่มีNavArgument
ที่เป็นค่าว่างซึ่งNavDestination
ซึ่งตรงกับAction/MimeType
ระบุไว้ (Ibfa17, b/271777424) - เมื่อ
NavController
ตั้งค่ากราฟด้วยเส้นทางและปลายทางเดียวกันกับกราฟก่อนหน้า ตอนนี้แผนภูมิจะแทนที่โหนดกราฟปัจจุบันและปลายทาง Back Stack ด้วยอินสแตนซ์ใหม่ได้อย่างเหมาะสม การดำเนินการนี้จะแก้ไขข้อขัดข้องเมื่อใช้onLaunchSingleTop
โดยไม่มีการบันทึกสถานะในการเขียนการนำทาง การทำเช่นนี้ยังช่วยแก้ไขข้อผิดพลาดเมื่อมีการนำทางไปยังปลายทางที่เชื่อมโยงกับบิลด์กราฟรากและสแต็ก Back Stack ที่ไม่ถูกต้อง (I5bc58, b/275258161, b/275407804)
เวอร์ชัน 2.6.0-alpha08
22 มีนาคม 2023
ปล่อย androidx.navigation:navigation-*:2.6.0-alpha08
แล้ว เวอร์ชัน 2.6.0-alpha08 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavHostFragment
จะช่วยให้คุณเรียกข้อมูลNavController
ทันทีที่แนบNavHostFragment
กับFragmentManager
ได้ แทนที่จะดำเนินการหลังonCreate()
เท่านั้น (Ic6382, b/220186282)
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อเรียกใช้กราฟแบบซ้อนซึ่งมีอาร์กิวเมนต์ที่ไม่เป็นค่าว่าง (6b3581, b/249988437) - เมื่อใช้ระบบอีกครั้งหลังจากนำทางด้วย
popUpTo
สถานะของNavController
จะปรากฏในรายการที่ถูกต้อง (I3a8ec, b/270447657) - ตอนนี้
FragmentNavigator
จะดึงรายการขึ้นมาอย่างถูกต้องเมื่อดึงแบ็กสแต็กเข้ามาผ่านระบบกลับหรือpopBackStack()
และไม่ว่าธุรกรรมจะใช้เอฟเฟกต์สำหรับส่วนย่อยหรือไม่ (I81bdf) - การเพิ่มส่วนย่อยใน
FragmentNavigator
FragmentManager
ที่ไม่ได้ใช้การนำทางจะไม่ทำให้เกิดข้อขัดข้องอีกต่อไป (b17204, b/274167493)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนําทางจะขึ้นอยู่กับอายุการใช้งาน
2.6.1
(586fe7) - ขณะนี้การนำทางจะขึ้นอยู่กับ SavedState
1.2.1
(078e4e) - ขณะนี้การนำทางขึ้นอยู่กับ ProfileInstaller
1.3.0
(512F0C)
เวอร์ชัน 2.6.0-alpha07
8 มีนาคม 2023
ปล่อย androidx.navigation:navigation-*:2.6.0-alpha07
แล้ว เวอร์ชัน 2.6.0-alpha07 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ตัวแปร API
getBackStackEntry
,popBackStack
,clearBackStack
ที่ใช้เส้นทางจะใช้รูปแบบเส้นทางที่มีอาร์กิวเมนต์ที่ไม่มีข้อมูลและพารามิเตอร์คำค้นหาที่เว้นว่างได้ (I22294, b/269302500) - แก้ไขปัญหาที่การเรียกใช้
clearBackStack()
จากNavController
ไม่ล้างสถานะที่บันทึกไว้ในตัวจัดการส่วนย่อยที่เชื่อมโยงกับกลุ่มข้อมูลด้านหลังที่ถูกล้างแล้ว (Ic1cce, b/271190202) - แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้เกิดการไฮไลต์
MenuItem
ที่ไม่ถูกต้องในBottomNavigationView
เมื่อใช้ "ระบบย้อนกลับ" ระหว่างแท็บ (I634f6, b/270447657) - แก้ไขการถดถอยใน 2.6.0-alpha06 ที่ทำให้
NavBackStackEntry
ไม่ย้ายไปยังสถานะ "ดำเนินการต่อ" เมื่อใช้Animation
(Ib3589, b/269646882)
เวอร์ชัน 2.6.0-alpha06
22 กุมภาพันธ์ 2023
ปล่อย androidx.navigation:navigation-*:2.6.0-alpha06
แล้ว เวอร์ชัน 2.6.0-alpha06 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เมื่อแสดงตัวอย่าง Composable ด้วย
NavHost
ระบบจะแสดงstartDestination
ของ NavGraph โดยค่าเริ่มต้น (I2b89f)
การเปลี่ยนแปลง API
- ตอนนี้โอเวอร์โหลด
NavController
navigate
ทั้งหมดจะมีคำอธิบายประกอบด้วย@MainThread
เพื่อให้แน่ใจว่าจะมีการเรียกในเทรดหลัก (I2c0b0, b/263427111)
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องเมื่อพยายามนำทางขณะใช้การนำทางส่วนย่อยแบบไดนามิก (I3ee29, b/268360479)
- แก้ไขข้อบกพร่องที่การไปยังส่วนย่อยอื่นผ่านปุ่มย้อนกลับของระบบไม่อัปเดตแถบด้านล่างไปยังรายการที่เลือกที่ถูกต้อง (If559f, b/269044426)
ปัญหาที่ทราบ
- เมื่อใช้การนําทางด้วย Fragments อายุการใช้งานของ
NavBackStackEntry
จะไม่ถึงRESUMED
เมื่อใช้ API ของAnimation
(b/269646882) - เมื่อใช้การนำทางด้วย Fragments และการนำทางด้วย
BottomNavigation
ถ้าคุณพยายามกู้คืนสแต็กย้อนกลับที่มีหลายรายการBottomMenuItem
จะไม่ได้รับการอัปเดตอย่างถูกต้อง (b/270447657) - เมื่อใช้การนำทางด้วยส่วนย่อย หลังจากคืนค่าสถานะ
NavBackStackEntry
Lifecycle
จะไม่ได้รับDESTROYED
เมื่อส่วนย่อยเป็น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
ใช้ API การเปลี่ยนเมื่อนำทางและเปิดNavBackStackEntries
ซึ่งหมายความว่าตอนนี้Lifecycle
ของNavBackStackEntry
จะรอให้เอฟเฟกต์พิเศษของ Fragment สำหรับการเข้าและออกเสร็จสมบูรณ์ก่อนย้ายLifecycle.State
ชิ้นสุดท้าย (I3cb19, b/238686802) - ตอนนี้
DialogFragmentNavigator
ใช้ API การเปลี่ยนเมื่อนำทางและเปิดNavBackStackEntries
ซึ่งหมายความว่าตอนนี้Lifecycle
ของNavBackStackEntry
จะรอให้Lifecycle
ของDialogFragment
ย้ายไปที่DESTROYED
ก่อนที่จะย้ายไปยังDESTROYED
เอง (I53ee5, b/261213893)
การเปลี่ยนแปลง API
- ตอนนี้
NavigatorState
มีprepareForTransition
API เพื่ออนุญาตให้Navigator
ย้ายNavBackStackEntries
ไปยังLifecycle.State
ระดับกลางได้ (I42c21, b/238686802) - ตอนนี้คุณสามารถเข้าถึงสแต็กด้านหลังที่เชื่อมโยงกับ
NavGraphNavigator
หรือComposeNavigator
ผ่านพร็อพเพอร์ตี้backstack
ได้แล้ว ตอนนี้ComposeNavigator
จะแสดง CallbackonTransitionComplete()
เพื่อทำเครื่องหมายNavBackStackEntry
ที่ดำเนินการนำทางหรือpopBackStack
ว่าเสร็จสมบูรณ์ (I02062, I718db, b/257519195)
แก้ไขข้อบกพร่อง
- ขณะนี้สถานะการนำทางจะไม่ดำเนินการเมื่อใช้ API ของ
push/popWithTransition
และมีการจัดการรายการอยู่แล้ว (Iadbfa, b/261213893) - เมื่อใช้
launchSingleTop
กับNavGraph
ที่ฝังไว้ ระบบจะเพิ่มปลายทางทั้งหมดที่เริ่มต้นจากปลายทางเดิมไปยังstartDestination
ไว้ที่ด้านบนของ Backstack อย่างถูกต้องเท่านั้น (Id4bea, b/253256629) - ตอนนี้การนำทางจะแทนที่อินสแตนซ์
DialogFragment
อย่างเหมาะสมเมื่อไปยังปลายทางเดียวกันโดยตั้งค่าแฟล็กlaunchSingleTop
เป็น true (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 ของการนําทางได้รับการแยกวิเคราะห์แบบ Lazy Loading แทนการเริ่มต้นกราฟ ซึ่งช่วยปรับปรุงประสิทธิภาพของแอปได้ตั้งแต่เริ่มต้นใช้งาน (Iab0ab)
- แก้ไขข้อขัดข้องที่เกิดจากการนำทางขึ้นหลังจากการทำ Deep Link ไปยังปลายทางด้วยอาร์กิวเมนต์เริ่มต้น Null (I51c24, b/243183636)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การรองรับโมดูลฟีเจอร์แบบไดนามิกของการนำทางจะขึ้นอยู่กับไลบรารีการนำส่งฟีเจอร์ Play แบบละเอียด (Ib4ddc)
- ตอนนี้ ARG ที่ปลอดภัยสำหรับการไปยังส่วนต่างๆ จะขึ้นอยู่กับปลั๊กอิน 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
: แก้ไขปัญหาที่ระบบไม่ลืมสถานะ Compose ที่บันทึกไว้ (เช่น การใช้งานrememberSaveable
) และนำออกเมื่อมีการแสดงปลายทางออกจากแบ็กสแต็ก (I64949)
การอัปเดตการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับ Fragment
1.5.4
(Icd424)
เวอร์ชัน 2.6.0-alpha02
5 ตุลาคม 2022
ปล่อย androidx.navigation:navigation-*:2.6.0-alpha02
แล้ว เวอร์ชัน 2.6.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- เมื่อส่งรหัสของกราฟการนำทางไปยัง
AppBarConfiguration
(เช่น ผ่านMenu
) ตอนนี้NavigationUI
จะพิจารณาเฉพาะปลายทางเริ่มต้นของกราฟการนำทางนั้นเป็นจุดหมายระดับบนสุด แทนที่จะทำเครื่องหมายปลายทางทั้งหมดภายในกราฟเป็นปลายทางระดับบนสุดอย่างไม่ถูกต้อง ทั้งนี้ ลักษณะการทำงานในการส่งผ่านรหัสของปลายทางแต่ละรายการจะไม่มีการเปลี่ยนแปลง ฟังก์ชันเดียวกันนี้ยังใช้ได้สำหรับโค้ดของคุณเองผ่านฟังก์ชันisTopLevelDestination
ใหม่ในAppBarConfiguration
(Ie936e, b/238496771)
แก้ไขข้อบกพร่อง
- ตอนนี้คอมโพเนนต์
navigation:navigation-fragment
จะขึ้นอยู่กับเวอร์ชัน Fragment1.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
ที่ว่างเปล่าโดยใช้ Kotlin DSL ของnavDeepLink
จะส่งผลให้มีคำเตือน Lint ที่ระบุว่า Deep Link ต้องใช้ URI, Action และ/หรือ mimetype จึงจะใช้งานได้ (I08d2f, b/154038883)
การเปลี่ยนแปลง API
- เพิ่มฟังก์ชันของส่วนขยาย
NavDestination
ใหม่ที่แยกวิเคราะห์ป้ายกำกับแบบไดนามิกที่มีอาร์กิวเมนต์ในรูปแบบandroid:label="{arg}"
เป็นสตริง รองรับอาร์กิวเมนต์ReferenceType
โดยการแยกวิเคราะห์ค่าR.string
เป็นค่าสตริง (I07d89, b/236269380)
การเปลี่ยนแปลงลักษณะการทำงาน
arguments
ของ NavBackStackEntry และarguments
ที่ส่งไปยังOnDestinationChangedListener
เปลี่ยนเป็นสำเนาของอาร์กิวเมนต์ที่เปลี่ยนแปลงไม่ได้ซึ่งสร้างขึ้นเมื่อคุณนำทางไปยังปลายทาง ซึ่งหมายความว่าการเปลี่ยนแปลงใดๆ ที่ทำกับแพ็กเกจเหล่านั้นจะไม่ปรากฏในการเข้าถึงอินสแตนซ์arguments
หรืออินสแตนซ์OnDestinationChangedListener
อื่นๆ ในภายหลัง (I676f5)
แก้ไขข้อบกพร่อง
- จากการนำทาง
2.5.2
: ตอนนี้การนำทางแบบไดนามิกจะพยายามติดตั้งปลายทางกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางดังกล่าว (Ia2c16, b/240292838) - จากการนำทาง
2.5.2
: ตอนนี้การนำทางจะแทนที่อินสแตนซ์ Fragment อย่างเหมาะสมเมื่อไปยังปลายทางเดียวกัน และตั้งค่าแฟล็กlaunchSingleTop
เป็น "จริง" (I5a2f1, b/237374580) - จากการนำทาง
2.5.2
: แก้ไขIllegalStateException
ที่เกิดจากการไปยังกราฟที่ซ้อนกันแบบ 2 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางการเริ่มต้นแบบ POP ใหม่ (I9f7cb, b/243778589)
เวอร์ชัน 2.5
เวอร์ชัน 2.5.3
24 ตุลาคม 2022
ปล่อย androidx.navigation:navigation-*:2.5.3
แล้ว เวอร์ชัน 2.5.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
NavHost
จะไม่ทำให้NoSuchElementException
ไม่มีปลายทางสำหรับCrossfade
เขียนอีกต่อไป ระบบจะข้ามการเรียบเรียงเพลงเท่านั้น (Ieb46e, b/253299416)- แก้ไขปัญหาที่ระบบไม่ลืมสถานะการเขียนที่บันทึกไว้ (เช่น การใช้งาน
rememberSaveable
) และถูกนำออกเมื่อปลายทางถูกดึงออกจากแบ็กสแต็ก (I64949)
เวอร์ชัน 2.5.2
7 กันยายน 2022
ปล่อย androidx.navigation:navigation-*:2.5.2
แล้ว เวอร์ชัน 2.5.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้การนำทางแบบไดนามิกจะพยายามติดตั้งปลายทางกิจกรรมจากโมดูลอื่นๆ อย่างถูกต้องก่อนที่จะไปยังปลายทางดังกล่าว (Ia2c16, b/240292838)
- ตอนนี้การนำทางจะแทนที่อินสแตนซ์ Fragment อย่างเหมาะสมเมื่อไปยังปลายทางเดียวกัน และตั้งค่าแฟล็ก
launchSingleTop
เป็น "จริง" (I5a2f1, b/237374580) - แก้ไข
IllegalStateException
ที่เกิดจากการไปยังกราฟที่ซ้อนกันแบบ 2 ชั้นซึ่งแชร์ระดับบนสุดกับปลายทางการเริ่มต้นแบบ POP ใหม่ (I9f7cb, b/243778589)
การอัปเดตการขึ้นต่อกัน
- การนำทาง
2.5.2
จะขึ้นอยู่กับ Fragment1.5.2
ในตอนนี้ (aosp/2178734)
เวอร์ชัน 2.5.1
27 กรกฎาคม 2022
ปล่อย androidx.navigation:navigation-*:2.5.1
แล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
Navigation Safe Args
จะไม่สร้างคำเตือนการเลิกใช้งานในคลาสที่สร้างขึ้นอีกต่อไปเมื่อใช้ประเภทอาร์กิวเมนต์ที่กำหนดเองซึ่งบันทึกไว้ในBundle
(Id86ed, b/237725966)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารีการนำทางจะขึ้นอยู่กับวงจร
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 Integration -
Navigation
สามารถให้บริการViewModelProvider.Factory
แบบไม่เก็บสถานะผ่านCreationExtras
ของ Lifecycle2.5.0
ได้แล้ว
SafeArgs ในการนำทาง
Navigation Safe Args
ได้อัปเกรดทรัพยากร DependencyAndroid Gradle Plugin
เพื่อใช้7.0.4
แล้ว โดยยกเลิกความเข้ากันได้สำหรับเวอร์ชัน AGP ก่อนวันที่7.0
- เพิ่มการสนับสนุนสำหรับแอตทริบิวต์ create.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
จะได้รับการทิ้งตามลำดับที่คาดไว้ กล่าวคือ ระบบได้กำจัด Composable ภายในแล้วก่อนด้านนอก Composable (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)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การนําทางจะขึ้นอยู่กับวงจร
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
เพื่อกำหนดรายการที่จะเขียน ซึ่งหมายความว่าเมื่อใช้การฝัง NavHostNavHost
ด้านในควรเคลื่อนไหวอย่างเหมาะสมแล้วในตอนนี้ (I4ba2b, b/225394514) - ตอนนี้
StateFlow
ของvisibleEntries
ที่ให้ไว้โดยNavController
จะอิงตามสถานะวงจรสูงสุดของรายการ แทนที่จะเป็นสถานะวงจรปัจจุบัน ซึ่งหมายความว่าแม้ว่าวงจรโฮสต์ของnavController
จะต่ำกว่า STARTED แต่รายการที่แสดงทั้งหมดจะยังคงเดิม (I9e2a8, b/225394514) - ตอนนี้
SavedStateViewFactory
รองรับการใช้CreationExtras
แล้ว แม้ว่าจะเริ่มต้นด้วยSavedStateRegistryOwner
ก็ตาม หากมีการระบุค่าเพิ่มเติม ระบบจะไม่สนใจอาร์กิวเมนต์เริ่มต้น (I6c43b, b/224844583) NavDeepLink
แยกวิเคราะห์ URI ด้วยพารามิเตอร์การค้นหาเดี่ยวที่ไม่มีค่าได้แล้ว (I0efe8, b/148905489)- ตอนนี้ระบบถือว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องใน Deep Link (I70a0d, b/217399862)
Navigation Safe Args
จะไม่ขัดข้องอีกต่อไปเมื่อใช้เนมสเปซ และไม่พบAndroidManifest.xml
(I17ccf, b/227229815)
เวอร์ชัน 2.5.0-alpha03
23 กุมภาพันธ์ 2022
ปล่อย androidx.navigation:navigation-*:2.5.0-alpha03
แล้ว เวอร์ชัน 2.5.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้คุณสามารถส่งผ่าน
CreationExtras
ไปยังby navGraphViewModels
ได้แล้ว เพื่อสร้างViewModel
(I29217, b/217618359)
แก้ไขข้อบกพร่อง
NavDeepLinks
รองรับอักขระขึ้นบรรทัดใหม่ที่เข้ารหัสที่ฝังอยู่ใน URI ของเส้นทาง/Deep Link อย่างเหมาะสมแล้ว (I513d1, b/217815060)- ตอนนี้
CreationExtras
จะทำงานอย่างถูกต้องเมื่อใช้กับNavBackStackEntries
เพื่อสร้าง ViewModels (I69161, b/217617710) - ขณะนี้ Args ของการนำทางที่ปลอดภัยรองรับการใช้เนมสเปซที่กำหนดแล้ว
ใน
build.gradle
แทนแพ็กเกจในไฟล์ AndroidManifest (I659ef, b/217414933)
เวอร์ชัน 2.5.0-alpha02
9 กุมภาพันธ์ 2022
ปล่อย androidx.navigation:navigation-*:2.5.0-alpha02
แล้ว เวอร์ชัน 2.5.0-alpha02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- จากการนำทาง
2.4.1
: ตอนนี้NavHostFragment
จะตั้งค่าพารามิเตอร์OnBackPressedDispatcher
เมื่อใช้การเชื่อมโยงมุมมองกับกราฟที่ซ้อนกัน (Ifbb51, b/214577959) - จากการนำทาง
2.4.1
: เมื่อมีการทํา Deep Link ผ่านNavGraph
ที่ซ้อนกันหลายรายการ สแต็กด้านหลังจะรวมปลายทางเริ่มต้นระดับกลางอย่างถูกต้อง (I504c0, b/214383060)
เวอร์ชัน 2.5.0-alpha01
26 มกราคม 2022
ปล่อย androidx.navigation:navigation-*:2.5.0-alpha01
แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavBackStackEntry
ได้ผสานรวมกับ ViewModel CreationExtras ซึ่งเป็นส่วนหนึ่งของ Lifecycle2.5.0-alpha01
แล้ว (Ib9fe2, b/207012490)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาการสร้างการเข้าถึง
ViewModel
ผ่านby navGraphViewModels()
จากonCreate()
ของ Fragment จะล้มเหลวด้วยIllegalStateException
(I8a14d) NavDeepLink
จะไม่ถอดรหัสอาร์กิวเมนต์ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้อาร์กิวเมนต์ที่เหมาะสมจะถูกส่งต่อไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399)
อาร์กิวเมนต์ที่ปลอดภัย
- ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Args สำหรับการนำทางจะไม่สามารถใช้งานกับ Android Studio เวอร์ชันก่อน 7.0 แต่ตอนนี้ใช้ได้กับ ปลั๊กอิน Android Gradle 7.1.0 ขึ้นไป (I41c88, b/213086135, b/207670704)
เวอร์ชัน 2.4.2
เวอร์ชัน 2.4.2
6 เมษายน 2022
ปล่อย androidx.navigation:navigation-*:2.4.2
แล้ว เวอร์ชัน 2.4.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ย้อนกลับจากการนำทาง
2.5.0-alpha03
:NavDeepLinks
รองรับอักขระขึ้นบรรทัดใหม่ที่เข้ารหัสซึ่งฝังอยู่ใน URI เส้นทาง/Deep Link อย่างถูกต้องในขณะนี้ (I513d1, b/217815060) - พอร์ตกลับจากการนำทาง
2.5.0-alpha03
: ขณะนี้ SafeArgs ของการนำทางรองรับการใช้เนมสเปซที่กำหนดแล้ว ในbuild.gradle
แทนแพ็กเกจในไฟล์ AndroidManifest (I659ef, b/217414933) - พอร์ตกลับจากการนำทาง
2.5.0-alpha04
:Navigation Safe Args
จะไม่ขัดข้องอีกต่อไปเมื่อใช้ Namespace และไม่มีAndroidManifest.xml
(I17ccf, b/227229815) - พอร์ตกลับจากการนำทาง
2.5.0-alpha04
: ตอนนี้ระบบถือว่าสตริงว่างเป็นอาร์กิวเมนต์ที่ถูกต้องใน Deep Link ลิงก์ (I70a0d, b/217399862)
เวอร์ชัน 2.4.1
เวอร์ชัน 2.4.1
9 กุมภาพันธ์ 2022
ปล่อย androidx.navigation:navigation-*:2.4.1
แล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้
NavHostFragment
จะตั้งค่าOnBackPressedDispatcher
ให้ถูกต้องเมื่อใช้ Viewbinding กับกราฟที่ซ้อนกัน (Ifbb51, b/214577959) - เมื่อมีการทํา Deep Link ผ่าน
NavGraph
ที่ซ้อนกันหลายรายการ ตอนนี้แบ็กเอนด์จะมีปลายทางเริ่มต้นระดับกลางอย่างถูกต้อง (I504c0, b/214383060) - พอร์ตย้อนกลับจากการนำทาง
2.5.0-alpha01
: แก้ไขปัญหาการเข้าถึง ViewModel ที่สร้างขึ้น ผ่านby navGraphViewModels()
จากonCreate()
ของ Fragment จะล้มเหลวโดยมีIllegalStateException
(I8a14d) - ย้อนกลับจากการนำทาง
2.5.0-alpha01
:NavDeepLink
ไม่ได้ถอดรหัสอาร์กิวเมนต์ 2 ครั้งโดยไม่จำเป็นอีกต่อไป ซึ่งหมายความว่าตอนนี้อาร์กิวเมนต์ที่ถอดรหัสอย่างถูกต้องจะถูกส่งต่อไปยังปลายทางสุดท้ายของคุณ (I31b0a, b/210711399) - พอร์ตจากการนำทาง
2.5.0-alpha01
: ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle เวอร์ชัน 7.0.4 แล้ว ซึ่งหมายความว่า Args สำหรับการนำทางที่ปลอดภัยจะไม่สามารถใช้ร่วมกับ Android Studio เวอร์ชันก่อน 7.0 ได้อีกต่อไป แต่สามารถใช้งานร่วมกับปลั๊กอิน Android Gradle 7.1.0 ขึ้นไปได้แล้ว (I41c88, b/213086135, b/207670704)
เวอร์ชัน 2.4.0
เวอร์ชัน 2.4.0
26 มกราคม 2022
ปล่อย androidx.navigation:navigation-*:2.4.0
แล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- อาร์ติแฟกต์การนำทางทั้งหมดได้รับการเขียนใหม่ใน Kotlin วิธีนี้ช่วยเพิ่มความสามารถในการเว้นว่างของชั้นเรียนที่ใช้คำทั่วไป (เช่น คลาสย่อย
NavType
) ระบบได้ย้ายฟังก์ชันของส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์-ktx
ไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว อาร์ติแฟกต์-ktx
จะยังคงเผยแพร่ต่อไป แต่จะว่างเปล่าทั้งหมด - ตอนนี้อาร์ติแฟกต์
navigation-fragment
มีการใช้งาน เลย์เอาต์ 2 แผงที่สร้างไว้ล่วงหน้าผ่านAbstractListDetailFragment
ใหม่แล้ว ส่วนย่อยนี้ใช้SlidingPaneLayout
เพื่อจัดการแผงรายการ (ที่คลาสย่อยของคุณมี) และแผงรายละเอียดซึ่งใช้NavHostFragment
เป็นการใช้งาน ดังที่แสดงในตัวอย่างการใช้งานของเรา - เมธอด
currentBackStackEntryAsFlow()
ในNavController
จะให้Flow
ที่ปล่อยออกมาเมื่อใดก็ตามที่NavBackStackEntry
ปัจจุบันมีการเปลี่ยนแปลง ขั้นตอนนี้สามารถใช้เป็นทางเลือกในการจัดการOnDestinationChangedListener
ด้วยตนเองได้ - ตอนนี้ NavController ให้คุณเรียกรายการอินสแตนซ์
NavBackStackEntry
ที่ปรากฏทั้งหมดเป็นStateFlow
ผ่านพร็อพเพอร์ตี้visibleEntries
แบบทดลองได้แล้ว - ตอนนี้คุณสามารถขยายคลาส
NavType
เพื่อสร้าง NavTypes ที่กำหนดเอง จะมีการรองรับประเภทที่กำหนดเองเฉพาะเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรม เช่น ผ่านทาง กราฟการนำทาง Kotlin DSL ขณะนี้การนำทางมี API
findStartDestination()
และgetHierarchy()
ซึ่งสามารถใช้เพื่อช่วยติดตั้งใช้งาน NavigationUI ที่กำหนดเองfindStartDestination()
เป็นฟังก์ชันส่วนขยายในNavGraph
ซึ่งจะค้นหาปลายทางเริ่มต้นที่แท้จริงซึ่งจะแสดงเมื่อคุณไปยังกราฟ แม้ว่าstartDestination
จะเป็นNavGraph
ที่ฝังอยู่ก็ตามgetHierarchy()
เป็นฟังก์ชันในNavDestination
ที่ใช้ยืนยันว่าปลายทางหนึ่งๆ อยู่ภายในลำดับชั้นของปลายทางอื่นหรือไม่val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
ระบบได้อัปเดตเมธอด
NavigationUI
ที่ใช้BottomNavigationView
เพื่อใช้ Superclass ซึ่งเปิดตัวใน Material1.4.0
แทนNavigationBarView
แล้ว การดำเนินการนี้ช่วยให้ใช้วิธีการเหล่านี้กับNavigationRailView
ได้เมื่อขยายองค์ประกอบ
<action>
ผ่าน XML แอตทริบิวต์ภาพเคลื่อนไหวสามารถใช้แอตทริบิวต์ที่ดึงมาจากธีมของคุณโดยใช้ไวยากรณ์app:enterAnim="?attr/transitionEnter"
ตอนนี้ Safe Args จะสร้างเมธอด
fromSavedStateHandle()
ให้กับคลาสNavArgs
แต่ละคลาส (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
เส้นทางการนำทางและ Kotlin DSL
เวอร์ชันก่อนๆ ของการนำทางอาศัยแต่ละปลายทางที่มีรหัสจำนวนเต็มคงที่ซึ่งจะระบุตัวตนของคุณจากปลายทางระดับเดียวกัน และอนุญาตให้คุณnavigate()
ไปยังจุดหมายนั้นโดยตรงหรือผ่านการดำเนินการก็ได้ แม้ว่าวิธีนี้จะยังคงถูกต้องและมีประโยชน์ โดยเฉพาะอย่างยิ่งในกรณีที่คุณกำหนดกราฟการนำทางใน XML และสามารถใช้ค่าคงที่ R.id
ที่สร้างขึ้นโดยอัตโนมัติหรือ Safe Args (ซึ่งใช้ค่าคงที่เหล่านั้นเพื่อสร้างโค้ดขณะสร้าง) ระบบจำนวนเต็มที่ไม่ซ้ำกันนี้ไม่ได้จับความหมายและการแสดงออกที่จำเป็นต่อการรองรับกราฟแบบไดนามิกเต็มรูปแบบที่สร้างขึ้นแบบเป็นโปรแกรมขณะรันไทม์ผ่าน การนำทาง DSL ของ Kotlin
รุ่นนี้นำเสนอตัวเลือกใหม่ในการระบุจุดหมายในกราฟการนำทางด้วยเส้นทางโดยไม่ซ้ำกัน เส้นทางคือ String
ซึ่งกำหนดเส้นทางที่ไม่ซ้ำกันไปยังปลายทาง ตอนนี้เมธอด Kotlin DSL ทั้งหมดที่ใช้รหัสปลายทางเลิกใช้งานแล้วและแทนที่ด้วย API ที่เทียบเท่าซึ่งใช้เส้นทาง
แต่ละเส้นทางควรถือเป็นส่วน "เส้นทาง" ของ Uri
ที่กำหนดจุดหมายนั้น เช่น home
, profile/{userId}
, profile/{userId}/friends
ฯลฯ เมื่อข้อมูลประจำตัวของปลายทางเชื่อมโยงกับเนื้อหาที่เฉพาะเจาะจง อาร์กิวเมนต์แบบไดนามิกเหล่านั้นควรเป็นส่วนหนึ่งของเส้นทาง โดยเป็นไปตามกฎเดียวกันกับ Implicit Deep Link
ตอนนี้ API ของ NavController
ทั้งหมดที่เคยใช้แค่รหัสหนึ่งๆ มีการโอเวอร์โหลดที่ใช้เส้นทาง String
ซึ่งรวมถึง navigate()
, popBackStack()
, popUpTo()
และ getBackStackEntry()
ปัญหานี้เกี่ยวข้องกับ API บางอย่าง
- พร็อพเพอร์ตี้ Kotlin
popUpTo
ใน Kotlin DSL เลิกใช้งานแล้วเพื่อpopUpToId
- มีการเลิกใช้งาน API ของ
getStartDestination()
แล้วเพื่อประโยชน์ ของgetStartDestinationId()
การไปยังส่วนต่างๆ ตามเส้นทางจะใช้กฎเดียวกับ implicit Deep Link ตรงที่คุณสามารถนำทางไปยังปลายทางในกราฟที่ซ้อนกันได้โดยตรง เพื่อให้แน่ใจว่าเส้นทางเหล่านี้สามารถใช้ได้ในโปรเจ็กต์แบบหลายโมดูลโดยไม่ต้องเพิ่มลิงก์ในรายละเอียดที่มองเห็นได้จากภายนอกอย่างชัดเจนไปยังปลายทางแต่ละแห่ง ซึ่งต่างจากการนำทางตามรหัส
เขียนการนำทาง
อาร์ติแฟกต์ navigation-compose
จะมีการผสานรวมระหว่างคอมโพเนนต์การนำทางและ Jetpack Compose โดยจะใช้ฟังก์ชัน @Composable
เป็นปลายทางในแอปพลิเคชันของคุณ
รุ่นนี้มีสิ่งต่อไปนี้
- Composable ของ
NavHost
ที่ช่วยให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL โดยใช้ปลายทางcomposable
และdialog
รวมถึงการรองรับ Navigators ที่ไม่บังคับ เช่น จากเนื้อหาการนำทางของ Accompanist - การสนับสนุนที่จำเป็นสำหรับการครอสเฟดระหว่างปลายทาง ภาพเคลื่อนไหวในการนำทางของ Accompanist สามารถใช้เพื่อควบคุมการเปลี่ยนเข้าและออกโดยใช้ Compose API เวอร์ชันทดลอง
- การจำกัดขอบเขต
Lifecycle
ไปยังปลายทางที่ประกอบกันได้แต่ละรายการ ปลายทางแต่ละรายการจะถึงสถานะRESUMED
เฉพาะเมื่อการเปลี่ยนเข้าเสร็จสิ้นและตกลงเป็นSTARTED
ทันทีเมื่อการเปลี่ยนออกจากโหมดเริ่มต้น คุณจึงหลีกเลี่ยงปัญหาIllegalStateException
และมัลติทัชทั้งหมดได้ด้วยการทริกเกอร์การเรียกnavigate
เมื่อLifecycle
คือRESUMED
เท่านั้น - การจำกัดขอบเขต
ViewModel
(ผ่านviewModel()
API ของ Lifecycle ViewModel Compose2.4.0
หรือhiltViewModel()
ของ Hilt Navigation Compose1.0.0
ที่ระดับปลายทาง ซึ่งเป็นขอบเขตที่ยังคงอยู่กับการเปลี่ยนแปลงการกำหนดค่าและอยู่ใน Back Stack (เมื่อจัดการเนื้อหาที่ Composable ของคุณไม่ได้) และสัญญาณในonCleared()
ของ ViewModel ที่ระบุการกำจัดแบบถาวรและการล้างสถานะที่เชื่อมโยงกับNavBackStackEntry
นั้น - กำหนดขอบเขตสถานะ
rememberSaveable
ที่ระดับปลายทาง เพื่อให้มั่นใจว่าสถานะ Composable ทั้งหมดได้รับการบันทึกและกู้คืนโดยอัตโนมัติเมื่อคุณกลับไปยังปลายทาง - รองรับการบันทึกและกู้คืนสถานะของ
NavController
และสถานะของปลายทางอย่างสมบูรณ์หลังกระบวนการเสียชีวิตและการสร้างขึ้นมาใหม่ - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า
เขียนตัวช่วยที่เจาะจงใน
rememberNavController()
และcurrentBackStackEntryAsState()
เพื่ออนุญาตสถานะการรอปและการเชื่อมต่อNavController
กับ Composable นอกNavHost
(เช่น แถบนำทางด้านล่าง)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
ดูข้อมูลเพิ่มเติมที่คำแนะนำการนำทางในการเขียน
แบ็กสแต็กหลายรายการ
NavController มีหน้าที่จัดการปลายทางสแต็กด้านหลัง โดยเพิ่มปลายทางไปยังสแต็กด้านหลังเมื่อคุณnavigate()
ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack()
หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions
ที่มีอยู่และการผสานรวมกับองค์ประกอบ <action>
ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและการกู้คืนสแต็กด้านหลัง
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI
ของ onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
และ NavigationView.setupWithNavController()
บันทึกและคืนค่าสถานะของปลายทางที่ป๊อปโดยอัตโนมัติแล้ว ซึ่งช่วยให้สามารถรองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางด้วย Fragments นี่เป็นวิธีที่แนะนำในการผสานรวมกับสแต็กแบ็กหลายสแต็ก
API ที่สำคัญสำหรับการบันทึกและคืนค่าสถานะจะแสดงผ่านหลายแพลตฟอร์ม ดังนี้
ใน XML การนำทาง ตอนนี้องค์ประกอบ
<action>
สามารถใช้แอตทริบิวต์บูลีนของapp:popUpToSaveState
และapp:restoreState
เพื่อบันทึกสถานะของปลายทางที่เรียกผ่านapp:popUpTo
และคืนค่าสถานะที่เชื่อมโยงกับปลายทางที่ส่งผ่านเป็นapp:destination
ดังนี้<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
ใน
navOptions
Kotlin DSL คุณจะเพิ่มพร็อพเพอร์ตี้บูลีนrestoreState
และพร็อพเพอร์ตี้บูลีนsaveState
ในเครื่องมือสร้างpopUpTo
ได้ โดยทำดังนี้// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
ในการสร้างออบเจ็กต์
NavOptions
ด้วยตนเองผ่านNavOptions.Builder
คุณสามารถใช้setRestoreState()
และโอเวอร์โหลดใหม่ไปยังsetPopUpTo()
ที่จะรับพารามิเตอร์saveState
เพิ่มเติมNavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
ขณะนี้การเรียกแบบเป็นโปรแกรมไปยัง
popBackStack()
สามารถใส่พารามิเตอร์saveState
เพิ่มเติมได้คุณใช้เมธอด
clearBackStack()
เพื่อล้างสถานะที่บันทึกไว้ด้วยpopBackStack()
หรือpopUpToSaveState
ได้
ในทุกกรณี NavController
จะบันทึกและคืนค่าสถานะของ NavBackStackEntry
แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel
ที่กำหนดขอบเขตปลายทางของการนำทาง API ของ Navigator
ได้รับการอัปเดตเพื่อให้ Navigator
แต่ละรายการรองรับการบันทึกและคืนค่าสถานะของตนเองได้
การเปลี่ยนแปลงลักษณะการทำงาน
NavDeepLinkBuilder
เพิ่มแล้วPendingIntent.FLAG_IMMUTABLE
ไปยังPendingIntent
ส่งคืนโดยcreatePendingIntent()
เพื่อให้แน่ใจว่า API นี้ทำงานได้ตามที่คาดไว้เมื่อกำหนดเป้าหมายเป็น Android 12- ขณะนี้การนำทางขึ้นอยู่กับ
วงจร
2.3.1
และตอนนี้ทำเครื่องหมายsetGraph()
,popBackStack()
,navigateUp()
และnavigate()
ที่อัปเดตNavBackStackEntry
Lifecycle
เป็น@MainThread
กำลังปรับการนำทางให้อยู่ในแนวเดียวกับเทรดหลัก มีการบังคับใช้ในวงจร2.3.0
- ตอนนี้ Deep Link ยืนยันว่ามีอาร์กิวเมนต์ที่จำเป็นทั้งหมด (ที่ไม่มีค่าเริ่มต้น) อยู่ใน
Uri
- ตอนนี้อาร์กิวเมนต์ที่แยกวิเคราะห์แล้ว
NavDeepLink
ตัวจะพิจารณาเครื่องหมายสี่เหลี่ยมในลักษณะเดียวกับเครื่องหมายคำถามเป็นตัวคั่นระหว่างกลุ่มเส้นทาง ซึ่งป้องกันไม่ให้อาร์กิวเมนต์ครอบคลุมเครื่องหมายสี่เหลี่ยม - เมื่อสร้างการทำงาน ตอนนี้โค้ด Kotlin ที่สร้างจาก Safe Args จะใส่อาร์กิวเมนต์โดยไม่มี ค่าเริ่มต้นก่อนหน้ารายการที่มีค่าเริ่มต้นเป็นพารามิเตอร์
- ตอนนี้ Safe Args จะวางพารามิเตอร์เมื่อสร้างอาร์กิวเมนต์ ที่ไม่มีค่าเริ่มต้นอยู่ก่อนรายการที่มีค่าเริ่มต้น
- ตอนนี้ Safe-Args ต้องใช้ปลั๊กอิน Android Gradle 4.2.0 แล้ว ซึ่งหมายความว่าคุณไม่ควรได้รับคำเตือน "
applicationIdTextResource
" อีกต่อไป
ปัญหาที่ทราบ
- แก้ไขในการนำทาง
2.5.0-alpha01
: การเข้าถึงViewModel
ที่สร้างแล้ว ผ่านby navGraphViewModels()
จากonCreate()
ของ Fragment จะล้มเหลวโดยมีIllegalStateException
(b/213504272) - แก้ไขในการนำทาง
2.5.0-alpha01
: Safe Args 2.4.0 ใช้ร่วมกันไม่ได้ ด้วยปลั๊กอิน Android Gradle 7.1.0 ขึ้นไป (b/213086135) - การทำ Deep Link กับกราฟการนำทางที่ซ้อนกันหลายกราฟไม่ได้สร้าง Backstack (b/214383060)
เวอร์ชัน 2.4.0-rc01
15 ธันวาคม 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-rc01
แล้ว เวอร์ชัน 2.4.0-rc01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้อาร์กิวเมนต์ที่แยกวิเคราะห์แล้ว
NavDeepLink
รายการจะพิจารณาเครื่องหมายสี่เหลี่ยมในลักษณะเดียวกับเครื่องหมายคําถามเป็นตัวคั่นระหว่างอาร์กิวเมนต์ (I21309, b/180042703)
แก้ไขข้อบกพร่อง
- Deep Link จะไม่ละเว้นอาร์กิวเมนต์ที่มีค่าเหมือนกับชื่อของตัวยึดตำแหน่งอีกต่อไป (If8017, b/207389470)
NavController
จะไม่ขัดข้องอีกต่อไปเมื่อป้อนปลายทางที่ซ้อนกันโดยใช้การเปลี่ยนหลังจากที่กู้คืนNavController
แล้ว (I0f7c9, b/205021623)- ข้อความแสดงข้อผิดพลาดเมื่อใช้
startDestination
ที่ไม่ถูกต้องจะใช้ค่าเริ่มต้นเป็นเส้นทางของปลายทางเริ่มต้น หากมี (I86b9d, b/208041894)
แก้ไขข้อบกพร่องในการเขียนเพื่อไปยังส่วนต่างๆ
- แก้ไขข้อขัดข้องที่อาจเกิดขึ้นซึ่งเกิดจากการสลับใช้ปลายทางเริ่มต้นและปลายทางอื่นอย่างรวดเร็วโดยใช้รายการในเมนูการนำทางด้านซ้าย (Ic8976, b/208887901)
- ขณะนี้ปลายทางของกล่องโต้ตอบได้รับการกู้คืนอย่างเหมาะสมที่ด้านบนของหน้าจอหลังจากการเปลี่ยนแปลงการกำหนดค่าหรือกระบวนการไม่ทำงาน (I4c0dc, b/207386169)
- แก้ไขปัญหาในกรณีที่การพยายามเรียก
ViewModel
จากNavBackStackEntry
ของกล่องโต้ตอบไม่สำเร็จเมื่อมีการปิดกล่องโต้ตอบ (I6b96d, b/206465487) - แก้ไขปัญหาเมื่อใช้ปลายทาง
activity
กับNavHost
ของการเขียนการนำทาง ซึ่งจะส่งผลให้มีการจัดองค์ประกอบใหม่อย่างไม่มีที่สิ้นสุด (I8f64C) - แก้ไขการรั่วไหลของการเขียนการนำทางในตำแหน่งที่ใช้การอ้างอิงกิจกรรมเดิมหลังจากที่เปลี่ยนการกำหนดค่าหรือกระบวนการไม่ทำงาน (I4efcb, b/204905432)
แก้ไขข้อบกพร่องของ Args ที่ปลอดภัย
SafeArgs
ไม่ขัดข้องอีกต่อไปเมื่อพยายามกู้คืนอาร์เรย์แบบพาร์เซลที่กำหนดเองหลังจากกระบวนการเสียชีวิต (I618e8, b/207315994)- แก้ไขข้อบกพร่องในอาร์กิวเมนต์ที่ปลอดภัยที่ไม่อนุญาตให้อาร์เรย์บูลีนมีค่า
null
(I8c396, b/174787525)
เวอร์ชัน 2.4.0-beta02
3 พฤศจิกายน 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-beta02
แล้ว เวอร์ชัน 2.4.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- การจัดการทั้งโดยชัดแจ้งและโดยนัย
Deep Link จะเพิ่มค่าสถานะ
saveState
โดยอัตโนมัติ เมื่อไปยังกราฟอื่น ให้แน่ใจว่าโค้ด เช่นNavigationUI.setupWithNavController
และ โค้ดที่ใช้สแต็กแบ็กหลายสแต็กทำงานตามที่คาดไว้ (Ic8807)
การเปลี่ยนแปลงลักษณะการทำงาน
- ขณะนี้มีการรวบรวมรูปแบบ Deep Link แบบ Lazy Loading ใน NavDeepLink แทนในช่วงภาวะเงินเฟ้อ ซึ่งน่าจะปรับปรุงเวลาเงินเฟ้อของกราฟการนำทางที่มี Deep Link (b8d257, b/184149935)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ NavBackStackEntries ถูกพุชไปที่
Lifecycle.State.CREATED
หลังจากย้ายไปยังLifecycle.State.STARTED
เมื่อ ระบบจะเพิ่มNavHost
ลงในsetContent()
ของกิจกรรมโดยตรง (Ia5ac1, b/203536683) - แก้ไขเงื่อนไขการแข่งขัน
เรียกจุดหมาย
DialogFragment
ออกจาก Back Stack ก่อนที่กล่องโต้ตอบจะปรากฏขึ้นจริง จะไม่ปิดกล่องโต้ตอบจริงๆ ซึ่งส่งผลให้ การขัดข้องเมื่อกล่องโต้ตอบข้อผิดพลาดด้วยตนเอง ปิดโดยผู้ใช้ (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 ด้วย Fragments ได้ดียิ่งขึ้น (I901e3, b/201446416)
การเปลี่ยนแปลง API
- ขณะนี้
visibleEntries
API อยู่ในขั้นทดลอง (I93f6f)
แก้ไขข้อบกพร่อง
- ViewModels จะไม่ถูกทำลายเมื่อการเปลี่ยนเกิดขึ้น ถูกขัดจังหวะด้วยการกลับไปกลับมาระหว่างหน้าจอเดียวกัน (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
รายการผ่าน StateFlowvisibleEntries
(Ia964e) - ตอนนี้
rememberNavController()
จะใช้ตัวเลือกที่ไม่บังคับ ชุดของอินสแตนซ์Navigator
รายการที่จะเพิ่มลงใน ส่งคืนNavController
เพื่อรองรับตัวเลือกได้ดียิ่งขึ้น Navigator เช่น ผู้ใช้จาก เนื้อหาการนำทางของ Accompanist (I4619e)
แก้ไขข้อบกพร่อง
- การนำทางแบบไดนามิกจะไม่ขัดข้องอีกต่อไปเมื่อกิจกรรม สร้างใหม่ (Ifa6a3, b/197942869)
- แก้ไขปัญหาเกี่ยวกับปุ่มย้อนกลับของระบบที่เกิดขึ้นเฉพาะหลังจากที่เปิดกลับไปยังปลายทาง Composable ที่มี
NavHost
(3ed148, b/195668143) - ตอนนี้ SafeArgs สร้างอาร์กิวเมนต์สำหรับ
fromBundle()
และfromSavedStateHandle()
ในลำดับพารามิเตอร์ที่เหมาะสม (I824a8, b/200059831)
เวอร์ชัน 2.4.0-alpha09
15 กันยายน 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-alpha09
แล้ว เวอร์ชัน 2.4.0-alpha09 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้คุณใช้เมธอด
clearBackStack()
ได้แล้ว เพื่อล้างสถานะที่บันทึกไว้กับpopBackStack()
หรือpopUpToSaveState
(I80a0F) - ตอนนี้คุณสามารถส่งรายการอาร์กิวเมนต์และ/หรือลิงก์ในรายละเอียดไปยัง เครื่องมือสร้างกราฟการนำทางที่ซ้อนกันและจะเพิ่มไว้โดยอัตโนมัติ กับกราฟผลลัพธ์ (I8a470, b/182545357)
การเปลี่ยนแปลง API
- ฟังก์ชัน Kotlin DSL ของ
navArgument
เป็นส่วนหนึ่งของnavigation-common
จากเดิมnavigation-compose
ซึ่งต้องการ กำลังอัปเดตการนำเข้าเพื่อใช้ฟังก์ชันนี้ต่อไป (I1d095)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ Safe Args จะวางพารามิเตอร์เมื่อสร้างอาร์กิวเมนต์ ที่ไม่มีค่าเริ่มต้นอยู่ก่อนรายการที่มีค่าเริ่มต้น (I89709, b/198493585)
แก้ไขข้อบกพร่อง
- เมื่อใช้การเขียนการนำทาง NavGraphs จะ
DESTROYED
เมื่อบุตรหลานทุกคนอายุครบDESTROYED
ปี (I86552, b/198741720) - อาร์กิวเมนต์
NavDeepLink
ที่เป็นค่าว่างไม่ได้แล้ว ต้องระบุค่าเริ่มต้น (Ia14ef, b/198689811) - การเรียก
setGraph()
ด้วยกราฟใหม่ จะล้างสแต็กแบ็กที่บันทึกไว้ทั้งหมดด้วย กับลักษณะการทำงานก่อนหน้าในการเปิดแบ็กสแต็ก (I97f96) - แก้ไขปัญหาเกี่ยวกับ
อินสแตนซ์
OnDestinationChangedListener
รายการและcurrentBackStackEntryFlow
ไม่ได้รับการแจ้งเตือนเมื่อ ด้วยlaunchSingleTop
(Iaaebc)
การอัปเดตการขึ้นต่อกัน
- การเขียนในการนำทางจะขึ้นอยู่กับ การเขียนเกี่ยวกับกิจกรรม 1.3.1 (I05829)
- การเขียนในการนำทางจะขึ้นอยู่กับ
Life Cycle View Model 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 ที่กำหนดเอง จะมีการรองรับประเภทที่กำหนดเองเฉพาะเมื่อสร้าง กราฟการนำทางแบบเป็นโปรแกรม เช่น ผ่านทาง กราฟการนำทาง 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- การเขียนในการไปยังส่วนต่างๆ จะบันทึกสถานะอย่างถูกต้องหลังจาก และเมื่อเปลี่ยนกราฟขณะใช้ตัวแปร Back Stack (If5a3d, b/195141957)
- การเลือกแท็บเดิมอีกครั้งเมื่อใช้การเขียนการนำทางด้วย สแต็กด้านหลังจำนวนมากจะไม่ทำให้หน้าจอว่างเปล่าอีกต่อไป (I860dc, b/194925622)
- ขณะนี้
NavHost
สังเกตเห็นการเปลี่ยนแปลงในLifecycle.State
ของNavBackStackEntry
ซึ่งหมายความว่าการใช้NavHost
ในแฟรกเมนต์ตอนนี้จะ ได้รับการจัดองค์ประกอบใหม่อย่างเหมาะสมเมื่อวงจรเปลี่ยนไป แทนที่จะทำให้หน้าจอว่างเปล่า (I4eb85, b/195864489) - แก้ไขปัญหาที่การปิด
DialogFragment
จะไม่อัปเดต สถานะNavController
หลังจากสร้างกิจกรรมของคุณอีกครั้ง (เช่น หลังจากการเปลี่ยนแปลงการกำหนดค่า) (Icd72b) - แก้ไขปัญหาเมื่อดึง ปลายทางของ NavController จะไม่อัปเดต การจัดการปุ่มย้อนกลับของระบบ ซึ่งอาจเป็นสาเหตุให้ NavController เพื่อสกัดกั้นปุ่มย้อนกลับ แม้จะไม่มีแบ็กสแต็กให้โดดเด่น (If3b34)
- ตอนนี้การกำหนดเป้าหมายที่ปลอดภัยจะสร้าง
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
ของการเขียนในการไปยังส่วนต่างๆ ตั้งค่าฟังก์ชัน โดยเป็นส่วนหนึ่งของการเรียบเรียงแรก (Ieb7be)
แก้ไขข้อบกพร่อง
- การป้อนปลายทางสุดท้ายของกราฟการนำทางจะไม่ทำให้
ClassCastException
แสดงอีกต่อไป (If0543, b/172112072, b/194301889) - แก้ไข
NullPointerException
ซึ่งเกิดขึ้นเมื่อเพิ่ม Deep Link โดยไม่มีUri
และนำทางผ่านเส้นทางหรือ Deep Link (938a0c, b/193805425) - แก้ไขปัญหาในการช่วยเขียนการนำทางในตำแหน่ง
ที่ทํา Deep Link แล้ว
NavBackStackEntry
จะไม่เข้าถึง รัฐRESUMED
(I192c5) - แก้ไขปัญหาที่การเปิดปลายทางของกล่องโต้ตอบไม่อัปเดตการจัดการปุ่มย้อนกลับของระบบของ NavController ซึ่งอาจส่งผลให้ NavController ดักจับปุ่มย้อนกลับ แม้ว่าจะไม่มีสแต็ก Back Stack ปรากฏขึ้น (aosp/1782668)
เวอร์ชัน 2.4.0-alpha05
21 กรกฎาคม 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-alpha05
แล้ว เวอร์ชัน 2.4.0-alpha05 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้
NavHost
ของการเขียนในการไปยังส่วนต่างๆ จะใช้การตรวจสอบแบบครอสเฟดเสมอขณะนำทาง ผ่านปลายทาง (I07049, b/172112072) - ตอนนี้คุณสามารถเปลี่ยนแปลงกราฟของ NavHost ได้แล้ว กราฟ
ที่มี startDestination และปลายทางเดียวกันในกราฟจะเป็น
ถือว่าเท่ากันและจะไม่ล้างแบ็กสแต็ก
NavController
(I0b8db, b/175392262)
แก้ไขข้อบกพร่อง
- แก้ไข
NoSuchElementException
เมื่อ กำลังโทรหาpopBackStack()
จากภายในLifecycleObserver
แนบกับNavBackStackEntry
ที่เกิดจาก อัปเดตสถานะของ NavController อีกครั้ง (I64621) - ขณะนี้
AbstractListDetailFragment
อนุญาตSlidingPaneLayout
จะถูกถอดออกทั้งหมด APK ของคุณเมื่อไม่ได้ใช้AbstractListDetailFragment
(I611ad) - ตอนนี้
NavGraph
และNavDestination
จะลบล้างเมธอด "เท่ากับ" เพื่อ ระบบจะถือว่าออบเจ็กต์ 2 รายการที่มีค่าเดียวกัน (I166eb, b/175392262)
เวอร์ชัน 2.4.0-alpha04
1 กรกฎาคม 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-alpha04
แล้ว เวอร์ชัน 2.4.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้อาร์ติแฟกต์
navigation-fragment
มีการใช้งาน เลย์เอาต์ 2 แผงที่สร้างไว้ล่วงหน้าผ่านAbstractListDetailFragment
ใหม่แล้ว ส่วนย่อยนี้ใช้SlidingPaneLayout
เพื่อจัดการแผงรายการ (ที่คลาสย่อยของคุณมี) และแผงรายละเอียดซึ่งใช้NavHostFragment
เป็นการใช้งาน ดังที่แสดงในตัวอย่างการใช้งานของเรา (Iac4be, b/191276636) - ขณะนี้อาร์ติแฟกต์
NavHost
จากnavigation-compose
รองรับปลายทางdialog
นอกเหนือจากปลายทางcomposable
แล้ว ปลายทางกล่องโต้ตอบเหล่านี้แต่ละรายการจะแสดงภายในDialog
ที่ประกอบกันได้ โดยลอยอยู่เหนือปลายทางcomposable
ปัจจุบัน (I011d0)
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
การเปลี่ยนแปลง API
- ฟังก์ชัน
add
ในNavigatorState
ได้เปลี่ยนชื่อเป็นpush
การเรียกใช้add()
ในปัจจุบันทั้งหมดจะต้องเปลี่ยนเป็น push() (Ie89fc, b/172112072) - ตอนนี้อินสแตนซ์
Navigator
ที่กำหนดเองสามารถใช้ APIpushWithTransaction
และpopWithTransition
ในNavigatorState
เพื่อพุชหรือสร้างปลายทางแบบไม่พร้อมกันได้แล้ว โปรดทราบว่าตัวนำทางที่รวมอยู่ยังไม่ได้ใช้ API นี้ (Ic4d7c, b/172112072)
การเปลี่ยนแปลงลักษณะการทำงาน
NavDeepLinkBuilder
เพิ่มแล้วPendingIntent.FLAG_IMMUTABLE
ไปยังPendingIntent
ส่งคืนโดยcreatePendingIntent()
เพื่อให้แน่ใจว่า API นี้ทำงานได้ตามที่คาดไว้เมื่อกำหนดเป้าหมายเป็น Android 12 (If8c52)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ
<include-dynamic>
ซึ่ง อาร์กิวเมนต์ที่ส่งไปยังกราฟจะไม่ถูกส่งผ่านอย่างถูกต้อง ลงในกราฟที่รวมแบบไดนามิก (I3e115) - แก้ไข
NullPointerException
เมื่อนำทางไปยังจุดหมาย โดยใช้อาร์กิวเมนต์string[]
ที่มีค่าเริ่มต้นเป็น@null
(I1fbe8) - เพิ่มกฎ ProGuard สำหรับ
@Navigator.Name
เพื่อแก้ไขปัญหา เมื่อใช้ R8 3.1 โหมดเต็ม (I2add9, b/191654433) - SafeArgs จะไม่ล้มเหลวในการสร้างแอปด้วย
Kotlin
เวอร์ชันก่อน1.5.0
(Icd1ff, b/190739257)
เวอร์ชัน 2.4.0-alpha03
16 มิถุนายน 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-alpha03
แล้ว เวอร์ชัน 2.4.0-alpha03 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ต้องเรียก
navigate()
2 ครั้งเพื่อไปยังกราฟแบบไดนามิกที่รวมอยู่ (I7785c, b/188859835) - แก้ไขการถดถอยที่เกิดขึ้นใน
นำทาง
2.4.0-alpha01
ไปที่setupActionBarWithNavController()
จะไม่ เมื่อคุณอยู่บน ปลายทางระดับบนสุด (I5d443, b/189868637) - แก้ไข
IllegalStateException
เมื่อ กำลังโทรหาpopBackStack()
หลังจากเรียกก่อนหน้านี้ กราฟรากของ NavController (I2a330, b/190265699) - ตอนนี้กฎ ProGuard สำหรับ
by navArgs()
ถูกต้องแล้ว มีผลเมื่อใช้navigation-common
หรืออาร์ติแฟกต์ ที่ขึ้นอยู่กับความต้องการนั้นๆ (I68800, b/190082521) OnDestinationChangedListener
ที่โทรหาnavigate()
ในครั้งแรกที่มีการติดต่อกลับในตอนนี้ ได้รับการติดต่อกลับครั้งที่ 2 พร้อมกับปลายทางอย่างถูกต้อง ที่มีการนำทางไป (Ie5f9e, b/190228815)- Safe Args ไม่ขัดข้องอีกต่อไปเมื่อใช้กับฟีเจอร์แบบไดนามิก และ AGP 7.0 ขึ้นไป (I69518, b/189966576)
ปัญหาที่ทราบ
- Safe Args จะล้มเหลวโดยมีข้อผิดพลาด
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
เมื่อใช้ Gradle6.7.0
เนื่องจากขึ้นอยู่กับ Kotlin เวอร์ชันเก่า คุณหลีกเลี่ยงปัญหานี้ได้ด้วยการอัปเดตไปใช้ Gradle 7.0 (b/190739257)
เวอร์ชัน 2.4.0-alpha02
2 มิถุนายน 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-alpha02
แล้ว เวอร์ชัน 2.4.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ขณะนี้ระบบรองรับเส้นทางสำหรับปลายทางกิจกรรม ส่วนย่อย และกล่องโต้ตอบ รวมถึงปลายทาง Dynamicnavigation Kotlin DSL แล้ว (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
ได้เพิ่ม API ทดลองชั่วคราวเพื่ออนุญาตให้เลือกไม่ใช้การบันทึกสถานะของคุณ แม้ว่าการบันทึกสถานะจะเป็นลักษณะการทำงานที่ถูกต้องเสมอ แต่ก็ยังมีการใช้ไลบรารีที่เลิกใช้งานแล้ว (เช่น ส่วนย่อยที่เก็บไว้) ที่ไม่รองรับเมื่อบันทึกสถานะ ด้วยเหตุนี้จึงเปิดโอกาสให้แอปต่างๆ ค่อยๆ แปลงจาก API ที่ไม่รองรับได้ (Idf93c)ขณะนี้การนำทางมี API
findDestination()
และgetHierarchy()
ซึ่งสามารถใช้เพื่อช่วยติดตั้งใช้งาน 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
จะซิงค์กับ สถานะของผู้นำทาง (I2ead9) การไปยังส่วนต่างๆ จะไม่แสดง
ConcurrentModificationException
เมื่อ โดยใช้การควบคุมรายการOnDestinationChangedListeners
จากด้วย CallbackonDestinationChanged
(Ib1707, b/188860458)Safe Args ไม่ขัดข้องอีกต่อไปเมื่อพยายามสร้าง ใน Kotlin (รหัส 2416, b/188564435)
ตอนนี้เมธอด setId ใน NavDestination มีการใส่คำอธิบายประกอบอย่างถูกต้อง กับ
@IdRes
ดังนั้นจึงยอมรับเฉพาะรหัสทรัพยากรเท่านั้น (I69b80)ตอนนี้พารามิเตอร์ int ของ
findNode
คือresId
แทนที่จะเป็นresid
(I7711D)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ Safe-Args ต้องใช้ปลั๊กอิน Android Gradle 4.2.0 แล้ว ซึ่งหมายความว่าคุณไม่ควรได้รับคำเตือน "
applicationIdTextResource
" อีกต่อไป (I6d67b, b/172824579)
เวอร์ชัน 2.4.0-alpha01
18 พฤษภาคม 2021
ปล่อย androidx.navigation:navigation-*:2.4.0-alpha01
แล้ว เวอร์ชัน 2.4.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เมธอด
currentBackStackEntryAsFlow()
ในNavController
จะให้Flow
ที่ปล่อยออกมาเมื่อใดก็ตามที่NavBackStackEntry
ปัจจุบันมีการเปลี่ยนแปลง ขั้นตอนนี้สามารถใช้เป็นทางเลือกในการจัดการOnDestinationChangedListener
ด้วยตนเองได้ (I19c4a, #89, b/163947280)
แบ็กสแต็กหลายรายการ
NavController มีหน้าที่จัดการปลายทางสแต็กด้านหลัง โดยเพิ่มปลายทางไปยังสแต็กด้านหลังเมื่อคุณnavigate()
ไปยังปลายทางเหล่านั้น และนำปลายทางออกเมื่อคุณเรียกใช้ popBackStack()
หรือทริกเกอร์ปุ่มย้อนกลับของระบบ เราได้ขยายคลาส NavOptions
ที่มีอยู่และการผสานรวมเข้ากับรายการ <action>
ใน XML ของกราฟการนำทางเพื่อรองรับการบันทึกและการกู้คืนสแต็กด้านหลัง (b/80029773)
การเปลี่ยนแปลงนี้ทำให้เมธอด NavigationUI
ของ onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
และ NavigationView.setupWithNavController()
บันทึกและคืนค่าสถานะของปลายทางที่ป๊อปโดยอัตโนมัติแล้ว ซึ่งช่วยให้สามารถรองรับ Back Stack หลายรายการได้โดยไม่ต้องเปลี่ยนแปลงโค้ด เมื่อใช้การนำทางด้วย Fragments นี่เป็นวิธีที่แนะนำในการผสานรวมกับสแต็กแบ็กหลายสแต็ก (Ie07ca)
API ที่สำคัญสำหรับการบันทึกและคืนค่าสถานะจะแสดงผ่านหลายแพลตฟอร์ม ดังนี้
ใน XML การนำทาง ตอนนี้องค์ประกอบ
<action>
สามารถใช้แอตทริบิวต์บูลีนของapp:popUpToSaveState
และapp:restoreState
เพื่อบันทึกสถานะของปลายทางที่เรียกผ่านapp:popUpTo
และคืนค่าสถานะที่เชื่อมโยงกับปลายทางที่ส่งผ่านเป็นapp:destination
ดังนี้<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
ใน
navOptions
Kotlin DSL คุณจะเพิ่มพร็อพเพอร์ตี้บูลีนrestoreState
และพร็อพเพอร์ตี้บูลีนsaveState
ในเครื่องมือสร้างpopUpTo
ได้ โดยทำดังนี้// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
ในการสร้างออบเจ็กต์
NavOptions
ด้วยตนเองผ่านNavOptions.Builder
คุณสามารถใช้setRestoreState()
และโอเวอร์โหลดใหม่ไปยังsetPopUpTo()
ที่จะรับพารามิเตอร์saveState
เพิ่มเติมNavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
ขณะนี้การเรียกแบบเป็นโปรแกรมไปยัง
popBackStack()
สามารถใส่พารามิเตอร์saveState
เพิ่มเติมได้
ในทุกกรณี NavController
จะบันทึกและคืนค่าสถานะของ NavBackStackEntry
แต่ละรายการ รวมถึงอินสแตนซ์ ViewModel
ที่กำหนดขอบเขตปลายทางของการนำทาง API ของ Navigator
ได้รับการอัปเดตเพื่อให้ Navigator
แต่ละรายการรองรับการบันทึกและคืนค่าสถานะของตนเองได้
ทั้ง ComposeNavigator
ที่ใช้สำหรับ composable
ปลายทางในการเขียนการนำทางและ FragmentNavigator
และ DynamicFragmentNavigator
ที่ใช้สำหรับปลายทาง <fragment>
ในการนำทางด้วย Fragments ได้รับการอัปเดตให้ใช้ Navigator API ใหม่ และรองรับการบันทึกและการคืนค่าสถานะ
เส้นทางการนำทาง
เส้นทางคือ String
ที่ระบุปลายทางแบบไม่ซ้ำ แม้ว่าก่อนหน้านี้จะใช้เฉพาะในการเขียนการนำทาง แต่ปัจจุบันแนวคิดนี้ได้กลายมาเป็นส่วนหนึ่งของ API การนำทางหลัก วิธีนี้เป็นทางเลือกหนึ่งนอกเหนือจากการใช้รหัสจำนวนเต็มเมื่อสร้างกราฟผ่าน Navigation Kotlin DSL (b/172823546)
ตอนนี้ API ทั้งหมดที่เคยใช้เพียงรหัสเดียวมีการโอเวอร์โหลดซึ่งใช้เส้นทาง String
ซึ่งรวมถึง navigate()
, popBackStack()
, popUpTo()
และ getBackStackEntry()
ปัญหานี้เกี่ยวข้องกับ API บางอย่าง
- พร็อพเพอร์ตี้ Kotlin
popUpTo
ใน Kotlin DSL เลิกใช้งานแล้วเพื่อpopUpToId
(I59c73, b/172823546) - มีการเลิกใช้งาน API ของ
getStartDestination()
แล้วเพื่อประโยชน์ ของgetStartDestinationId()
(I0887f, b/172823546)
สำหรับนักพัฒนาซอฟต์แวร์ที่อัปเกรดจากเครื่องมือช่วยเขียนในการไปยังส่วนต่างๆ เวอร์ชันก่อนหน้าเป็น "การเขียนในการนำทาง" 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 วิธีนี้ช่วยเพิ่มความสามารถในการเว้นว่างของชั้นเรียนที่ใช้คำทั่วไป (เช่น คลาสย่อย
NavType
) ระบบได้ย้ายฟังก์ชันของส่วนขยาย Kotlin ทั้งหมดที่เคยเป็นส่วนหนึ่งของอาร์ติแฟกต์-ktx
ไปยังอาร์ติแฟกต์หลักที่เกี่ยวข้องแล้ว อาร์ติแฟกต์-ktx
จะยังคงเผยแพร่ต่อไป แต่จะว่างเปล่าทั้งหมด (b/184292145) NavDeepLinkBuilder
รองรับการเพิ่มแล้ว ปลายทางที่แตกต่างกันหลายแห่งไปยัง Back Stack (I3ee0d, b/147913689)- เพิ่มฟังก์ชันจากโรงงานสำหรับ
DynamicNavHostFragment
(Icd515, b/175222619) - รหัสที่ไม่ซ้ำกันของ
NavBackStackEntry
จะปรากฏเป็นส่วนหนึ่งของ API สาธารณะ (Ie033a) - ฟิลด์
name
และargument
และฟังก์ชันการยกเลิกโครงสร้างของNamedNavArgument
แสดงเป็นแบบสาธารณะแล้ว (#174, b/181320559) - เปิดตัวส่วนขยาย
NavBackStackEntry#provideToCompositionLocals
ใหม่ที่จะให้NavBackStackEntry
แก่ท้องถิ่นในการเรียบเรียงที่เกี่ยวข้อง (#175, b/187229439)
อาร์กิวเมนต์ที่ปลอดภัย
ตอนนี้ 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 Link ของwww.example.com/{color}
ได้ แม้ว่า enum จะมีค่าเป็นRED
ก็ตาม (#152, b/135857840)
ความเข้ากันได้กับการเขียน
androidx.navigation:navigation-compose:2.4.0-alpha01
ใช้งานร่วมกับ Compose เวอร์ชัน1.0.0-beta07
ขึ้นไปเท่านั้น
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายตรงกันทั้งหมด (#153, b/184072811)
NavHostFragment
รองรับแบบกำหนดเองแล้ว ผู้นำทางที่ใช้@Navigator.Name("dialog")
เดียวกัน เป็นค่าเริ่มต้นDialogFragmentNavigator
(Ib1c2c, b/175979140)- ปรับปรุงลักษณะการทำงานของ
NavigatorProvider#addNavigator
เพื่อให้มั่นใจว่าการเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันจะไม่ทำให้เกิดปัญหา (#176, b/187443146)
การสนับสนุนภายนอก
- ขอขอบคุณ simonschiller ที่ช่วยสนับสนุนสำหรับ Safe Args ที่สร้างเมธอด
fromSavedStateHandle()
สำหรับNavArgs
แต่ละคลาส (#122, b/136967621) - ขอขอบคุณ Bradleycorn ที่แยกวิเคราะห์อาร์กิวเมนต์ Enum จาก Deep Link แบบไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#152, b/135857840)
- ขอบคุณ osipxd ที่ช่วยแก้ไขปัญหาที่ตัวยึดตำแหน่งอาร์กิวเมนต์ต่อท้ายจะมีความสำคัญเหนือกว่า Deep Link ที่มีคำต่อท้ายตรงกันทั้งหมด (#153, b/184072811)
- ขอขอบคุณ tatocaster ที่อัปเดต Safe Args เพื่อใช้ KotlinPoet
1.8.0
(#172, b/183990444) - ขอบคุณ jossiwolf ที่ทำให้ฟิลด์
name
และargument
และฟังก์ชันการลดโครงสร้างของNamedNavArgument
เป็นแบบสาธารณะ (#174, b/181320559) - ขอขอบคุณ jossiwolf สำหรับการแนะนำส่วนขยาย
NavBackStackEntry#provideToCompositionLocals
ใหม่ที่ให้ข้อมูลNavBackStackEntry
แก่ท้องถิ่นในการเรียบเรียงที่เกี่ยวข้อง (#175, b/187229439) - ขอขอบคุณ jossiwolf ที่ช่วยปรับปรุงลักษณะการทํางานของ
NavigatorProvider#addNavigator
เพื่อให้มั่นใจว่าการเรียกใช้ซ้ำๆ ด้วยอินสแตนซ์เดียวกันจะไม่ทำให้เกิดปัญหา (#176, b/187443146)
Navigation Compose เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0-alpha10
7 เมษายน 2021
ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha10
แล้ว เวอร์ชัน 1.0.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ขณะนี้
NavHost
ยอมรับModifier
ซึ่งส่งต่อไปยัง คอนเทนเนอร์ที่ประกอบกันได้ซึ่งห่อหุ้ม Composable ปลายทาง (I85aca, b/175125483)
แก้ไขข้อบกพร่อง
NavHost
ใช้งานได้แล้ว แม้เมื่อไม่พบOnBackPressedDispatcherOwner
ในกรณีเช่นนี้เมื่อแสดงตัวอย่างNavHost
(I7d8b4)- ตอนนี้การเขียนในการไปยังส่วนต่างๆ จะใช้การนำทาง
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
เพื่อให้ระบุได้ดีขึ้น ปัจจุบันมีViewModelStoreOwner
ให้ใช้งานหรือไม่ องค์ประกอบ API ที่ต้องใช้ViewModelStoreOwner
เช่น เป็นviewModel()
และNavHost
ยังคงส่งข้อยกเว้น หากไม่ได้ตั้งค่าViewModelStoreOwner
ไว้ (Idf39a)
แก้ไขข้อบกพร่อง
- การเขียนการนำทางจะขึ้นอยู่กับการนำทาง 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
จะป้อนข้อมูลNavBackStackEntry
ของปลายทางนั้นในLocalSavedStateRegistryOwner
CompositionLocal เพื่อให้ระบบบันทึกและกู้คืนสถานะใดๆ ที่บันทึกไว้ในSavedStateRegistry
โดยตรงและคืนค่าควบคู่ไปกับปลายทาง (I435d7, b/179469431)
เวอร์ชัน 1.0.0-alpha07
10 กุมภาพันธ์ 2021
ปล่อย androidx.navigation:navigation-compose:1.0.0-alpha07
แล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตเหล่านี้
การอัปเดตการขึ้นต่อกัน
- ตอนนี้การเขียนการนำทางขึ้นอยู่กับ 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
- การเขียนการนำทางรองรับ NavOptions สำหรับการใช้ popUpTo แล้ว และlaunchSingleTop (If96c3, b/171468994)
- เพิ่มฟังก์ชันการนำทางที่ใช้เส้นทางแทน รหัสที่ให้คุณสร้างกราฟแบบซ้อนในการเขียนการนำทาง DSL (I1661D)
- startDestination ต้องมาก่อนเส้นทางในรายการ พารามิเตอร์สำหรับ NavHost (Ie620e)
- ตอนนี้คุณสามารถสร้างกราฟโดยใช้เส้นทางเป็นจุดเริ่มต้นได้แล้ว ปลายทางนอก NavHost Composable (Iceb75)
เวอร์ชัน 1.0.0-alpha01
28 ตุลาคม 2020
ปล่อย android.navigation:navigation-compose:1.0.0-alpha01
แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
อาร์ติแฟกต์ navigation-compose
จะมีการผสานรวมระหว่างคอมโพเนนต์การนำทางและ Jetpack Compose โดยใช้ฟังก์ชัน @Composable
เป็นปลายทางในแอปพลิเคชันของคุณ
รุ่นแรกนี้มีฟีเจอร์ต่างๆ ดังต่อไปนี้
- Composable ของ
NavHost
ที่ให้คุณสร้างกราฟการนำทางผ่าน Kotlin DSL - ขอบเขตของวงจร
ViewModel
และสถานะที่จำที่ระดับปลายทาง - การผสานรวมอัตโนมัติกับปุ่มย้อนกลับของระบบ
- รองรับการส่งอาร์กิวเมนต์ การแนบ Deep Link ไปยังปลายทาง และการแสดงผลลัพธ์ไปยังปลายทางก่อนหน้า
- เขียนตัวช่วยที่เจาะจงใน
rememberNavController()
และcurrentBackStackEntryAsState()
เพื่ออนุญาตสถานะการรอปและการเชื่อมต่อNavController
กับ Composable นอก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
ได้รับการเพิ่มลงในผู้มอบหมายงานที่มี ตอนนี้NavBackStackEntry
ในฐานะ LifecycleOwner ทำการสกัดกั้นได้อย่างถูกต้องแล้ว หลังจากวงจรกิจกรรมคือSTOPPED
แล้วกดSTARTED
(Iff94f, b/182284739)- ตอนนี้การแยกวิเคราะห์โดเมนของ Deep Link ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่แล้ว เพื่อให้แน่ใจว่า
www.example.com
ตรงกับทั้งwww.example.com
และwww.Example.com
โปรดทราบว่าชื่อพารามิเตอร์การค้นหายังคงคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (#144, b/153829033) - แก้ไข
NullPointerException
ที่อาจเกิดขึ้นเมื่อปลายทางมีอาร์กิวเมนต์เริ่มต้นที่ไม่เป็นค่าว่างหลายรายการ และคุณไปยังปลายทางนั้นในขณะที่ลบล้างเซ็ตย่อยของอาร์กิวเมนต์เท่านั้น (aosp/1644827)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ปลั๊กอิน 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 ซึ่งรองรับทั้งค่าจำนวนเต็มดิบและค่าฐานสิบหกที่นำหน้าด้วย0x
(#127, b/179166693) - ตอนนี้
android:defaultValue
สำหรับอาร์กิวเมนต์ที่มีapp:argType="float"
รองรับค่าเริ่มต้นที่เป็นเลขจำนวนเต็มแล้ว ซึ่งจะช่วยให้คุณใช้android:defaultValue="0"
แทนการใช้0.0
ได้ (#117, b/173766247)
แก้ไขข้อบกพร่อง
- แก้ไขความคืบหน้าในการติดตั้งที่ค้างเมื่อใช้การรองรับฟีเจอร์แบบไดนามิกของการนำทาง (Ib27a7, b/169636207)
- กำลังโทรหา
setViewModelStore
หรือsetLifecycleOwner
ด้วย ออบเจ็กต์ที่ตั้งค่าไว้แล้วจะเป็น no-op (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
ไปยัง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) - ปัจจุบันการไปยังส่วนต่างๆ SafeArgs ใช้ KotlinPoet เวอร์ชัน 1.7.2 ซึ่งเพิ่มการรองรับโหมด Explicit 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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มทรัพยากรเริ่มต้นของภาพเคลื่อนไหวลงใน UI การนำทางแล้ว และแนะนำให้ใช้แทนทรัพยากรเริ่มต้นของภาพเคลื่อนไหว (b/167430145)
- ตอนนี้ NavOptions จะลบล้างแฮชโค้ดและเท่ากับ Method (b/161586466)
- ขณะนี้การนำทางได้รวมปลายทางปัจจุบันใน "ไม่มีปลายทางที่มีรหัส" IllegalArgumentException ซึ่งจะช่วยปรับปรุงประสบการณ์ในการแก้ไขข้อบกพร่องของนักพัฒนาซอฟต์แวร์ได้ (b/168311416)
แก้ไขข้อบกพร่อง
- Safe Args จะไม่ตัดบรรทัดส่งกลับอีกต่อไป แม้ว่าชื่อคลาสอาร์กิวเมนต์ที่สร้างขึ้นจะยาวกว่า 100 อักขระก็ตาม (b/168584987)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ขณะนี้
navigation-ui
ขึ้นอยู่กับ ลิ้นชักลิ้นชัก 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
ปัญหาที่ทราบ
- การรองรับการดำเนินการ Deep Link และประเภท MIME ยังไม่พร้อมใช้งานใน Manifest Merger องค์ประกอบ
<intent-filter>
ที่สร้างขึ้นจากองค์ประกอบ<nav-graph>
ในไฟล์ Manifest จะไม่รวมประเภท MIME ของคุณในองค์ประกอบ<data>
หรือ<action>
ที่กำหนดเองจนกว่าการดำเนินการดังกล่าวจะเสร็จสมบูรณ์ คุณต้องเพิ่ม<intent-filter>
ที่เหมาะสมลงในไฟล์ Manifest ด้วยตนเอง
เวอร์ชัน 2.3.0-rc01
10 มิถุนายน 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-rc01
แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข
NullPointerException
เมื่อแทนที่อินสแตนซ์ของปลายทางที่ไม่มีอาร์กิวเมนต์ด้วยอินสแตนซ์อื่น ด้วย ด้วยsingleTop
(b/158006669) - ตอนนี้ข้อยกเว้นทั้งหมดของ
destination is unknown
ที่เกิดจากNavController
จะมีข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติมเพื่อช่วยระบุสถานะของNavController
(b/157764916)
เวอร์ชัน 2.3.0-beta01
20 พฤษภาคม 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-beta01
แล้ว เวอร์ชัน 2.3.0-beta01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
Lifecycle
ของNavBackStackEntry
ไม่ได้รับการอัปเดตอย่างถูกต้องหลังยุติกระบวนการ (b/155218371) - ตอนนี้ระบบจะส่งอินสแตนซ์
OnDestinationChangedListener
รายการที่ลงทะเบียนไว้ก่อนการเรียกใช้setGraph()
ไปยังปลายทางที่กู้คืนอย่างเหมาะสมหลังกระบวนการสิ้นสุด (b/155218371) - เมื่อใช้
singleTop
ตอนนี้NavBackStackEntry
จะอัปเดตอาร์กิวเมนต์อย่างถูกต้อง และมีการส่งอาร์กิวเมนต์ที่อัปเดตไปยังอินสแตนซ์OnDestinationChangeListener
ทั้งหมด (b/156545508)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้อาร์ติแฟกต์
NavigationUI
จะขึ้นอยู่กับ CustomView1.1.0-rc01
และ DrawerLayout1.1.0-rc01
(aosp/1309696)
เวอร์ชัน 2.3.0-alpha06
29 เมษายน 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-alpha06
แล้ว (เวอร์ชัน 2.3.0-alpha06 มีคอมมิตเหล่านี้)
ฟีเจอร์ใหม่
- เราได้ขยายการทํา Deep Link เพื่อรองรับ
app:action
และapp:mimeType
นอกเหนือจากapp:uri
ที่มีให้ใช้งานก่อนหน้านี้แล้ว ตอนนี้ NavController รองรับการนำทางโดยการรวมช่องเหล่านี้ผ่านคลาสNavDeepLinkRequest
ใหม่ (b/136573074, b/135334841)
การเปลี่ยนแปลง API
- ขยายการรองรับ Kotlin DSL สำหรับปลายทางการนำทางแบบไดนามิกได้อย่างมาก (b/148969800)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบจะเพิกเฉยต่อ Intent ของ Deep Link เมื่อใช้ปลายทางเริ่มต้นที่ซ้อนกัน (b/154532067)
เวอร์ชัน 2.3.0-alpha05
15 เมษายน 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-alpha05
แล้ว เวอร์ชัน 2.3.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- สำหรับกราฟแบบไดนามิกรวมโดยใช้
<include-dynamic>
คุณไม่จำเป็นต้องระบุapp:graphPackage
อีกต่อไป และจะใช้ตัวระบุเริ่มต้นโดยการเพิ่มคำต่อท้ายmoduleName
ลงในapplicationId
หลังจุด หากคุณต้องการปรับแต่งgraphPackage
ตอนนี้ระบบรองรับตัวยึดตำแหน่ง${applicationId}
แล้ว (b/152696768) - ขณะนี้ Kotlin DSL กราฟการนำทางจะแสดง
defaultArguments
Map
สำหรับการดำเนินการต่างๆ ซึ่งมิเรอร์ความสามารถในการตั้งค่าเริ่มต้นบนองค์ประกอบ<action>
ในไฟล์ XML การนำทาง (b/150345605)
แก้ไขข้อบกพร่อง
- จากการนำทาง 2.2.2: แก้ไข
IllegalStateException
เมื่อทำการทำ Deep Link ไปยังจุดหมายเริ่มต้นของกราฟเมื่อคุณมีอินสแตนซ์NavHostFragment
หลายรายการในกิจกรรม (b/147378752)
การอัปเดตการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับ Fragment
1.2.4
(aosp/1277325) - ตอนนี้การนำทางแบบไดนามิกขึ้นอยู่กับ Play Core
1.7.2
(aosp/1282257)
เวอร์ชัน 2.3.0-alpha04
18 มีนาคม 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-alpha04
แล้ว เวอร์ชัน 2.3.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับกิจกรรมของโมดูลฟีเจอร์และปลายทางของส่วนย่อยใน Navigation Kotlin DSL (b/148969800)
การเปลี่ยนแปลง API
- คลาส
DynamicExtras
ไม่ใช้รูปแบบของเครื่องมือสร้างอีกต่อไปและสามารถสร้างได้โดยตรงแล้วในตอนนี้ (aosp/1253671) - ตอนนี้
DynamicActivityNavigator
จะใช้Context
ในตัวสร้างแทนที่จะเป็นActivity
(aosp/1250252)
แก้ไขข้อบกพร่อง
NavigationUI
ไม่ละเว้นป้ายกำกับว่างเปล่าอีกต่อไป (เช่น ปลายทางที่มีandroid:label=””
) และจะตั้งค่าชื่อให้กับสตริงว่างได้อย่างถูกต้อง (b/148679860)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้อาร์ติแฟกต์ฟีเจอร์แบบไดนามิกของการนำทางขึ้นอยู่กับ
1.6.5
ของ Play Core (b/149556401)
เวอร์ชัน 2.3.0-alpha03
4 มีนาคม 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-alpha03
แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แทนที่จะพึ่งพาคลาส
DrawerLayout
ที่เป็นรูปธรรม ตอนนี้AppBarConfiguration
ใช้อินเทอร์เฟซOpenable
ที่แนะนําใน CustomView1.1.0-alpha02
(ซึ่งDrawerLayout
มีการใช้งานตั้งแต่วันที่ DrawerLayout1.1.0-alpha04
) คุณสามารถใช้การติดตั้งใช้งานOpenable
ที่กำหนดเองกับNavigationUI
ได้ (b/129030452)
แก้ไขข้อบกพร่อง
- ขณะนี้กฎ ProGuard ของ
navigation-common-ktx
จะเก็บเฉพาะคลาสNavArgs
ที่ใช้เท่านั้น ไม่ใช่อินสแตนซ์NavArgs
ทั้งหมด (b/150213558)
การเปลี่ยนแปลงการขึ้นต่อกัน
- การนำทางได้เปลี่ยนกลับการขึ้นต่อกันกับ
1.2.0
หลัก และตอนนี้ก็ขึ้นอยู่กับ1.1.0
หลัก เพื่อหลีกเลี่ยงการบังคับให้นักพัฒนาแอปเปลี่ยนไปใช้ทรัพยากร Dependency ที่ใหม่กว่าเมื่อการนำทางไม่ได้อาศัย API ใหม่ใน1.2.0
หลัก
เวอร์ชัน 2.3.0-alpha02
19 กุมภาพันธ์ 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-alpha02
แล้ว เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavBackStackEntry
ช่วยให้คุณสามารถเข้าถึงSavedStateHandle
ที่เหมาะสำหรับการจัดเก็บสถานะที่บันทึกไว้จำนวนเล็กน้อยซึ่งควรเชื่อมโยงกับรายการ Back Stack บางรายการ ดูกรณีการใช้งานตัวอย่างในการแสดงผลผลลัพธ์ (b/79672220)
การเปลี่ยนแปลง API
- เราได้เพิ่มวิธีการอำนวยความสะดวกของ
getCurrentBackStackEntry()
และgetPreviousBackStackEntry()
เพื่อช่วยให้เรียกNavBackStackEntry
สำหรับปลายทางปัจจุบันและก่อนหน้านี้ได้ง่ายขึ้น (b/79672220)
แก้ไขข้อบกพร่อง
- ตอนนี้
navigateUp()
จะส่งอาร์กิวเมนต์ของปลายทางปัจจุบันและKEY_DEEP_LINK_INTENT
ไปยังปลายทางก่อนหน้าเมื่อเปิดแอปในกลุ่มงานของคุณเอง (b/147456890)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับหลัก
1.2.0
เวอร์ชัน 2.3.0-alpha01
5 กุมภาพันธ์ 2020
ปล่อย androidx.navigation:navigation-*:2.3.0-alpha01
แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อาร์ติแฟกต์
navigation-testing
ใหม่มีคลาสTestNavHostController
คลาสนี้มีทางเลือกในการใช้การจำลองNavController
เมื่อทดสอบการนำทาง ซึ่งช่วยให้คุณตั้งค่าปลายทางปัจจุบันและยืนยันสแต็กด้านหลังหลังจากดำเนินการนำทาง (b/140884273) navigation-dynamic-features-fragment
ใหม่ (และทรัพยากร Dependency แบบทรานซิทีฟnavigation-dynamic-features-runtime
) จะช่วยให้คุณระบุปลายทางหรือกราฟการนำทางทั้งหมด (ผ่าน<include-dynamic>
) ได้จากโมดูลฟีเจอร์ ซึ่งช่วยให้ติดตั้งโมดูลฟีเจอร์แบบออนดีมานด์ได้อย่างราบรื่นเมื่อไปยังปลายทางเหล่านั้น ดูข้อมูลเพิ่มเติมได้ที่นำทางด้วยโมดูลฟีเจอร์ (b/132170186)
แก้ไขข้อบกพร่อง
- จากการนำทาง
2.2.1
: ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะเพิกเฉยต่อพารามิเตอร์การค้นหาอย่างถูกต้อง แทนที่จะนำไปต่อท้ายองค์ประกอบ{argument}
ต่อท้ายหรือไม่ตรงกับ Deep Link (b/147447512) - จากการนำทาง
2.2.1
: อัปเดตกฎ ProGuardnavigation-ui
สำหรับDrawerArrowDrawable
เพื่อให้มั่นใจว่าไม่จำเป็นต้องใช้android.enableJetifier=true
(b/147610424) - จากการนำทาง
2.2.1
: ตอนนี้โมดูลnavigation-common-ktx
มีชื่อแพ็กเกจไฟล์ Manifest ที่ไม่ซ้ำกันแทนที่จะแชร์ชื่อแพ็กเกจไฟล์ Manifest เดียวกันกับnavigation-runtime-ktx
(aosp/1141947)
การอัปเดตการขึ้นต่อกัน
- จากการนำทาง
2.2.1
: ตอนนี้การนำทาง2.2.1
จะขึ้นอยู่กับ Lifecycle ViewModel savedState2.2.0
และ ส่วนย่อย1.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=””
) และจะตั้งค่าชื่อให้กับสตริงว่างได้อย่างถูกต้อง ซึ่งเคยเปิดตัวมาในการนำทาง 2.3.0-alpha04 (b/148679860)- ขณะนี้กฎ ProGuard ของ
navigation-common-ktx
จะเก็บเฉพาะคลาสNavArgs
ที่ใช้เท่านั้น ไม่ใช่อินสแตนซ์NavArgs
ทั้งหมด ซึ่งเคยเปิดตัวมาในการนำทาง 2.3.0-alpha03 (b/150213558
การอัปเดตการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับ Fragment
1.2.4
(aosp/1277325)
เวอร์ชัน 2.2.1
เวอร์ชัน 2.2.1
5 กุมภาพันธ์ 2020
ปล่อย androidx.navigation:navigation-*:2.2.1
แล้ว เวอร์ชัน 2.2.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ Deep Link ที่ไม่มีพารามิเตอร์การค้นหาจะละเว้นพารามิเตอร์การค้นหาอย่างถูกต้อง แทนที่จะนำไปต่อท้ายองค์ประกอบ
{argument}
ต่อท้ายหรือไม่ตรงกับ Deep Link (b/147447512) - อัปเดตกฎ ProGuard
navigation-ui
สำหรับ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
นอกเหนือจากการระบุอาร์กิวเมนต์ที่ใช้เพื่อเริ่มปลายทางนั้น - การผสานรวม Lifecycle ViewModel savedState: ขณะนี้
SavedStateViewModelFactory
เป็นค่าเริ่มต้นจากโรงงานเมื่อใช้by navGraphViewModels()
หรือเครื่องมือสร้างViewModelProvider
ที่มีViewModelStoreOwner
ที่แสดงผลโดยNavController.getBackStackEntry()
หรือNavController.getViewModelStoreOwner()
- การรองรับพารามิเตอร์การค้นหาของ Deep Link: ตอนนี้ Deep Link ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่เรียงลำดับใหม่แล้ว ตอนนี้อาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็นค่าว่างจะใส่หรือไม่ก็ได้เมื่อจับคู่ Deep Link
- การสนับสนุนภาพเคลื่อนไหวที่ดียิ่งขึ้น: ขณะนี้
NavHostFragment
ใช้FragmentContainerView
จาก Fragment 1.2.0 เพื่อแก้ไขปัญหาการเรียงลำดับ Z ของภาพเคลื่อนไหวและการส่งหน้าต่างไปยัง Fragments
เวอร์ชัน 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)
การเปลี่ยนแปลงการขึ้นต่อกัน
- ตอนนี้การนำทางขึ้นอยู่กับวงจร
2.2.0-rc03
, Lifecycle ViewModel savedState1.0.0-rc03
, กิจกรรม1.1.0-rc03
และ Fragment1.2.0-rc03
ตามความเหมาะสม
เวอร์ชัน 2.2.0-rc02
7 พฤศจิกายน 2019
ปล่อย androidx.navigation:navigation-*:2.2.0-rc02
แล้ว เวอร์ชัน 2.2.0-rc02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงการขึ้นต่อกัน
- การนำทางตอนนี้ขึ้นอยู่กับ androidx.lifecycle
2.2.0-rc02
เวอร์ชัน 2.2.0-rc01
23 ตุลาคม 2019
ระบบเผยแพร่ androidx.navigation:navigation-*:2.2.0-rc01
โดยไม่มีการเปลี่ยนแปลงตั้งแต่วันที่ 2.2.0-beta01
เวอร์ชัน 2.2.0-rc01 มีคอมมิตเหล่านี้
เวอร์ชัน 2.2.0-beta01
9 ตุลาคม 2019
ปล่อย androidx.navigation:navigation-*:2.2.0-beta01
แล้ว เวอร์ชัน 2.2.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้
NavDestination
และคลาสย่อยจะลบล้างtoString()
เพื่อให้ข้อมูลที่เป็นประโยชน์มากขึ้นเมื่อแก้ไขข้อบกพร่อง (b/141264986)
การเปลี่ยนแปลงลักษณะการทำงาน
- ตอนนี้ระบบจะไม่สนใจพารามิเตอร์การค้นหาเพิ่มเติมเมื่อจับคู่ Deep Link ไม่ใช่ทําให้การจับคู่ล้มเหลว (b/141482822)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบไม่สนใจอาร์กิวเมนต์ในเส้นทางของ Deep Link หากระบุพารามิเตอร์การค้นหาด้วย (b/141505755)
- ตอนนี้ส่วนขยาย Kotlin
navArgs()
ในActivity
มีข้อความแสดงข้อผิดพลาดที่ดีขึ้นเมื่อไม่มีรายการเพิ่มเติม (b/141408999) - ตอนนี้ Safe Args ที่สร้างคลาส Java
Directions
คลาสมีค่าเริ่มต้นแล้วในตอนนี้ (b/141099045) - ตอนนี้ Safe Args ที่สร้างคลาส Java
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 ที่มีพารามิเตอร์การค้นหารองรับพารามิเตอร์การค้นหาที่เรียงลำดับใหม่แล้ว ตอนนี้อาร์กิวเมนต์ที่มีค่าเริ่มต้นหรือเป็นค่าว่างจะใส่หรือไม่ก็ได้เมื่อจับคู่ 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 ของภาพเคลื่อนไหวและการส่งชิ้นส่วนหน้าต่างไปยัง Fragments (b/137310379)
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
5 กันยายน 2019
ปล่อย androidx.navigation:navigation-*:2.1.0
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.0.0
- การกำหนดขอบเขต ViewModels ไปยังกราฟการนำทาง: ตอนนี้คุณสามารถสร้าง ViewModels ที่กำหนดขอบเขตที่ระดับกราฟการนำทางได้โดยใช้การมอบสิทธิ์พร็อพเพอร์ตี้
by navGraphViewModels()
สำหรับผู้ใช้ 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
- ระบบได้นำ API
getViewModelStore()
ที่เลิกใช้งานไปเมื่อวันที่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 หรือการแก้ไข Flash ภาพ (b/130362979)
- แก้ไขข้อบกพร่องที่สแต็กการนำทางย้อนกลับไม่ซิงค์เมื่อเปิด Fragment เมื่อมีการเพิ่มส่วนย่อยเริ่มต้น (b/133832218)
เวอร์ชัน 2.1.0-alpha05
5 มิถุนายน 2019
ปล่อย androidx.navigation:*:2.1.0-alpha05
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- API ที่เกี่ยวข้องกับโฮสต์ใน
NavController
ถูกเปลี่ยนชื่อและย้ายไปยังคลาสย่อยใหม่ของNavController
,NavHostController
(aosp/966091) - ระบบได้แทนที่เมธอด
NavController
setHostOnBackPressedDispatcherOwner()
ด้วยเมธอดsetOnBackPressedDispatcher()
ของNavHostController
แล้ว และตอนนี้คุณจะต้องเรียกใช้setLifecycleOwner()
ก่อนที่จะเรียกใช้เมธอดดังกล่าว (aosp/965409) - ขณะนี้
NavHostController
มีเมธอดenableOnBackPressed(boolean)
ที่แทนที่คลาสNavHostOnBackPressedManager
ที่setHostOnBackPressedDispatcherOwner()
แสดงผลก่อนหน้านี้ (aosp/966091)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่แบ็กสแต็กไม่ถูกต้องหลังจากนำทางตาม URI (b/132509387)
- ตอนนี้ Deep Link ที่ NavController จัดการโดยอัตโนมัติจะทริกเกอร์เพียงครั้งเดียว (b/132754763)
เวอร์ชัน 2.1.0-alpha04
16 พฤษภาคม 2019
ปล่อย androidx.navigation:*:2.1.0-alpha04
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
NavHostFragment
ดำเนินการตามapp:defaultNavHost
อย่างถูกต้องเมื่อสกัดกั้นเหตุการณ์ของปุ่ม "กลับ" ของระบบ ซึ่งจะแก้ไขการถดถอยในการนำทาง2.1.0-alpha03
b/132077777DialogFragmentNavigator
จัดการการดำเนินการpopBackStack()
และnavigateUp()
อย่างถูกต้องแล้วในขณะนี้ b/132576764- แก้ไขปัญหา
IllegalStateException: unknown destination during restore
เมื่อมีการไปยังส่วนต่างๆ ของกราฟที่ซ้อนกันซ้ำๆ b/131733658
เวอร์ชัน 2.1.0-alpha03
7 พฤษภาคม 2019
ปล่อย androidx.navigation:*:2.1.0-alpha03
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ปัญหาที่ทราบ
- NavHostFragment ยังคงสกัดกั้นปุ่มย้อนกลับของระบบอยู่แม้ว่าจะใช้
app:defaultNavHost="false"
b/132077777
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถสร้างปลายทาง
<dialog>
ที่จะแสดงDialogFragment
เมื่อคุณnavigate
ไปยังปลายทางเหล่านั้นNavHostFragment
รองรับปลายทางของกล่องโต้ตอบโดยค่าเริ่มต้น b/80267254 - นอกจากการเรียกใช้
navigate
ด้วยรหัสทรัพยากรหรืออินสแตนซ์NavDirections
แล้ว ตอนนี้คุณสามารถนำทางผ่านUri
ซึ่งใช้<deepLink>
ที่คุณเพิ่มลงในปลายทางเพื่อนำทางไปยังปลายทางที่ถูกต้องได้แล้ว b/110412864
การเปลี่ยนแปลงลักษณะการทำงาน
- ภาพเคลื่อนไหวเริ่มต้นจาก NavigationUI ได้เพิ่มความเร็วจาก 400 มิลลิวินาทีเป็น 220 มิลลิวินาที เพื่อให้สอดคล้องกับความเร็วภาพเคลื่อนไหวเริ่มต้นของกิจกรรมและส่วนย่อย b/130055522
การเปลี่ยนแปลง API
- เราเลิกใช้งานเมธอด
createFragmentNavigator()
ของNavHostFragment
แล้ว และได้ย้ายฟังก์ชันการทำงานไปยังเมธอดonCreateNavController()
ใหม่ เพื่อให้เห็นชัดเจนยิ่งขึ้นว่านี่คือจุดแรกเข้าที่ถูกต้องของการเพิ่ม Navigators ที่กำหนดเองเมื่อจัดประเภทย่อยNavHostFragment
b/122802849 - เพิ่มเมธอด
hasDeepLink()
ลงในNavDestination
แล้วเพื่อให้คุณตรวจสอบว่าปลายทางนั้นๆ จัดการUri
ที่ระบุได้หรือไม่ หรือในกรณีของNavGraph
ให้ใช้ปลายทางใดก็ได้ในกราฟการนำทาง b/117437718
แก้ไขข้อบกพร่อง
- ส่งอาร์กิวเมนต์เริ่มต้นไปยังอินสแตนซ์
OnDestinationChangedListener
อย่างถูกต้องแล้ว b/130630686 - ปัจจุบัน
NavHostFragment
สกัดกั้นเหตุการณ์ "ย้อนกลับ" ของระบบโดยใช้OnBackPressedDispatcher
ซึ่งแก้ไขปัญหาเมื่อนำทางแบบมีเงื่อนไขในวิธีวงจรของ Fragment เมื่อกลับไปยัง Fragment b/111598096 - สำหรับ Safe Args ทำให้
android:defaultValue=”@null”
ที่มีapp:argType
ที่ไม่ระบุถือว่าเป็นอาร์กิวเมนต์string
ได้อย่างถูกต้องแล้ว b/129629192
เวอร์ชัน 2.1.0-alpha02
3 เมษายน 2019
ปล่อย androidx.navigation:*:2.1.0-alpha02
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- ตอนนี้คุณสามารถสร้าง ViewModels ที่กำหนดขอบเขตที่ระดับกราฟการนำทางผ่านการมอบสิทธิ์พร็อพเพอร์ตี้
by navGraphViewModels()
สำหรับผู้ใช้ Kotlin หรือใช้getViewModelStore()
API ที่เพิ่มลงในNavController
ได้แล้ว b/111614463
การเปลี่ยนแปลง API
- คุณเพิ่ม
app:targetPackage
ไปยังปลายทาง<activity>
เพื่อจำกัดชื่อแพ็กเกจที่ตรงกันได้แล้ว แอปรองรับapp:targetPackage="${applicationId}"
เพื่อจำกัดแพ็กเกจเฉพาะรหัสแอปพลิเคชันของคุณ b/110975456
แก้ไขข้อบกพร่อง
- จะไม่มีการแยกวิเคราะห์
android:name
สำหรับปลายทาง<activity>
เป็น Class เมื่อเงินเฟ้ออีกต่อไป ทำให้ ClassNotFoundException เมื่อใช้ฟีเจอร์แบบไดนามิก b/124538597
เวอร์ชัน 2.1.0-alpha01
19 มีนาคม 2019
นี่เป็นรุ่นอัลฟ่ารุ่นแรกของการนำทาง 2.1.0
การเปลี่ยนแปลงการขึ้นต่อกัน
- ขณะนี้การนำทางขึ้นอยู่กับ
androidx.core:core:1.0.1
และandroidx.fragment:fragment:1.1.0-alpha05
รุ่นนี้ยังนำ การพึ่งพาandroidx.legacy:legacy-support-core-utils:1.0.0
b/128632612
การเปลี่ยนแปลง API
- เมธอด
Navigation.createNavigateOnClickListener(NavDirections)
ใหม่ ได้เพิ่มเข้ามาเป็นทางเลือกในการสร้าง Listener การคลิกด้วย รหัสทรัพยากรและ Bundle b/127631752 FragmentNavigator.instantiateFragment
เลิกใช้งานแล้ว ค่าเริ่มต้น ขณะนี้การใช้งานFragmentFactory
เพื่อสร้าง Fragments b/119054429
แก้ไขข้อบกพร่อง
- การนำทางจะไม่ส่ง
Bundle
ที่เป็นค่าว่างอีกต่อไปเมื่อมีการแนบอาร์กิวเมนต์ ไปยังปลายทาง เพื่อแก้ไขปัญหาเมื่อใช้android:defaultValue="@null"
b/128531879 - ตอนนี้ Safe Args ต้องใช้ KotlinPoet 1.1.0 แล้ว ซึ่งการแก้ไขปัญหาเกี่ยวกับ ชื่อแพ็กเกจที่ยาวมากๆ b/123654948
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
14 มีนาคม 2019
การนำทาง 2.0.0
ได้รับการเผยแพร่แล้วโดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc02
เวอร์ชัน 2.0.0-rc02
6 มีนาคม 2019
การนำทาง 2.0.0-rc02 มอบอาร์ติแฟกต์ใหม่ๆ ด้วย androidx.navigation
รหัสกลุ่มและเปลี่ยนทรัพยากร Dependency เป็น AndroidX ที่เทียบเท่ากัน
ลักษณะการทำงานของ 2.0.0-rc02 นั้นเหมือนกับลักษณะการทำงานของ Navigation 1.0.0-rc02 และไม่จำเป็นต้องเปลี่ยนแปลงโค้ดของคุณเพื่ออัปเดตจาก 1.0.0-rc02 นอกเหนือจากการอัปเดต ทรัพยากร Dependency ให้ตรงกับ ทรัพยากร Dependency ใหม่
โปรเจ็กต์ต้องมี ได้ย้ายข้อมูลไปยัง AndroidX เพื่อใช้รุ่น 2.X ของ การนำทาง การนำทางเวอร์ชัน 1.0 เวอร์ชันเสถียรจะเป็นรุ่นล่าสุดที่ใช้การสนับสนุน ทรัพยากร Dependency ของไลบรารี การพัฒนาในอนาคตทั้งหมดนอกเหนือจาก 1.0 จะอิงตาม AndroidX และสร้างมาจากรุ่น 2.0 ที่เสถียร
การขึ้นต่อกันก่อน AndroidX
สำหรับการนำทางเวอร์ชันก่อน AndroidX ให้รวมทรัพยากร Dependency ต่อไปนี้
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
สำหรับอาร์กิวเมนต์ที่ปลอดภัย ให้เพิ่มเมธอด
ตาม classpath ในไฟล์ ระดับบนสุด build.gradle
ของคุณ
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.0
14 มีนาคม 2019
การนำทาง 1.0.0
ได้รับการเผยแพร่แล้วโดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-rc02
เวอร์ชัน 1.0.0-rc02
26 กุมภาพันธ์ 2019
นี่เป็นรุ่นที่ 2 ที่เป็นตัวเลือกสำหรับรุ่นเสถียร 1.0.0 ของการนำทาง รุ่นนี้มีการแก้ไขข้อบกพร่องหลายรายการ
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบละเว้น
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 รายการ
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเมื่อใช้การดำเนินการนำทาง Fragments และ
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 - Safe Args ที่สร้างคลาส NavArgs จะไม่ขัดข้องอีกต่อไปเมื่อกู้คืน
อาร์กิวเมนต์
Parcelable[]
จากสถานะอินสแตนซ์ที่บันทึกไว้ b/123963545 - ตอนนี้ Safe Args ล้างคลาส Kotlin ที่สร้างขึ้นที่ไม่จำเป็นออกอย่างเหมาะสมแล้ว b/124120883
เวอร์ชัน 1.0.0-beta01
4 กุมภาพันธ์ 2019
นี่คือการนำทางเวอร์ชันเบต้ารุ่นแรก ไปข้างหน้า การนำทาง คาดว่า API จะมีความเสถียรจนถึงเวอร์ชันถัดไป เว้นแต่จะมี ปัญหาร้ายแรง รุ่นนี้มีการแก้ไขข้อบกพร่องและการเปลี่ยนแปลงลักษณะการทํางาน
การเปลี่ยนแปลงลักษณะการทำงาน
- การนำทางตอนนี้ช่วยให้มั่นใจว่าค่าเริ่มต้นของอาร์กิวเมนต์ได้รับการดำเนินการเหมือนกัน
ขณะรันไทม์และผ่าน Safe Args ดังนั้น เฉพาะอาร์กิวเมนต์ที่มี
app:argType="reference"
สามารถใช้ค่าเริ่มต้นชี้ไปยังทรัพยากรอื่น (เช่น@color/colorPrimary
) การพยายามใช้ค่าเริ่มต้นของข้อมูลอ้างอิง ที่มีapp:argType
ต่างกันจะส่งผลให้ได้รับข้อยกเว้นเมื่อ การแยกวิเคราะห์ XML การไปยังส่วนต่างๆ b/123551990 - ตอนนี้ Safe Args ต้องใช้ปลั๊กอิน Android Gradle 3.3.0 แล้ว aosp/888413
- ตอนนี้ Safe Args ต้องใช้ Kotlin 1.3.20 แล้ว aosp/888414
แก้ไขข้อบกพร่อง
- ตอนนี้สามารถใช้ Safe Args ในไลบรารีและโมดูลฟีเจอร์ในทุกเวอร์ชันได้แล้ว ของปลั๊กอิน Android Gradle b/121304903
- แก้ไขการถดถอยที่จะทำให้เกิดการดำเนินการ
popBackStack()
เดี่ยว แสดงสำเนาของปลายทางทั้งหมดที่ด้านบนของกลุ่มสำรอง เพียงแห่งเดียวต่อครั้งเท่านั้น b/123552990 - แก้ไขปัญหาที่สถานะ
FragmentNavigator
จะซิงค์ข้อมูล ด้วยสถานะของNavController
ซึ่งทำให้เกิดIllegalStateException
เมื่อ กำลังพยายามคืนค่าแบ็กสแต็ก b/123803044 - แก้ไขปัญหาที่ลูกศรย้อนกลับที่
NavigationUI
จัดการไม่ ปรากฏขึ้นเมื่อใช้ ProGuard ที่มีการปรับให้ยากต่อการอ่าน (Obfuscate) 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 ไม่สามารถนำเข้าคลาส "เส้นทาง" ที่เชื่อมโยงกับการดำเนินการส่วนกลาง b/123307342
รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง
ฟีเจอร์ใหม่
- ผู้ใช้ Kotlin สามารถใช้ผู้รับมอบสิทธิ์พร็อพเพอร์ตี้
by navArgs()
เพื่อ Lazy Loading ได้แล้ว รับการอ้างอิงไปยังคลาสNavArgs
ที่สร้างอย่างปลอดภัยใน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
ที่ซ้อนกันหรือNavHostFragment
หลายรายการ b/121340440
การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ
- เมธอด
NavOptions.applyPopAnimationsToPendingTransition()
สำหรับ การใช้ภาพเคลื่อนไหวป๊อปกับกิจกรรมได้ย้ายไปที่ActivityNavigator
แล้ว b/122413117 - ตอนนี้ Safe Args หลีกเลี่ยงการทำซ้ำคลาสที่เหมือนกันสำหรับการดำเนินการที่ไม่มี
อาร์กิวเมนต์ ประเภทการแสดงผลสำหรับเมธอดที่ไม่มีอาร์กิวเมนต์ใน NavDirections ที่สร้างขึ้น
ชั้นเรียนเปลี่ยนเป็น
NavDirections
b/123233147 - คลาส "เส้นทาง" ที่สร้าง Safe Args จะไม่มีตัวสร้างสาธารณะอีกต่อไป คุณควรโต้ตอบกับเมธอดแบบคงที่ที่สร้างขึ้นเท่านั้น b/123031660
- Args ที่ปลอดภัยสร้างคลาส
NavDirections
รายการไม่มีโดเมนสาธารณะอีกต่อไป เครื่องมือสร้าง - ควรสร้างโดยใช้เมธอดแบบคงที่ใน คลาสเส้นทางที่สร้างขึ้น b/122963206 Bundle
ที่ส่งคืนจากNavDirections
' ตอนนี้ทำเครื่องหมายgetArguments()
แล้ว เป็น@NonNull
แทนที่จะเป็น@Nullable
b/123243957
แก้ไขข้อบกพร่อง
NavDeepLinkBuilder
จัดการหลายรายการพร้อมกันได้อย่างถูกต้องแล้วPendingIntent
ไปยังปลายทางเดียวกันโดยใช้อาร์กิวเมนต์ที่คุณส่ง เพื่อระบุความเป็นเอกลักษณ์ b/120042732NavController
จะจัดการการดำเนินการของpopBackStack()
ได้อย่างถูกต้องเมื่อ การใช้NavHostFragment
หรือ Fragment ย่อยอื่นๆ ที่มี Back Stack b/122770335NavigationUI
ตั้งค่าคำอธิบายเนื้อหาของปุ่ม "ขึ้น" อย่างถูกต้องแล้ว b/120395362- ตอนนี้คลาส "คำแนะนำ" ที่สร้าง Safe Args จะจัดการการดำเนินการส่วนกลางได้อย่างถูกต้อง ที่มีรหัสเดียวกับการดำเนินการในปลายทาง b/122962504
- ตอนนี้ Args ที่ปลอดภัยที่สร้าง
NavDirections
คลาสมีค่าเท่ากับอย่างถูกต้องhashCode()
ค่าเมื่อequals()
จะแสดงผลเป็น "จริง" b/123043662 - ตอนนี้
FragmentNavigator
จะแสดงข้อความแสดงข้อผิดพลาดที่ดีขึ้นหากคุณพยายาม กำหนดค่าFragmentTransactions
ในNavHostFragment
FragmentManager
คุณควรใช้getChildFragmentManager()
เสมอ b/112927148
เวอร์ชัน 1.0.0-alpha09
18 ธันวาคม 2018
รุ่นนี้มีการเปลี่ยนแปลง API ที่ส่งผลกับส่วนอื่นในระบบ โปรดดูส่วนการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบด้านล่าง
เราเลือกที่จะไม่พัฒนา
อาร์ติแฟกต์ android.arch.navigation:navigation-testing
รายการ แม้ว่าจะมีการพิสูจน์แล้ว
มีประโยชน์สำหรับการทดสอบภายในของ NavController
เราขอแนะนำ
กลยุทธ์การทดสอบสำรอง เช่น การจำลองอินสแตนซ์ NavController
เพื่อยืนยันว่าการโทร navigate()
ถูกต้อง ช่วงเวลานี้
จะกล่าวถึงรายละเอียดใน
การเสวนาเรื่องกิจกรรมเดี่ยวที่งาน 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
แทนที่จะเป็นBundle
ที่ไม่มีข้อมูล 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
และเพิ่มความสามารถในการ ตั้งค่าสถานะIntent.FLAG_ACTIVITY_
ใดก็ได้ aosp/828140 NavController.onHandleDeepLink
ถูกเปลี่ยนชื่อเป็นhandleDeepLink
แล้ว aosp/836063- มีคลาสและวิธีการมากมายที่ไม่ได้มีไว้สำหรับการแยกประเภทย่อย เช่น
NavOptions
,NavInflater
,NavDeepLinkBuilder
และAppBarConfiguration
กำหนดเป็นfinal
แล้ว aosp/835681 - นำเมธอด
NavHostFragment.setGraph()
ที่เลิกใช้งานแล้วออกแล้ว aosp/835684 - เมธอด
NavigationUI.navigateUp(DrawerLayout, NavController)
ที่เลิกใช้งานแล้ว นำออกแล้ว aosp/835684 - การสร้าง Fragment ได้ย้ายไปที่
FragmentNavigator
ซึ่งทำให้ มอบสิทธิ์การสร้าง Fragment ให้กับFragmentFactory
b/119054429 - ตัวสร้างสำหรับ
NavGraphNavigator
ไม่ต้องใช้Context
อีกต่อไป aosp/835340 - NavigatorProvider เปลี่ยนชื่อเป็น
ชั้นเรียน แทนที่จะเป็นอินเทอร์เฟซ คืนเงิน
NavigatorProvider
โดยgetNavigatorProvider()
ไม่ได้เปลี่ยนฟังก์ชันการทำงาน aosp/830660 - นำ
NavDestination.navigate()
ออกแล้ว โทรหาnavigate()
บนNavigator
แทน aosp/830663 - การเปลี่ยนโครงสร้างภายในโค้ด
Navigator
อย่างมาก ทำให้ไม่จำเป็นต้องใช้OnNavigatorNavigatedListener
และให้navigate
แสดงNavDestination
ที่ถูกนำทางไปแทน - อินสแตนซ์
Navigator
รายการส่งเหตุการณ์ป๊อปอัปไปยังNavController
ไม่ได้อีกต่อไป พิจารณา ใช้OnBackPressedCallback
เพื่อ ดักจับการกดปุ่มย้อนกลับและโทรหาnavController.popBackStack()
aosp/833716
แก้ไขข้อบกพร่อง
- ตอนนี้
popUpTo
ทำงานอย่างสม่ำเสมอเมื่อปลายทางเป็นองค์ประกอบ<navigation>
b/116831650 - แก้ไขข้อบกพร่องจำนวนหนึ่งที่ทำให้เกิด
IllegalArgumentException
เมื่อใช้กราฟซ้อน b/118713731 b/113611083 b/113346925 b/113305559 - ตอนนี้ระบบจะป้อนข้อมูลแอตทริบิวต์
dataPattern
ของปลายทาง<activity>
อาร์กิวเมนต์จากอาร์กิวเมนต์ที่ไม่ใช่สตริงโดยการเรียกใช้toString()
b/120161365
อาร์กิวเมนต์ที่ปลอดภัย
- Safe Args รองรับออบเจ็กต์ที่แยกอนุกรมได้ รวมถึงค่า 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 มากขึ้น แต่คุณสามารถใช้สำหรับการทดสอบที่เขียนด้วย Java ต่อไปได้ - ไม่สนับสนุนกราฟการนำทางที่ลงทะเบียนในไฟล์ Manifest ของข้อมูลเมตาอีกต่อไป b/118355937
- แนบการดำเนินการกับ <activity> ไม่ได้อีกต่อไป ปลายทาง aosp/785539
แก้ไขข้อบกพร่อง
- Deep Link แยกวิเคราะห์พารามิเตอร์การค้นหาได้อย่างถูกต้องแล้วในตอนนี้ b/110057514
- ปลายทางของกิจกรรมใช้ภาพเคลื่อนไหวแบบเข้าและออกทั้งหมดอย่างถูกต้องแล้ว b/117145284
- แก้ไขข้อขัดข้องที่เกิดขึ้นหลังจากการเปลี่ยนแปลงการกำหนดค่าเมื่อใช้ การนำทาง b/110763345
อาร์กิวเมนต์ที่ปลอดภัย
- ตอนนี้อาร์กิวเมนต์ที่ปลอดภัยใช้ปลั๊กอิน Android Gradle 3.2.1 แบบคงที่แล้ว b/113167627
- สามารถสร้างเส้นทางสำหรับชั้นเรียนภายในได้แล้ว b/117407555
- แก้ไขปัญหาเกี่ยวกับการสร้างเส้นทางไปยัง <include> กราฟ b/116542123
เวอร์ชัน 1.0.0-alpha06
20 กันยายน 2018
ฟีเจอร์ใหม่
- ตอนนี้ระบบรองรับการเปลี่ยนองค์ประกอบที่แชร์สำหรับปลายทางของส่วนย่อยและกิจกรรมแล้ว b/79665225 ดูข้อมูลเพิ่มเติมได้ที่ใช้การนำทางด้วยคอมโพเนนต์สถาปัตยกรรมการนำทาง
- ตอนนี้การเลือกรายการใน
NavigationView
จะเป็นการปิด Bottom Sheet b/112158843
การเปลี่ยนแปลง API
- การเปลี่ยนแปลงสำคัญ: ตอนนี้เมธอด Navigator
navigate()
จะใช้พารามิเตอร์Navigator.Extras
- ตอนนี้เมธอด
getGraph()
ของ NavController คือNonNull
b/112243286
แก้ไขข้อบกพร่อง
NavigationUI.setupWithNavController()
ไม่ทำให้ข้อมูลรั่วไหลอีกต่อไปหากใช้กับยอดดูจากปลายทางแต่ละแห่ง b/111961977- ตอนนี้มีการเรียกใช้การนำทาง
onSaveState()
เพียงครั้งเดียว b/112627079
อาร์กิวเมนต์ที่ปลอดภัย
- ตอนนี้คลาสปลายทางของการนำทางจะขยายคลาสเส้นทางของผู้ปกครองได้ หากมี b/79871405
- ตอนนี้คลาสเส้นทางและ Args มีการใช้
toString()
ที่เป็นประโยชน์ b/111843389
เวอร์ชัน 1.0.0-alpha05
10 สิงหาคม 2018
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ทำให้เกิดลักษณะการทำงานของ Backstack ที่ไม่ถูกต้อง b/111907708
- แก้ไขข้อบกพร่องในคลาส Args ที่สร้างขึ้น
equals()
รายการ b/111450897 - แก้ไขความล้มเหลวของบิลด์ใน Safe Args b/109409713
- แก้ไขการแปลงจากตัวระบุทรัพยากรเป็นชื่อ Java b/111602491
- แก้ไขข้อความแสดงข้อผิดพลาดเกี่ยวกับความสามารถในการเว้นว่างในปลั๊กอิน Safe Args
- เพิ่มคำอธิบายประกอบที่ไม่มีข้อมูล
เวอร์ชัน 1.0.0-alpha04
19 กรกฎาคม 2018
การไปยังส่วนต่างๆ 1.0.0-alpha04
และปลั๊กอิน Gradle ของ Safe Args ที่เกี่ยวข้องมีการเปลี่ยนแปลง API, การเปลี่ยนแปลงการทำงาน และการแก้ไขข้อบกพร่องหลายรายการ
การเปลี่ยนแปลง API / ลักษณะการทำงาน
- NavHostFragment จะตั้งค่า Fragment ปัจจุบันเป็นส่วนย่อยการนำทางหลักเสมอ เพื่อให้แน่ใจว่ามีการเรียกตัวจัดการส่วนย่อยย่อยก่อนที่จะเรียก NavController ภายนอก b/111345778
อาร์กิวเมนต์ที่ปลอดภัย
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ:
app:type
มีการเปลี่ยนแปลงเป็นapp:argType
เพื่อหลีกเลี่ยงความขัดแย้งกับไลบรารีอื่นๆ เช่น ConstraintLayout 2.0.0-alpha1 b/111110548 - ตอนนี้ข้อความแสดงข้อผิดพลาดจาก Safe Args สามารถคลิกได้แล้ว b/111534438
- คลาส Args จะยืนยันว่าแอตทริบิวต์
NonNull
นั้นไม่เป็นค่าว่างจริงๆ 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 สำหรับ Toolbar แล้ว b/109868820
- เพิ่มเมธอด NavigationUI.setupWithNavController สำหรับ CollapsingToolbarLayout ออก b/110887183
- ตอนนี้ popBackStack() แสดงผลเท็จเมื่อสแต็กด้านหลังว่างหรือเมื่อรหัสปลายทางที่ระบุไม่ได้อยู่ในสแต็กแบ็ก b/110893637
- ตอนนี้ FragmentNavigator จะละเว้นการดำเนินการนำทางหลังจากที่ FragmentManager ได้บันทึกสถานะแล้ว โดยหลีกเลี่ยงข้อยกเว้น "ไม่สามารถดำเนินการนี้หลังจาก onSaveInstanceState" b/110987825
อาร์กิวเมนต์ที่ปลอดภัย
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: การทำงานของอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันและชื่ออาร์กิวเมนต์จะถูกแทนที่ด้วยตัวอักษรพิมพ์เล็ก-ใหญ่ในชื่อเมธอด NavDirections ที่เกี่ยวข้อง
- เช่น
DemoController.index
จะกลายเป็นsetDemoControllerIndex
b/79995048 - เช่น
action_show_settings
จะกลายเป็นactionShowSettings
b/79642240
- เช่น
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: โดยค่าเริ่มต้น อาร์กิวเมนต์จะถือว่าไม่ใช่ค่าว่าง หากต้องการอนุญาตให้ใช้ค่า 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 Plugin 3.2 Beta 01 ได้เพิ่มกฎ Keep ให้กับแอตทริบิวต์
android:name
ทุกรายการในไฟล์ XML การนำทาง b/79874119 - แก้ไขการรั่วไหลของหน่วยความจำเมื่อแทนที่ FragmentNavigator เริ่มต้น b/110900142
เวอร์ชัน 1.0.0-alpha02
7 มิถุนายน 2018
การเปลี่ยนแปลงลักษณะการทำงาน
ตอนนี้
FragmentNavigator
ใช้setReorderingAllowed(true)
b/109826220Navigation now URLDecodesอาร์กิวเมนต์ที่แยกวิเคราะห์จาก 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แก้ไขปัญหาเกี่ยวกับ Fragment ที่ทับซ้อนกันเมื่อใช้
launchSingleTop
b/79407969ขณะนี้การนำทางจะสร้างสแต็กย้อนกลับสังเคราะห์ที่ถูกต้องสำหรับกราฟที่ซ้อนกัน b/79734195
ตอนนี้ NavigationUI จะไฮไลต์รายการที่ถูกต้องเมื่อใช้กราฟที่ซ้อนกันเป็น
MenuItem
b/109675998
การเปลี่ยนแปลง API
แอตทริบิวต์
clearTask
สำหรับการดำเนินการและ API ที่เชื่อมโยงในNavOptions
เลิกใช้งานแล้ว b/80338878แอตทริบิวต์
launchDocument
สำหรับการดำเนินการและ API ที่เชื่อมโยงในNavOptions
เลิกใช้งานแล้ว b/109806636
เวอร์ชัน 1.0.0-alpha01
8 พฤษภาคม 2018
การนำทางเป็นเฟรมเวิร์กสำหรับการสร้างในแอป
การนำทาง รุ่นเริ่มต้นนี้คือ 1.0.0-alpha01