การไปยังรายการต่างๆ
อัปเดตล่าสุด | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
4 กันยายน 2024 | 2.8.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency สำหรับการนำทาง คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับ
ในแอปหรือโมดูล
ดึงดูด
dependencies { def nav_version = "2.8.0" // 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.0" // 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
วิธีเพิ่ม อาร์กิวเมนต์ที่ปลอดภัย
ลงในโปรเจ็กต์ของคุณ ให้ใส่ classpath
ต่อไปนี้ในไฟล์ build.gradle
ระดับบนสุด
ดึงดูด
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
นอกจากนี้ คุณต้องใช้ปลั๊กอิน 1 ใน 2 รายการที่มีอยู่ด้วย
หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสำหรับโมดูล Java และ Kotlin แบบผสม ให้เพิ่ม
บรรทัดนี้ไปยังไฟล์ build.gradle
ของแอปหรือโมดูลของคุณ
ดึงดูด
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
หากต้องการสร้างโค้ด Kotlin ที่เหมาะสำหรับโมดูล Kotlin เท่านั้น ให้เพิ่มรายการต่อไปนี้
ดึงดูด
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
คุณต้องมี android.useAndroidX=true
ใน
gradle.properties
ไฟล์ตาม
การย้ายข้อมูลไปยัง 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