Di chuyển
Bản cập nhật mới nhất | Bản phát hành ổn định | Bản phát hành dùng thử | Bản phát hành beta | Bản phát hành alpha |
---|---|---|---|---|
Ngày 13 tháng 11 năm 2024 | 2.8.4 | - | - | 2.9.0-alpha03 |
Khai báo phần phụ thuộc
Để thêm một phần phụ thuộc vào Navigation, bạn phải thêm kho lưu trữ Google Maven vào dự án. Hãy đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.
Thêm phần phụ thuộc cho cấu phần mềm bạn cần trong tệp build.gradle
cho ứng dụng hoặc mô-đun:
Groovy
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
Để thêm Safe Args vào dự án, hãy đưa classpath
sau vào tệp build.gradle
cấp cao nhất của bạn:
Groovy
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") } }
Bạn cũng phải áp dụng 1 trong 2 trình bổ trợ có sẵn.
Để tạo mã ngôn ngữ Java phù hợp với mô-đun Java và Kotlin, hãy thêm dòng này vào tệp build.gradle
của ứng dụng hoặc mô-đun:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Ngoài ra, để tạo mã Kotlin phù hợp với các mô-đun chỉ Kotlin, hãy thêm:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Bạn phải có android.useAndroidX=true
trong
tệp gradle.properties
theo hướng dẫn
Di chuyển sang AndroidX.
Để biết thông tin về cách sử dụng các phần mở rộng Kotlin, hãy xem tài liệu ktx.
Để biết thêm thông tin về các phần phụ thuộc, hãy xem nội dung Thêm phần phụ thuộc cho bản dựng.
Ý kiến phản hồi
Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.
Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.
Phiên bản 2.9
Phiên bản 2.9.0-alpha03
Ngày 13 tháng 11 năm 2024
Phát hành androidx.navigation:navigation-*:2.9.0-alpha03
. Phiên bản 2.9.0-alpha03 bao gồm các thay đổi sau.
Tính năng mới
- Tính năng an toàn về kiểu điều hướng hiện hỗ trợ các lớp giá trị dưới dạng tuyến hoặc dưới dạng loại đối số của tuyến. (I9344a, b/374347483)
Sửa lỗi
- Khắc phục lỗi
ConcurrentModificationException
có thể xảy ra khiLifecycleObserver
đính kèm vàoNavBackStackEntry
kích hoạt thay đổi đối với ngăn xếp lui khiLifecycleOwner
lưu trữ (chẳng hạn như Hoạt động hoặc Mảnh chứa) thay đổi trạng thái vòng đời. (Ia9494)
Phiên bản 2.9.0-alpha02
Ngày 30 tháng 10 năm 2024
Phát hành androidx.navigation:navigation-*:2.9.0-alpha02
. Phiên bản 2.9.0-alpha02 bao gồm các thay đổi sau.
Đóng góp bên ngoài
- Phương thức
NavController.handleDeepLink(request: NavDeepLinkRequest)
phổ biến mới. Cảm ơn Konstantin Tskhovrebov! (I3e228)
Phiên bản 2.9.0-alpha01
Ngày 16 tháng 10 năm 2024
Phát hành androidx.navigation:navigation-*:2.9.0-alpha01
. Phiên bản 2.9.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, Trình điều hướng tuỳ chỉnh có thể đánh dấu các đích đến của mình là triển khai giao diện
SupportingPane
, choNavController
biết rằng các đích đến này sẽ xuất hiện cùng với các đích đến khác. Ví dụ: bằng cách sử dụng giao diện này, nhiều đích đến có thể làRESUMED
cùng một lúc. (Id5559) - Từ Navigation
2.8.3
: Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đunnavigation-common
,navigation-runtime
vànavigation-compose
để giúp xác định mọi tuyến an toàn về loại không được chú thích chính xác bằng@Serializable
. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộngNavGraphBuilder
vàNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Từ Navigation
2.8.3
: Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đunnavigation-common
,navigation-runtime
vànavigation-compose
để giúp xác định mọi tuyến an toàn về loại có đối số Enum không được chú thích chính xác bằng@Keep
. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộngNavGraphBuilder
vàNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Thay đổi về hành vi
- Giờ đây, việc cố gắng sử dụng
NavController
đã từng làDESTROYED
sẽ gây raIllegalStateException
. (I520da, b/369616172)
Sửa lỗi
- Cập nhật trường hợp ngoại lệ không tìm thấy lớp Enum để đề xuất sử dụng chú thích
@Keep
trong trường hợp lớp Enum bị xoá trong các bản dựng rút gọn. (I90e79, b/358137294)
Lỗi đã biết
- Có vấn đề với các quy tắc tìm lỗi mã nguồn mới được thêm vào
Navigation 2.8.*
, gây ra lỗiObsolete custom lint check
khi cố gắng chạy công cụ tìm lỗi mã nguồn bằng Trình bổ trợ Android cho Gradle 8.4 trở lên. (b/368070326, b/371463741)
Phiên bản 2.8
Phiên bản 2.8.4
Ngày 13 tháng 11 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.4
. Phiên bản 2.8.4 bao gồm các thay đổi sau.
Tính năng mới
- Từ Navigation
2.9.0-alpha03
: Tính năng an toàn về kiểu điều hướng hiện hỗ trợ lớp giá trị dưới dạng tuyến hoặc dưới dạng loại đối số của tuyến (I9344a, b/374347483)
Sửa lỗi
- Từ Navigation
2.9.0-alpha01
: Giờ đây, việc cố gắng sử dụngNavController
đã từng làDESTROYED
sẽ gây raIllegalStateException
. (I520da, b/369616172)
Phiên bản 2.8.3
Ngày 16 tháng 10 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.3
. Phiên bản 2.8.3 bao gồm các thay đổi sau.
Tính năng mới
- Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đun
navigation-common
,navigation-runtime
vànavigation-compose
để giúp xác định mọi tuyến an toàn về kiểu không được chú thích chính xác bằng@Serializable
. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộngNavGraphBuilder
vàNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đun
navigation-common
,navigation-runtime
vànavigation-compose
để giúp xác định mọi tuyến an toàn về kiểu có đối số Enum không được chú thích chính xác bằng@Keep
. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộngNavGraphBuilder
vàNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Sửa lỗi
- Khắc phục vấn đề trong đó các quy tắc tìm lỗi mã nguồn mới được thêm vào
Navigation 2.8.*
sẽ gây ra lỗiObsolete custom lint check
khi cố gắng chạy công cụ tìm lỗi mã nguồn bằng Trình bổ trợ Android cho Gradle 8.4 trở lên. (I1be3d, b/368070326, b/371463741)
Lỗi đã biết
- Trình tìm lỗi mã nguồn Navigation sẽ gửi lỗi Kiểm tra tìm lỗi mã nguồn tuỳ chỉnh đã lỗi thời khi cố gắng chạy trình tìm lỗi mã nguồn bằng Lint 16 (AGP 8.7) trở lên. (b/371926651)
Phiên bản 2.8.2
Ngày 2 tháng 10 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.2
. Phiên bản 2.8.2 bao gồm các thay đổi sau.
Tính năng mới
- Tính năng An toàn về loại điều hướng hiện hỗ trợ các lớp Serializable bao gồm
Double
,Double?
,DoubleArray
,DoubleArray?
,List<Double>
vàList<Double>?
mà không yêu cầu bất kỳNavType
tuỳ chỉnh nào. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
Sửa lỗi
- Cải thiện thông báo lỗi khi Navigation không liên kết được đối số của tuyến với
NavType
, thông báo lỗi mới sẽ chứa tên đối số, tên đủ điều kiện của đối số và tên đủ điều kiện của tuyến. (Id8416, b/346264232)
Phiên bản 2.8.1
Ngày 18 tháng 9 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.1
. Phiên bản 2.8.1 bao gồm các thay đổi sau.
Tính năng mới
- Thêm một quy tắc tìm lỗi mã nguồn mới để đảm bảo việc sử dụng hàm
popBackStack
lấy một loại lớp được tái cấu trúc khi cố gắngpopBackStack
bằng các API an toàn về kiểu. (Ief161, b/358095343)
Sửa lỗi
- Navigation hiện yêu cầu tuyến đường được truyền đến
startDestination
củaNavGraph
phải chứa các giá trị cho tất cả đối số bắt buộc, bao gồm cả các đối số không thể rỗng và không có giá trị mặc định. (I18e74, b/362594265) - Navigation safe args đã thêm tính năng hỗ trợ cho các chuỗi không rỗng, nhờ đó các giá trị "rỗng" sẽ được phân tích cú pháp và lưu trữ vào gói như hiện có. Điều này khác với hành vi hiện tại, trong đó các giá trị "rỗng" được phân tích cú pháp thành một đối tượng rỗng. Thay đổi này chỉ áp dụng cho các loại Chuỗi không rỗng. Chuỗi rỗng vẫn giữ nguyên. (I08b4a, b/348936238)
- Bạn không thể liên kết sâu vào
NavDestination
nữa, ngoại trừ thông qua một đường liên kết sâu được thêm vào đích đến một cách rõ ràng. Điều này cũng có nghĩa là bạn chỉ có thể điều hướng đến tuyến của một đích đến bằng cách nạp chồng hàm điều hướng lấy một tuyến chuỗi. Điều này giúp khắc phục một lỗ hổng có thể tạo ra đường liên kết sâu đến một đích đến có thể được bảo vệ. (Ie30e6)
Cập nhật về phần phụ thuộc
- Navigation Safe Args hiện phụ thuộc vào Kotlin 1.9.24 thay vì Kotlin 2.X, đảm bảo rằng nhà phát triển không bị buộc phải cập nhật. (a4129a)
- Navigation Compose hiện phụ thuộc vào Compose
1.7.2
.
Phiên bản 2.8.0
Ngày 4 tháng 9 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0
. Phiên bản 2.8.0 bao gồm các thay đổi sau.
Các thay đổi quan trọng kể từ phiên bản 2.7.0
An toàn về kiểu trong Navigation Kotlin DSL
- Giờ đây, tính năng Điều hướng cung cấp tính năng an toàn về kiểu cho Kotlin DSL (do Navigation Compose sử dụng) bằng cách sử dụng tính năng chuyển đổi tuần tự Kotlin để cho phép bạn xác định các đích đến trong biểu đồ điều hướng thông qua các đối tượng và lớp dữ liệu an toàn về kiểu:
// 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)
}
}
Hãy xem bài đăng trên blog về việc Navigation Compose đáp ứng tính năng An toàn về kiểu để biết thêm thông tin.
Tính năng dự đoán thao tác quay lại trong Navigation Compose
- Navigation Compose hiện hỗ trợ tính năng Xem trước thao tác quay lại trong ứng dụng thông qua các API
SeekableTransitionState
mới từ compose-animation. Điều này cho phép bạn sử dụng cử chỉ quay lại để xem đích đến trước đó bằng Hiệu ứng chuyển đổi tuỳ chỉnh trước khi quyết định thực hiện giao dịch thông qua cử chỉ đã hoàn tất hoặc huỷ.
Thành phần kết hợp mảnh điều hướng
- Thêm một cấu phần phần mềm
navigation-fragment-compose
mới bao gồm mộtComposableNavHostFragment
thay thế choNavHostFragment
cho phép bạn thêm các đích đến có thể kết hợp vào tệp XML Điều hướng. Mỗi đích đếncomposable
phải được biểu thị dưới dạng phương thức@Composable
cấp cao nhất, không có đối số, tên đủ điều kiện được dùng làm thuộc tínhandroid:name
trên mỗi đích đến. Khi điều hướng đến một trong các đích đến này, một mảnh chứa sẽ được tạo để hiển thị nội dung có thể kết hợp.
// 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" />
Các thay đổi khác
- Navigation Compose hiện phụ thuộc vào Compose 1.7.0.
- Navigation hiện cung cấp một lớp
CollectionNavType<T>
mới, một lớp con củaNavType<T>
cho các đối số dựa trên tập hợp như danh sách, mảng, bản đồ. Tất cả các mảngNavType
mặc định (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
vàStringArrayType
) hiện kế thừa từ lớp mới này. NavType
hiện đã tích hợp tính năng hỗ trợ cho Danh sách các loại Int, String, Boolean, Float và Long.
Phiên bản 2.8.0-rc01
Ngày 21 tháng 8 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-rc01
. Phiên bản 2.8.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố điều hướng khi truyền các lớp Enum cấp cao nhất dưới dạng đối số an toàn về kiểu. (I0ba76, b/358137294)
- Navigation 2.8 hiện hoạt động chính xác với SDK 34 và sẽ không chuyển sang SDK 35 cho đến khi phát hành phiên bản 2.9 cùng với các thư viện AndroidX còn lại. (b/358798728)
Phiên bản 2.8.0-beta07
Ngày 7 tháng 8 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta07
. Phiên bản 2.8.0-beta07 bao gồm các thay đổi sau.
Lỗi đã biết
- Do b/358137294, chỉ các Enums lồng trong một lớp khác mới được hỗ trợ ngay từ đầu. Enums cấp cao nhất sẽ được hỗ trợ trong bản phát hành tiếp theo.
Sửa lỗi
- Khi điều hướng đến các đích đến trùng lặp hoặc dùng chung, tính năng điều hướng sẽ ưu tiên chuyển đến đích đến phù hợp nhất gần nhất từ vị trí hiện tại trong biểu đồ. (Ic89a4, b/352006850)
- Tính năng điều hướng trong safe args hiện đã thêm một
NavType.EnumType
mới. Điều này có nghĩa là các loạiEnum
không còn yêu cầuNavType
tuỳ chỉnh nữa. Lưu ý rằngSerialName
củaEnum
phải là tên đủ điều kiện mặc định. (I66d22, b/346475493) - Tính năng điều hướng trong safe args đã thêm tính năng hỗ trợ tích hợp cho các loại đối số rỗng,bao gồm
Int?
,Long?
,Float?
,Boolean?
vàEnum<*>?
. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) startDestination
củaNavGraph
hiện sẽ sử dụng các giá trị đối số mặc định nếu tuyến đườngstartDestination
được truyền đếnNavGraph
bằng chính xácstartDestination.route
. (I13762, b/354046047)
Phiên bản 2.8.0-beta06
Ngày 24 tháng 7 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta06
. Phiên bản 2.8.0-beta06 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề trong đó tính năng kiểm tra tìm lỗi mã nguồn
WrongStartDestinationType
không kiểm tra các đối tượng Đồng hành trên loại lớp đã truyền, khiến tính năng tìm lỗi mã nguồn không phát hiện được lỗi. (I92b09)
Phiên bản 2.8.0-beta05
Ngày 10 tháng 7 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta05
. Phiên bản 2.8.0-beta05 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố điều hướng
singleTop
khiNavGraphs
lồng nhau dùng chung một tuyếnstartDestination
. (I17b94, b/294408596)
Phiên bản 2.8.0-beta04
Ngày 26 tháng 6 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta04
. Phiên bản 2.8.0-beta04 bao gồm các thay đổi sau.
Sửa lỗi
- Navigation hiện hỗ trợ điều hướng bằng chuỗi trống trong đối số đường dẫn. (Ic5dbd, b/339481310)
- Cải thiện thông báo lỗi cho trình chuyển đổi tuần tự tuỳ chỉnh được khai báo trực tiếp trên các trường lớp thông qua
@Serializable(with =...)
để làm rõ rằng đây hiện là một tính năng không được hỗ trợ. (I052b0, b/341319151) - Giờ đây, bạn có thể sử dụng API kiểm thử
SavedStateHandleFactory
trong các bài kiểm thử không phải Android, nhưng sẽ yêu cầu Robolectric hỗ trợ phân tích cú pháp đối số bằng Gói. (I76cdc, b/340966212) - Khắc phục sự cố khi khôi phục trạng thái khi tiếp tục ứng dụng sau khi quá trình bị gián đoạn bằng cách sử dụng tính năng Điều hướng an toàn về loại trong Compose. (Ia8f38, b/341801005)
- Khắc phục vấn đề trong Navigation Compose, trong đó sau khi huỷ Cử chỉ quay lại dự đoán,
NavBackStackEntry
mà người dùng quay lại sẽ không bao giờ quay lại Trạng thái vòng đờiRESUMED
. Điều này cũng đảm bảo đích đến trả về tạo ảnh động chính xác thay vì bật vào vị trí sau khi hất. (I97a0c, b/346608857) - Khi sử dụng tính năng Dự đoán thao tác quay lại với Navigation Compose, đích đến đang bật lên hiện sẽ có thứ tự z thích hợp, tạo ảnh động chính xác trên đích đến sắp tới. (I2077b, b/345993681)
Phiên bản 2.8.0-beta03
Ngày 12 tháng 6 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta03
. Phiên bản 2.8.0-beta03 bao gồm các thay đổi sau.
Thay đổi về API
CollectionNavType
có một phương thứcemptyCollection()
trừu tượng mới. Ghi đè phương thức này để xử lý một bộ sưu tập trống được truyền vào dưới dạng đối số. (Ie4d84, b/341723133)
Sửa lỗi
- Thêm tài liệu về
NavType.serializeAsValue
vàserializeAsValues
để làm nổi bật rằng đầu ra cuối cùng phải được mã hoá Uri. (Ida6bd, b/344943214) - Khắc phục sự cố khi gọi
toRoute<T>
bằng đối sốCollectionNavType
rỗng. Khi điều hướng bằngCollectionNavType
rỗng, đối số đầu ra sẽ là giá trị mặc định được khai báo trên lớp Serializable hoặc giá trị trả về củaemptyCollection()
nếu không có giá trị mặc định. (I84158, Id630f, b/342672856)
Phiên bản 2.8.0-beta02
Ngày 29 tháng 5 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta02
. Phiên bản 2.8.0-beta02 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố
ClassCastException
khi sử dụngNavBackStackEntry.toRoute
vớiNavType
tuỳ chỉnh có thể nhận giá trị rỗng. (I1c29b, b/342239473) - Khắc phục các vấn đề khôi phục trạng thái ngăn xếp lui của Navigation xảy ra khi cố gắng khôi phục mục nhập ngăn xếp lui không thể truy cập được qua mã nhận dạng từ đích hiện tại. Vì các tuyến đường được hỗ trợ bằng mã nhận dạng, nên các đích đến được tạo bằng tuyến đường cũng bị ảnh hưởng. Điều này cũng khắc phục sự cố do gọi
clearBackStack()
có cùng vấn đề cơ bản. (I423c3, b/339908057)
Phiên bản 2.8.0-beta01
Ngày 14 tháng 5 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-beta01
. Phiên bản 2.8.0-beta01 bao gồm các thay đổi sau.
Thay đổi về API
SavedStateHandle.toRoute()
hiện nhận tham sốtypeMap
cho các loại đối số tuỳ chỉnh. (Ie39fb, b/339026523)- Thêm API kiểm thử vào
navigation-testing
để tạoSavedStateHandle
từ đối tượng Serializable của Kotlin. (Id4867, b/339080702)
Sửa lỗi
- Thêm tài liệu về tham số bị thiếu cho các hàm Navigation Kotlin DSL. (I26a36)
Phiên bản 2.8.0-alpha08
Ngày 1 tháng 5 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha08
. Phiên bản 2.8.0-alpha08 bao gồm các thay đổi sau.
Safe Args trong Navigation Compose
- Chúng tôi đã hoàn tất công việc hỗ trợ tính năng an toàn về kiểu tại thời điểm biên dịch cho Navigation Compose và người dùng Navigation Kotlin DSL dựa trên tính năng chuyển đổi tuần tự Kotlin. Các API thử nghiệm trước đây hiện đã ổn định. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
Chức năng này sử dụng tính năng Chuyển đổi tuần tự Kotlin để cho phép bạn xác định đích đến trong biểu đồ điều hướng thông qua các đối tượng an toàn về kiểu và lớp dữ liệu:
// 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)
}
}
Hãy xem bài đăng trên blog về việc Navigation Compose đáp ứng tính năng An toàn về kiểu để biết thêm thông tin.
Tính năng mới
- Cấu phần phần mềm
navigation-fragment-compose
hiện cung cấp một thành phần kết hợpLocalFragment
cục bộ cho các phương thức có khả năng kết hợp trongComposableFragment
. (If35e5) NavType
hiện đã tích hợp tính năng hỗ trợ cho Danh sách các loại Int, String, Boolean, Float và Long. (I4b6dd, Ia914c, b/188693139)
Phiên bản 2.8.0-alpha07
Ngày 17 tháng 4 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha07
. Phiên bản 2.8.0-alpha07 bao gồm các thay đổi sau.
Tính năng mới
Thêm một cấu phần phần mềm
navigation-fragment-compose
mới bao gồm mộtComposableNavHostFragment
thay thế choNavHostFragment
cho phép bạn thêm đíchcomposable
vào tệp XML điều hướng. Mỗi đích đếncomposable
phải được biểu thị dưới dạng phương thức@Composable
cấp cao nhất, không có đối số, tên đủ điều kiện được dùng làm thuộc tínhandroid:name
trên mỗi đích đến. Khi điều hướng đến một trong các đích đến này, một mảnh chứa sẽ được tạo để hiển thị nội dung có thể kết hợp. (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" />
Thay đổi về API
- Tiếp tục hỗ trợ Safe Args trong Navigation Compose bằng cách sử dụng phương pháp dựa trên quá trình chuyển đổi tuần tự Kotlin. Các API này chưa hoàn tất và được đánh dấu bằng chú giải
ExperimentalSafeArgsApi
. Chú thích này sẽ bị xoá khi toàn bộ giao diện API hoàn tất trong một bản phát hành trong tương lai. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
Phiên bản 2.8.0-alpha06
Ngày 3 tháng 4 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha06
. Phiên bản 2.8.0-alpha06 bao gồm các thay đổi sau.
Thay đổi về API
- Chúng tôi đã bắt đầu hỗ trợ Safe Args trong Navigation Compose bằng cách sử dụng phương pháp dựa trên tính năng chuyển đổi tuần tự Kotlin. Các API này chưa hoàn tất và được đánh dấu bằng chú giải
ExperimentalSafeArgsApi
. Chú thích này sẽ bị xoá khi toàn bộ giao diện API hoàn tất trong một bản phát hành trong tương lai. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
Sửa lỗi
NavHost
hiện sử dụngAlignment.TopStart
làm đối số contentAlignment mặc định. Điều này phù hợp với giá trị mặc định choAnimatedContent
và khắc phục một số trường hợp tỷ lệ không mong muốn từ quá trình chuyển đổi trung tâm. (I09e72, b/330111602)- Khi vuốt cử chỉ xem trước thao tác quay lại trong khi sử dụng Navigation Compose,
NavHost
hiện sẽ hoàn tất chính xác quá trình chuyển đổi tuỳ chỉnh thay vì kết thúc ngay lập tức. (I99017, b/327292110)
Phiên bản 2.8.0-alpha05
Ngày 20 tháng 3 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha05
. Phiên bản 2.8.0-alpha05 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, bạn có thể truyền các đối số đến
startDestination
củaNavGraph
ngay trong tuyếnstartDestination
mà không cần dựa vàodefaultValue
. Điều này cũng áp dụng choNavGraph
startDestinations
lồng nhau. (I0e0b5, b/109505019, b/188693139)
Thay đổi về API
- Thêm lớp
CollectionNavType<T>
trừu tượng mới, một lớp con củaNavType<T>
cho các đối số dựa trên tập hợp như danh sách, mảng, bản đồ. (Ic6d63, b/188693139) - Tất cả các mảng
NavType
mặc định (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
vàStringArrayType
) hiện thuộc loạiCollectionNavType
(Idcf79, b/188693139) NavType
hiện cung cấp một APIvalueEquals
mở mới giúp xác định xem hai giá trị thuộc cùng một loại có bằng nhau hay không. (I6cb97, b/327229511)
Sửa lỗi
- Các tham số truy vấn trong đường liên kết sâu hiện cho phép các giá trị ở dạng dấu ngoặc nhọn xung quanh tên đối số (tức là
{argName}
) dưới dạng giá trị hợp lệ choNavTypes
dựa trên chuỗi. Điều này giúp khắc phục vấn đề khi một giá trị như vậy được coi là không hợp lệ (hoặc không có giá trị) đối với tất cả các loại. (I18302, b/327274038) - Các hàm
NavController
hỗ trợ các tuyến nhưnavigate
hoặcpopBackStack
hiện có thể so khớp chính xác các tuyến được điền bằng đối số của MảngNavTypes
. (Iea805, b/327229511)
Phiên bản 2.8.0-alpha04
Ngày 6 tháng 3 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha04
. Phiên bản 2.8.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, bạn có thể chỉ định
SizeTranform
cho các hiệu ứng chuyển đổi trong Navigation Compose bằng cách xác định các hiệu ứng đó trong quá trình khởi chạy cho hàmcomposable
và/hoặcnavigation
. (I91062, b/296912651)
Sửa lỗi
- Khắc phục vấn đề
NavHost
trong tính năng Điều hướng trong Compose không hiển thị đúng cách quá trình chuyển đổi khi sử dụng tính năng Quay lại hệ thống mà không có cử chỉ. (Iceeae, b/325998468)
Phiên bản 2.8.0-alpha03
Ngày 21 tháng 2 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha03
. Phiên bản 2.8.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
NavBackStackEntry.savedStateHandle
hiện được đánh dấu là@MainThread
vì dù sao thì lớp này cũng sử dụng mã bắt buộc phải nằm trên luồng chính. (Ibb988, b/299523245)
Sửa lỗi
- Khắc phục vấn đề trong Navigation khiến ViewModel
NavGraph
trở thànhDESTROYED
quá sớm vìViewModel
của mục nhập được liên kết không thuộc trạng thái đã lưu. (Ib6bb7, b/317581849)
Cập nhật về phần phụ thuộc
- Navigation Compose hiện phụ thuộc vào Compose 1.7.0-alpha03.
Phiên bản 2.8.0-alpha02
Ngày 7 tháng 2 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha02
. Phiên bản 2.8.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
- Navigation Compose hiện hỗ trợ tính năng Xem trước thao tác quay lại trong ứng dụng thông qua các API
SeekableTransitionState
mới từ compose-animation. Điều này cho phép bạn sử dụng cử chỉ quay lại để xem đích đến trước đó bằng Hiệu ứng chuyển đổi tuỳ chỉnh trước khi quyết định thực hiện giao dịch thông qua cử chỉ đã hoàn tất hoặc huỷ. (I8b8e9)
Phiên bản 2.8.0-alpha01
Ngày 24 tháng 1 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.0-alpha01
. Phiên bản 2.8.0-alpha01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố rò rỉ
BackStackState
trong đó nhiều lệnh gọisaveState
trên một đích đến sẽ dẫn đến việc lưu nhiều trạng thái, nhưng chỉ có thể khôi phục trạng thái đầu tiên. (I598b0, b/309559751) - Khắc phục vấn đề đối số không phải Chuỗi sẽ không hiển thị đúng cách khi sử dụng trình trợ giúp
NavigationUI
để điền tiêu đề của thanh ứng dụng. (#636, b/316676794)
Cập nhật về phần phụ thuộc
- Navigation Compose hiện phụ thuộc vào Compose
1.7.0-alpha01
để khắc phục vấn đề có thể gây ra hiệu ứng chuyển động theo tỷ lệ không mong muốn. (b/297258205)
Đóng góp bên ngoài
- Cảm ơn SimonMarquis đã khắc phục vấn đề hiển thị đối số không phải Chuỗi khi sử dụng trình trợ giúp
NavigationUI
để điền tiêu đề của thanh ứng dụng.
Phiên bản 2.7.7
Phiên bản 2.7.7
Ngày 7 tháng 2 năm 2024
Phát hành androidx.navigation:navigation-*:2.7.7
. Phiên bản 2.7.7 bao gồm các thay đổi sau.
Sửa lỗi
- Điều chỉnh cho phiên bản cũ từ Navigation
2.8.0-alpha01
: Khắc phục sự cố rò rỉBackStackState
trong đó nhiều lệnh gọisaveState()
trên mộtNavBackStackEntry
sẽ dẫn đến việc lưu nhiều trạng thái, nhưng chỉ có thể khôi phục trạng thái đã lưu đầu tiên. (I598b0, b/309559751) - Điều chỉnh đối với phiên bản cũ của Navigation
2.8.0-alpha01
: Khắc phục vấn đề đối số không phải Chuỗi sẽ không hiển thị đúng cách khi sử dụng trình trợ giúpNavigationUI
để điền tiêu đề của thanh ứng dụng. (#636, b/316676794)
Đóng góp bên ngoài
- Cảm ơn SimonMarquis đã khắc phục vấn đề hiển thị đối số không phải Chuỗi khi sử dụng trình trợ giúp
NavigationUI
để điền tiêu đề của thanh ứng dụng.
Phiên bản 2.7.6
Phiên bản 2.7.6
Ngày 13 tháng 12 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.6
. Phiên bản 2.7.6 bao gồm các thay đổi sau.
Sửa lỗi
- Hàm
NavGraph
equals()
hiện xem xét chính xác các nút của biểu đồ khác thay vì chỉ xem xét nút gọi. Điều này sẽ đảm bảo rằng các biểu đồ có các nút có mã nhận dạng khác nhau sẽ không còn được coi là bằng nhau (I401cb, b/311414915)
Phiên bản 2.7.5
Phiên bản 2.7.5
Ngày 1 tháng 11 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.5
. Phiên bản 2.7.5 bao gồm các thay đổi sau.
Cải tiến hiệu suất
- Cải thiện đáng kể hiệu suất (cả về thời gian và số lượt phân bổ) khi so sánh hai biểu đồ. Điều này có nghĩa là các lệnh gọi như
setGraph
so sánh nội bộ biểu đồ mới với biểu đồ hiện có sẽ nhanh hơn nhiều và dẫn đến ít khung hình bị bỏ qua hơn. Cảm ơn Michał Z đã phân tích kỹ lưỡng để giúp cải thiện vấn đề này. (I6ad62) NavHost
hiện sẽ hiển thị đích bắt đầu trên lượt truyền thành phần đầu tiên thay vì cần đợi lượt truyền thứ hai để đọc trạng thái đã cập nhật. (I439a7, b/304852206)
Sửa lỗi
- Khắc phục vấn đề ngăn xếp lui sẽ bật lên nếu bạn gọi
setGraph
nhiều lần với cùng một biểu đồ chỉ khi có một đích đến trong biểu đồ chứa một thao tác liên kết hai đích đến. (Ieaed7) - Các hộp thoại được điều hướng đến và đóng liên tiếp sẽ không còn rò rỉ vào danh sách
NavController.visibleEntries
nữa. (I67586, b/287969970) - Khi một mục được đẩy lên, sau đó là một thay đổi về cấu hình,
ViewModel
của mục đó hiện sẽ được xoá đúng cách nếusaveState
là sai. (Idf242, b/298164648) - Khắc phục lỗi
NavController
có thể xử lý cùng một đường liên kết sâu nhiều lần nếu ngăn xếp lui hoàn toàn trống trước khi thay đổi cấu hình hoặc chỉ gọi đếnsetGraph
khi Ý định đến đã đặt cờFLAG_ACTIVITY_NEW_TASK
. (I73c7f)
Thông tin cập nhật về phần phụ thuộc
- Giờ đây, tính năng Điều hướng bằng Mảnh phụ thuộc vào Fragment 1.6.2, khắc phục vấn đề các thực thể
ViewModel
của các mảnh lồng nhau sẽ không bị xoá khi gọiclearBackStack
.
Phiên bản 2.7.4
Phiên bản 2.7.4
Ngày 4 tháng 10 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.4
. Phiên bản 2.7.4 bao gồm các thay đổi sau.
Tính năng mới
- Thêm tính năng hỗ trợ cho
popUpTo
để sử dụng các tuyến đường có đối số cho phép quay lại một mục cụ thể sử dụng chính xác các đối số đó, khớp với tính năng hỗ trợ có trongpopBackStack
. (I731f4, b/299255572)
Sửa lỗi
- Khắc phục vấn đề khi việc gián đoạn thao tác điều hướng bằng một thao tác điều hướng khác bằng
popUpTo
sẽ khiếnFragmentNavigator
gặp sự cố. (I3c848, b/301887045) - Khắc phục vấn đề khi nhấn nút quay lại của hệ thống khiến
currentDestination
không được cập nhật chính xác để khớp với Mảnh hiển thị. (Id0d6c, b/289877514) - Vòng đời
DialogFragment
hiện sẽ chuyển sang trạng tháiRESUMED
đúng cách khi hộp thoại phía trên bị đóng. (I88f0d, b/301811387)
Phiên bản 2.7.3
Phiên bản 2.7.3
Ngày 20 tháng 9 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.3
. Phiên bản 2.7.3 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề trong tính năng Điều hướng bằng Mảnh khiến danh sách
visibleEntries
chứa các mục nhập không chính xác. (I5caa9, b/288520638) - Khắc phục vấn đề khiến đích đến Cửa sổ nổi (tức là
Dialogs
,Bottomsheets
, v.v.) không bao giờ nhận được lệnh gọi lại Vòng đờiRESUMED
. (I3b866, b/287505132)
Phiên bản 2.7.2
Phiên bản 2.7.2
Ngày 6 tháng 9 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.2
. Phiên bản 2.7.2 bao gồm các thay đổi sau.
Sửa lỗi
- Navigation hiện phụ thuộc vào Lifecycle
2.6.2
, khắc phục sự tương tác giữarememberSaveable
vàNavHost
của Navigation Compose, điều này sẽ khiến trạng tháirememberSaveable
của đích đến và mọi bản saoSavedStateHandle
thuộc sở hữu củaViewModel
không được khôi phục đúng cách sau khi quá trình bị gián đoạn và tạo lại. (b/298059596, b/289436035) - Khắc phục vấn đề khi hiển thị đồng thời nhiều hộp thoại trong Navigation Compose, trong đó các hộp thoại bị che khuất một phần (ví dụ: không phải hộp thoại trên cùng) sẽ ở trạng thái Vòng đời
CREATED
thay vì trạng tháiSTARTED
. (aosp/2728520, b/289257213) - Khắc phục vấn đề khi hiển thị đồng thời nhiều hộp thoại trong Navigation Compose, trong đó việc đóng hộp thoại trên cùng sẽ khiến hộp thoại trên cùng mới bị kẹt ở trạng thái Vòng đời
STARTED
thay vì chuyển chính xác sangRESUMED
. (aosp/2629401, b/286371387) - Navigation Safe Args không còn tạo bản sao cho tác vụ của nó nếu tác vụ đó không thực sự được thực thi. (I0e385, b/260322841)
Cập nhật về phần phụ thuộc
- Navigation Compose hiện phụ thuộc vào Compose 1.5.1.
Phiên bản 2.7.1
Phiên bản 2.7.1
Ngày 23 tháng 8 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.1
. Phiên bản 2.7.1 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề trong Navigation with Compose (Điều hướng bằng Compose) khi sử dụng
Scaffold
, có thể gặp lỗi khi cố gắng truy cập vàoLifecycle.State.DESTROYED
ViewModel
. (I1dc11, b/268422136)
Phiên bản 2.7.0
Phiên bản 2.7.0
Ngày 9 tháng 8 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.0
. Phiên bản 2.7.0 bao gồm các thay đổi sau.
Các thay đổi quan trọng kể từ phiên bản 2.6.0
Ảnh động của Accompanist
Giờ đây, khi AnimatedContent
đã ổn định, chúng ta có thể di chuyển mã từ Accompanist Navigation Animation (Ảnh động điều hướng đi kèm) trở lại chính Navigation Compose.
Điều này có nghĩa là tất cả các tính năng hỗ trợ việc đặt hiệu ứng chuyển đổi tuỳ chỉnh có trong AnimatedNavHost
đều được hỗ trợ trực tiếp trong NavHost
.
Chúng tôi sẽ không thực hiện thêm thay đổi nào đối với Ảnh động điều hướng của Accompanist và sẽ sớm ngừng sử dụng tính năng này cùng với hướng dẫn về cách di chuyển trở lại Navigation Compose. Tuy nhiên, việc này sẽ ngược lại với hướng dẫn di chuyển và bạn không cần thực hiện thay đổi nào khác đối với API nếu đang sử dụng phiên bản alpha mới nhất của Accompanist (0.31.2-alpha
). (b/197140101)
Sửa lỗi
- NavHost trong Navigation Compose hiện chặn chính xác các lệnh gọi quay lại hệ thống ngay cả sau khi Hoạt động đã DỪNG và TIẾP TỤC. (Icb6de, b/279118447)
Thông tin cập nhật về phần phụ thuộc
- Hiện tại, Navigation phụ thuộc vào Compose
1.5.0
trở lên từ1.1.0
.
Phiên bản 2.7.0-rc01
Ngày 26 tháng 7 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.0-rc01
. Phiên bản 2.7.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề các hàm lambda
EnterTransition
vàExitTransition
được tạo trongNavHost
có thể vẫn còn trong bộ nhớ ngay cả sau khiNavHost
bị xoá khỏi thành phần. (I893d0)
Lỗi đã biết
- Có một vấn đề từ Navigation 2.6.x là khi điều hướng bằng popUpTo, có thể gây ra
IllegalArgumentException
. Bạn có thể tránh ngoại lệ này bằng cách tái cấu trúc biểu đồ, tương tự như lời khuyên được đề xuất tại đây. (b/287133013)
Phiên bản 2.7.0-beta02
Ngày 28 tháng 6 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.0-beta02
. Phiên bản 2.7.0-beta02 bao gồm các thay đổi sau.
Sửa lỗi
- Navigation Compose hiện có thứ tự z phù hợp cho các hiệu ứng chuyển đổi tuỳ chỉnh sử dụng tính năng điều hướng bằng tuỳ chọn
popUpTo
.(/Ib1c3a, b/285153947)
Phiên bản 2.7.0-beta01
Ngày 7 tháng 6 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.0-beta01
. Phiên bản 2.7.0-beta01 bao gồm các thay đổi sau.
Sửa lỗi
NavHost
trong Navigation Compose hiện chặn chính xác các lệnh gọi quay lại hệ thống ngay cả sau khiActivity
đã làSTOPPED
vàRESUMED
. (Icb6de, b/279118447)
Phiên bản 2.7.0-alpha01
Ngày 24 tháng 5 năm 2023
Phát hành androidx.navigation:navigation-*:2.7.0-alpha01
. Phiên bản 2.7.0-alpha01 bao gồm các thay đổi sau.
Ảnh động của Accompanist
Giờ đây, khi AnimatedContent
đã ổn định, chúng ta có thể di chuyển mã từ Accompanist Navigation Animation (Ảnh động điều hướng đi kèm) trở lại chính Navigation Compose.
Điều này có nghĩa là tất cả các tính năng hỗ trợ việc đặt hiệu ứng chuyển đổi tuỳ chỉnh có trong AnimatedNavHost
đều được hỗ trợ trực tiếp trong NavHost
.
Chúng tôi sẽ không thực hiện thêm thay đổi nào đối với Ảnh động điều hướng của Accompanist và sẽ sớm ngừng sử dụng tính năng này cùng với hướng dẫn về cách di chuyển trở lại Navigation Compose. Tuy nhiên, việc này sẽ ngược lại với hướng dẫn di chuyển và bạn không cần thực hiện thay đổi nào khác đối với API nếu đang sử dụng phiên bản alpha mới nhất của Accompanist (0.31.2-alpha
). (b/197140101)
Sửa lỗi
- Trên Navigation
2.6.0-rc02
: Khắc phục vấn đề với Navigation trong Fragment, trong đó việc điều hướng bằngpopUpTo
và bật một mảnh ra khỏi ngăn xếp lui mà không tạo lại chế độ xem của mảnh đó sẽ khiến hệ thống quay lại ngừng hoạt động. (Ieb8d4, b/281726455)
Thông tin cập nhật về phần phụ thuộc
- Hiện tại, Navigation phụ thuộc vào Compose
1.5.0-beta01
.
Phiên bản 2.6.0
Phiên bản 2.6.0
Ngày 7 tháng 6 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0
. Phiên bản 2.6.0 bao gồm các thay đổi sau.
Các thay đổi quan trọng đối với Navigation kể từ phiên bản 2.5.0
arguments
củaNavBackStackEntry
vàarguments
được chuyển đếnOnDestinationChangedListener
hiện chỉ là bản sao của các đối số không thể thay đổi được tạo khi bạn điều hướng đến đích đến. Điều này có nghĩa là mọi thay đổi đối với các Gói đó sẽ không được cập nhật trong các lần truy cập tiếp theo vàoarguments
hoặc các thực thể khác củaOnDestinationChangedListener
.NavDeepLink
hiện hỗ trợ giá trị mặc định cho các mảng, nhờ vậy mà có thể hỗ trợ các tham số truy vấn lặp lại (ánh xạ đến loại mảng của đối số). Giờ đây,NavType
cũng bao gồm cả một phương thức mặc định có thể được ghi đè để kết hợp 2 giá trị đã phân tích cú pháp.- Giờ đây, các lớp con tuỳ chỉnh của
NavType
có thể ghi đèserializeAsValue
để chuyển đổi tuần tự một giá trị thành một String (chuỗi), cho phép đóng gói hoàn toàn quá trình chuyển đổi tuần tự và huỷ chuyển đổi tuần tự (thông quaparseValue
) trong lớpNavType
.StringType
hiện ghi đè phương thức này để gọiUri.encode
trênString
đã cho.
Các thay đổi quan trọng đối với Navigation Compose kể từ phiên bản 2.5.0
- Theo mặc định, khi xem trước một thành phần kết hợp bằng
NavHost
, thành phần này sẽ hiệnstartDestination
của NavGraph. NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
hiện đều hỗ trợ các tuyến có đối số được điền một phần hoặc toàn bộ. Lưu ý rằng các đối số này phải khớp chính xác với đối số của mục nhập.- Giờ đây, việc cố gắng tạo một
NavDeepLink
trống bằng cách sử dụng Kotlin DSLnavDeepLink
sẽ dẫn đến cảnh báo Lint (tìm lỗi mã nguồn) cho biết rằng đường liên kết sâu cần có URI, hành động và/hoặc loại mime thì mới hợp lệ.
Các thay đổi quan trọng đối với Navigation với Fragment kể từ phiên bản 2.5.0
NavHostFragment
không còn tự chặn nút quay lại của hệ thống. Điều này cho phépFragmentManager
cơ bản xử lý thao tác quay lại hệ thống. Điều này cho phép Mảnh1.7.0-alpha01
trở lên cung cấp ảnh động Xem trước thao tác quay lại trong ứng dụng trên các thiết bị Android U.- Khi sử dụng Navigation với các Fragment, việc cố gắng thực hiện
FragmentTransaction
theo cách thủ công để thêm một mảnh vào ngăn xếp lui củaFragmentManager
sẽ gửi mộtIllegalArgumentException
. Bạn phải luôn thêm các mảnh thông qua APInavigate()
. - Khi sử dụng
${applicationId}
ở dạng chuỗi chính xác làm phần giữ chỗ trong thuộc tínhapp:data
vàapp:dataPattern
trong phần tử hoạt động của tệp XML điều hướng, phần giữ chỗ sẽ tự động được điền bằngpackageName
của ngữ cảnh khi tăng cường. FragmentNavigator
hiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries
. Tức là giờ đây,NavBackStackEntry
Lifecycle
sẽ đợi các hiệu ứng đặc biệt của mảnh vào và thoát hoàn tất trước khi di chuyểnLifecycle.State
cuối cùng.DialogFragmentNavigator
hiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries
. Tức là giờ đây,NavBackStackEntry
Lifecycle
sẽ chờDialogFragment
Lifecycle
chuyển sangDESTROYED
trước khi chuyển sang chínhDESTROYED
.NavHostFragment
nay cho phép bạn truy xuấtNavController
ngay khiNavHostFragment
được đính kèm vàoFragmentManager
, thay vì chỉ sauonCreate()
.- Khả năng hỗ trợ của Điều hướng cho Mô-đun có tính năng động hiện phụ thuộc vào Thư viện Play Feature Delivery chi tiết.
- Trình bổ trợ Navigation Safe Args hiện phụ thuộc vào trình bổ trợ Android cho Gradle, phiên bản 7.3.0. Do đó, trình bổ trợ này hiện chỉ tương thích với các phiên bản từ 7.3.0 trở lên.
Các thay đổi quan trọng đối với NavigationUI kể từ phiên bản 2.5.0
- Khi chuyển mã nhận dạng của biểu đồ điều hướng sang
AppBarConfiguration
(chẳng hạn như quaMenu
),NavigationUI
hiện chỉ coi đích đến bắt đầu của biểu đồ điều hướng đó là đích đến cấp cao nhất, thay vì đánh dấu không chính xác từng đích đến trong biểu đồ dưới dạng đích đến cấp cao nhất. Hành vi chuyển mã nhận dạng của từng đích đến là không thay đổi. Chức năng tương tự này hiện cũng có cho mã của chính bạn thông qua hàmisTopLevelDestination
mới trênAppBarConfiguration
. - Việc tích hợp
setupWithNavController
trongNavigationUI
để thao tác với thanh ứng dụng ở trên cùng hiện sẽ phân tích cú pháp các giá trịR.string
cho đối sốReferenceType
có trongandroid:label
thành các giá trị Chuỗi thay vì xuất số nguyên tài nguyên được tạo tự động. NavigationUI
hiện cung cấp nhật ký khi không thao tác được quaMenuItem
đã chọn.
Phiên bản 2.6.0-rc02
Ngày 24 tháng 5 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-rc02
. Phiên bản 2.6.0-rc02 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề với tính năng Điều hướng trong Mảnh, trong đó việc điều hướng bằng
popUpTo
và bật một mảnh ra khỏi ngăn xếp lui mà không tạo lại chế độ xem của mảnh đó sẽ khiến tính năng quay lại của hệ thống ngừng hoạt động. (Ieb8d4, b/281726455)
Phiên bản 2.6.0-rc01
Ngày 10 tháng 5 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-rc01
. Phiên bản 2.6.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề trong Navigation với các mảnh, trong đó việc xoá một mảnh thông qua thao tác điều hướng bằng
popUpTo
trong lệnh gọi lại vòng đờionResume()
sẽ gây raIllegalStateException
. (I21884, b/279644470)
Phiên bản 2.6.0-beta01
Ngày 19 tháng 4 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-beta01
. Phiên bản 2.6.0-beta01 bao gồm các thay đổi sau.
Tính năng mới
NavBackStackEntry
hiện cung cấp cách triển khaitoString
tuỳ chỉnh. (Iff00b)
Sửa lỗi
- Khi sử dụng Navigation với các Fragment, việc cố gắng thực hiện
FragmentTransaction
theo cách thủ công để thêm một mảnh vào ngăn xếp lui củaFragmentManager
sẽ gửi mộtIllegalArgumentException
. Bạn phải luôn thêm các mảnh thông qua APInavigate()
. (I6d38e) - Khi có một
navigate
thêm một mục và mộtpopBackStack
xoá mục đó trong cùng một khung, thì mục trên cùng thu được trên ngăn xếp lui hiện sẽ luôn đưa mục đó trở lạiRESUMED
Lifecycle.State
. (Id8067, b/276495952)
Phiên bản 2.6.0-alpha09
Ngày 5 tháng 4 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-alpha09
. Phiên bản 2.6.0-alpha09 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục các bước kiểm tra tuyến không hợp lệ, chẳng hạn như nếu
NavDestination
chứaNavArgument
không thể nhận giá trị rỗng, thì tuyến của đích đến này phải chứa phần giữ chỗ cho các đối số có tên giống vớiNavArgument
không thể nhận giá trị rỗng. (Ic62bf, b/274697949) - Giờ đây, thao tác điều hướng đường liên kết sâu dựa trên
Action/MimeType
sẽ không thành công nếu thao tác điều hướng thiếuNavArgument
không thể nhận giá trị rỗng màNavDestination
yêu cầu vàAction/MimeType
khớp vớiNavDestination
đó. (Ibfa17, b/271777424) - Khi
NavController
đặt một biểu đồ có cùng tuyến đường và đích đến với biểu đồ trước, giờ đây, biểu đồ này sẽ thay thế đúng cách các nút biểu đồ hiện tại và đích đến ngăn xếp lui bằng các thực thể mới. Thao tác này sẽ khắc phục sự cố khi sử dụngonLaunchSingleTop
mà không lưu trạng thái trong Navigation Compose. Điều này cũng khắc phục lỗi điều hướng đến các đích đến liên kết với bản dựng biểu đồ gốc và ngăn xếp lui không chính xác. (I5bc58, b/275258161, b/275407804)
Phiên bản 2.6.0-alpha08
Ngày 22 tháng 3 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-alpha08
. Phiên bản 2.6.0-alpha08 bao gồm các thay đổi sau.
Tính năng mới
NavHostFragment
nay cho phép bạn truy xuấtNavController
ngay khiNavHostFragment
được đính kèm vàoFragmentManager
, thay vì chỉ sauonCreate()
. (Ic6382, b/220186282)
Sửa lỗi
- Khắc phục
NullPointerException
khi bật một biểu đồ lồng nhau có chứa đối số không thể rỗng. (6b3581, b/249988437) - Khi sử dụng tính năng quay lại hệ thống sau khi điều hướng bằng
popUpTo
, trạng thái củaNavController
sẽ bật lên mục nhập chính xác. (I3a8ec, b/270447657) - Giờ đây,
FragmentNavigator
sẽ bật các mục nhập đúng cách khi ngăn xếp lui được bật lên thông qua thao tác quay lại hệ thống hoặcpopBackStack()
và liệu giao dịch có sử dụng hiệu ứng cho mảnh hay không. (I81bdf) - Việc thêm các mảnh vào
FragmentManager
củaFragmentNavigator
mà không sử dụng tính năng điều hướng sẽ không còn gây ra sự cố nữa. (b17204, b/274167493)
Thông tin cập nhật về phần phụ thuộc
- Hiện tại, Navigation phụ thuộc vào Vòng đời
2.6.1
. (586fe7) - Hiện tại, Navigation phụ thuộc vào SavedState
1.2.1
. (078e4e) - Hiện tại, Navigation phụ thuộc vào ProfileInstaller
1.3.0
. (512f0c)
Phiên bản 2.6.0-alpha07
Ngày 8 tháng 3 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-alpha07
. Phiên bản 2.6.0-alpha07 bao gồm các thay đổi sau.
Sửa lỗi
- Các biến thể API
getBackStackEntry
,popBackStack
,clearBackStack
nhận tuyến đường hiện nhận mẫu tuyến đường có đối số rỗng và tham số truy vấn rỗng (I22294, b/269302500) - Khắc phục vấn đề khi gọi
clearBackStack()
từNavController
sẽ không xoá trạng thái đã lưu trong trình quản lý mảnh liên kết với ngăn xếp lui đã xoá. (Ic1cce, b/271190202) - Khắc phục lỗi hồi quy trong phiên bản 2.6.0-alpha06 khiến
MenuItem
trongBottomNavigationView
bị làm nổi bật không chính xác khi sử dụng tính năng Quay lại hệ thống giữa các thẻ. (I634f6, b/270447657) - Khắc phục lỗi hồi quy trong phiên bản 2.6.0-alpha06 khiến
NavBackStackEntry
không được chuyển sang trạng thái RESUMED (ĐÃ TIẾP TỤC) khi sử dụngAnimation
. (Ib3589, b/269646882)
Phiên bản 2.6.0-alpha06
Ngày 22 tháng 2 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-alpha06
. Phiên bản 2.6.0-alpha06 bao gồm các thay đổi sau.
Tính năng mới
- Theo mặc định, khi xem trước một thành phần kết hợp bằng
NavHost
, thành phần này sẽ hiệnstartDestination
của NavGraph. (I2b89f)
Thay đổi về API
- Tất cả các phương thức nạp chồng
navigate
củaNavController
hiện đều được chú giải bằng@MainThread
để đảm bảo rằng những phương thức này được gọi trên luồng chính. (I2c0b0, b/263427111)
Sửa lỗi
- Khắc phục sự cố khi tìm cách điều hướng trong lúc dùng tính năng Điều hướng mảnh động. (I3ee29, b/268360479)
- Khắc phục lỗi xảy ra khi việc điều hướng đến một mảnh khác thông qua nút quay lại của hệ thống không cập nhật thanh dưới cùng thành đúng mục đã chọn (If559f, b/269044426)
Lỗi đã biết
- Khi sử dụng tính năng Điều hướng với Mảnh, Vòng đời của
NavBackStackEntry
không thể đạt đếnRESUMED
khi sử dụng các APIAnimation
. (b/269646882) - Khi sử dụng Navigation với các Fragment và điều hướng bằng
BottomNavigation
, nếu bạn cố gắng khôi phục ngăn xếp lui có nhiều mục nhập, thìBottomMenuItem
sẽ không được cập nhật chính xác. (b/270447657) - Khi sử dụng tính năng Điều hướng bằng Mảnh, sau khi khôi phục trạng thái,
NavBackStackEntry
Lifecycle
sẽ không nhận đượcDESTROYED
khi mảnh của nó làDESTROYED
. (b/270610768)
Phiên bản 2.6.0-alpha05
Ngày 8 tháng 2 năm 2023
Phát hành androidx.navigation:navigation-*:2.6.0-alpha05
. Phiên bản 2.6.0-alpha05 bao gồm các thay đổi sau.
Tính năng mới
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
hiện đều hỗ trợ các tuyến có đối số được điền một phần hoặc toàn bộ. Lưu ý rằng các đối số này phải khớp chính xác với đối số của mục nhập. (Iebd28, Ic678c, I3b37b, b/257514373)FragmentNavigator
hiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries
. Tức là giờ đây,NavBackStackEntry
Lifecycle
sẽ đợi các hiệu ứng đặc biệt của mảnh vào và thoát hoàn tất trước khi di chuyểnLifecycle.State
cuối cùng. (I3cb19, b/238686802)DialogFragmentNavigator
hiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries
. Tức là giờ đây,NavBackStackEntry
Lifecycle
sẽ chờDialogFragment
Lifecycle
chuyển sangDESTROYED
trước khi chuyển sang chínhDESTROYED
. (I53ee5, b/261213893)
Các thay đổi về API
NavigatorState
hiện cung cấp APIprepareForTransition
để cho phépNavigator
di chuyểnNavBackStackEntries
sangLifecycle.State
trung gian. (I42c21, b/238686802)- Bạn hiện có thể truy cập vào ngăn xếp lui liên kết với
NavGraphNavigator
hoặcComposeNavigator
thông qua thuộc tínhbackstack
. Giờ đây,ComposeNavigator
cũng hiển thị lệnh gọi lạionTransitionComplete()
để đánh dấuNavBackStackEntry
là đã thực thi thao tác điều hướng hoặcpopBackStack
. (I02062, I718db, b/257519195)
Sửa lỗi
- Trạng thái của Trình điều hướng hiện sẽ không hoạt động khi sử dụng API
push/popWithTransition
và mục nhập đã được xử lý. (Iadbfa, b/261213893) - Khi sử dụng
launchSingleTop
cùng vớiNavGraph
lồng nhau, tất cả các đích đến bắt đầu từ đích đến ban đầu tớistartDestination
của nó sẽ chỉ được thêm đúng cách vào đầu ngăn xếp lui. (Id4bea, b/253256629) - Giờ đây, tính năng Navigation (Điều hướng) sẽ thay thế đúng cách thực thể
DialogFragment
khi điều hướng tới cùng một đích đến với cờlaunchSingleTop
được đặt thành true. (I45b5a, b/149572817) - SafeArgs của tính năng Điều hướng sẽ không còn gây ra lỗi biên dịch khi sử dụng các đối số có đúng 19 ký tự. (Id60bc, b/257110095)
Phiên bản 2.6.0-alpha04
Ngày 9 tháng 11 năm 2022
Phát hành androidx.navigation:navigation-*:2.6.0-alpha04
. Phiên bản 2.6.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, các lớp con tuỳ chỉnh của
NavType
có thể ghi đèserializeAsValue
để chuyển đổi tuần tự một giá trị thành một String (chuỗi), cho phép đóng gói hoàn toàn quá trình chuyển đổi tuần tự và huỷ chuyển đổi tuần tự (thông quaparseValue
) trong lớpNavType
.StringType
hiện ghi đè phương thức này để gọiUri.encode
trênString
đã cho. (Ie5213, b/247637434) NavigationUI
hiện cung cấp nhật ký khi không thao tác được quaMenuItem
đã chọn. (I2af5a, b/247730357)
Sửa lỗi
- Giờ đây, các đường liên kết sâu của tính năng Điều hướng được phân tích cú pháp từng phần thay vì khởi tạo biểu đồ, cách này có thể giúp cải thiện hiệu suất của ứng dụng khi khởi động. (Iab0ab)
- Khắc phục sự cố do di chuyển lên sau khi liên kết sâu đến một đích đến có đối số mặc định rỗng. (I51c24, b/243183636)
Cập nhật về phần phụ thuộc
- Khả năng hỗ trợ của Điều hướng cho Mô-đun có tính năng động hiện phụ thuộc vào Thư viện Play Feature Delivery chi tiết. (Ib4ddc)
- Trình bổ trợ Navigation Safe Args hiện phụ thuộc vào trình bổ trợ Android cho Gradle, phiên bản 7.3.0. Do đó, trình bổ trợ này hiện chỉ tương thích với các phiên bản từ 7.3.0 trở lên. (I47e49)
Phiên bản 2.6.0-alpha03
Ngày 24 tháng 10 năm 2022
Phát hành androidx.navigation:navigation-*:2.6.0-alpha03
. Phiên bản 2.6.0-alpha03 bao gồm các thay đổi sau.
Sửa lỗi
- Từ phiên bản Navigation
2.5.3
:NavHost
sẽ không còn gây raNoSuchElementException
khi không có đích đến đểCrossfade
kết hợp. Hệ thống hiện sẽ bỏ qua lần kết hợp đó. (Ieb46e, b/253299416) - Trên Navigation
2.5.3
: Khắc phục sự cố trạng thái Compose đã lưu (ví dụ: việc sử dụngrememberSaveable
) không bị xoá và chỉ bị xoá khi một đích đến được đẩy ra khỏi ngăn xếp lui. (I64949)
Thông tin cập nhật về phần phụ thuộc
- Hiện tại, Navigation sẽ phụ thuộc vào Fragment
1.5.4
. (Icd424)
Phiên bản 2.6.0-alpha02
Ngày 5 tháng 10 năm 2022
Phát hành androidx.navigation:navigation-*:2.6.0-alpha02
. Phiên bản 2.6.0-alpha02 bao gồm các thay đổi sau.
Các thay đổi về hành vi
- Khi chuyển mã nhận dạng của biểu đồ điều hướng sang
AppBarConfiguration
(chẳng hạn như quaMenu
),NavigationUI
hiện chỉ coi đích đến bắt đầu của biểu đồ điều hướng đó là đích đến cấp cao nhất, thay vì đánh dấu không chính xác từng đích đến trong biểu đồ dưới dạng đích đến cấp cao nhất. Hành vi chuyển mã nhận dạng của từng đích đến là không thay đổi. Chức năng tương tự này hiện cũng có cho mã của chính bạn thông qua hàmisTopLevelDestination
mới trênAppBarConfiguration
. (Ie936e, b/238496771)
Sửa lỗi
- Thành phần
navigation:navigation-fragment
hiện phụ thuộc vào Fragment phiên bản1.5.2
. (I00ba4) - Mục trong trình đơn đã chọn sẽ không còn được cập nhật khi chuyển đến đích đến
FloatingWindow
, chẳng hạn như hộp thoại. (I4cde8, b/240308330)
Phiên bản 2.6.0-alpha01
Ngày 7 tháng 9 năm 2022
Phát hành androidx.navigation:navigation-*:2.6.0-alpha01
. Phiên bản 2.6.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
- Việc tích hợp
setupWithNavController
trongNavigationUI
để thao tác với thanh ứng dụng ở trên cùng hiện sẽ phân tích cú pháp các giá trịR.string
cho đối sốReferenceType
có trongandroid:label
thành các giá trị Chuỗi thay vì xuất số nguyên tài nguyên được tạo tự động. (I5f803, b/167959935) NavDeepLink
hiện hỗ trợ giá trị mặc định cho các mảng, nhờ vậy mà có thể hỗ trợ các tham số truy vấn lặp lại (ánh xạ đến loại mảng của đối số). Giờ đây,NavType
cũng bao gồm cả một phương thức mặc định có thể được ghi đè để kết hợp 2 giá trị đã phân tích cú pháp. (Id68c3, b/209977108)- Khi sử dụng
${applicationId}
ở dạng chuỗi chính xác làm phần giữ chỗ trong thuộc tínhapp:data
vàapp:dataPattern
trong phần tử hoạt động của tệp XML điều hướng, phần giữ chỗ sẽ tự động được điền bằngpackageName
của ngữ cảnh khi tăng cường. (Iaabde, b/234223561) - Giờ đây, việc cố gắng tạo một
NavDeepLink
trống bằng cách sử dụng Kotlin DSLnavDeepLink
sẽ dẫn đến cảnh báo Lint (tìm lỗi mã nguồn) cho biết rằng đường liên kết sâu cần có URI, hành động và/hoặc loại mime thì mới hợp lệ. (I08d2f, b/154038883)
Các thay đổi về API
- Thêm hàm mở rộng
NavDestination
mới để phân tích cú pháp các nhãn động có đối số ở dạngandroid:label="{arg}"
thành Chuỗi. Hỗ trợ các đối sốReferenceType
bằng cách phân tích cú pháp các giá trịR.string
thành giá trị Chuỗi. (I07d89, b/236269380)
Các thay đổi về hành vi
arguments
của NavBackStackEntry vàarguments
được chuyển đếnOnDestinationChangedListener
hiện chỉ là bản sao của các đối số không thể thay đổi được tạo khi bạn điều hướng tới đích đến. Điều này có nghĩa là mọi thay đổi đối với các Gói đó sẽ không được cập nhật trong các lần truy cập tiếp theo vàoarguments
hoặc các thực thể khác củaOnDestinationChangedListener
. (I676f5)
Sửa lỗi
- Trên
2.5.2
điều hướng: Giờ đây, tính năng Dynamic Navigation (Điều hướng linh hoạt) sẽ tìm cách cài đặt đúng cách các đích đến Activity (Hoạt động) từ các mô-đun khác trước khi điều hướng đến đó. (Ia2c16, b/240292838) - Trên Navigation
2.5.2
: Giờ đây, tính năng Navigation (Điều hướng) sẽ thay thế đúng cách thực thể Fragment (Mảnh) khi điều hướng đến cùng một đích đến và đặt cờlaunchSingleTop
thành true (đúng). (I5a2f1, b/237374580) - Trên Navigation
2.5.2
: Khắc phụcIllegalStateException
do việc điều hướng đến một biểu đồ kép lồng nhau dùng chung đích đến chính với đích đến bắt đầu mới được bật lên. (I9f7cb, b/243778589)
Phiên bản 2.5
Phiên bản 2.5.3
Ngày 24 tháng 10 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.3
. Phiên bản 2.5.3 bao gồm các thay đổi sau.
Sửa lỗi
NavHost
sẽ không còn gây raNoSuchElementException
khi không có đích đến đểCrossfade
kết hợp. Hệ thống hiện sẽ bỏ qua lần kết hợp đó. (Ieb46e, b/253299416)- Khắc phục sự cố trạng thái Compose đã lưu (ví dụ: việc sử dụng
rememberSaveable
) không bị xoá và chỉ bị xoá khi một đích đến được đẩy ra khỏi ngăn xếp lui. (I64949)
Phiên bản 2.5.2
Ngày 7 tháng 9 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.2
. Phiên bản 2.5.2 bao gồm các thay đổi sau.
Sửa lỗi
- Giờ đây, tính năng Dynamic Navigation (Điều hướng linh hoạt) sẽ tìm cách cài đặt các đích đến Activity (Hoạt động) từ các mô-đun khác theo cách phù hợp trước khi điều hướng đến đó. (Ia2c16, b/240292838)
- Giờ đây, tính năng Navigation (Điều hướng) sẽ thay thế đúng cách thực thể Fragment (Mảnh) khi điều hướng đến cùng một đích đến và đặt cờ
launchSingleTop
thành true. (I5a2f1, b/237374580) - Khắc phục
IllegalStateException
do việc điều hướng đến một biểu đồ kép lồng nhau dùng chung đích đến chính với đích đến bắt đầu mới được bật lên. (I9f7cb, b/243778589)
Cập nhật về phần phụ thuộc
2.5.2
điều hướng giờ đây phụ thuộc vào Mảnh1.5.2
. (aosp/2178734)
Phiên bản 2.5.1
Ngày 27 tháng 7 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.1
. Phiên bản 2.5.1 bao gồm các thay đổi sau.
Sửa lỗi
Navigation Safe Args
sẽ không còn gây ra cảnh báo về việc ngừng sử dụng trong các lớp được tạo khi dùng các loại đối số tuỳ chỉnh được lưu trongBundle
. (Id86ed, b/237725966)
Thông tin cập nhật về phần phụ thuộc
- Thư viện Điều hướng hiện phụ thuộc vào Vòng đời
2.5.1
. (Ib4451) - Thư viện Điều hướng hiện phụ thuộc vào Hoạt động
1.5.1
. (I3efe8) - Thư viện Điều hướng hiện phụ thuộc vào Mảnh
1.5.1
. (I56177)
Phiên bản 2.5.0
Ngày 29 tháng 6 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0
. Phiên bản 2.5.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 2.4.0
- Tích hợp CreationExtras –
Navigation
hiện có khả năng cung cấpViewModelProvider.Factory
không có trạng thái quaCreationExtras
của Vòng đời2.5.0
.
Điều hướng SafeArgs
Navigation Safe Args
đã nâng cấp phần phụ thuộcAndroid Gradle Plugin
để dựa vào7.0.4
, giảm khả năng tương thích cho các phiên bản AGP trước7.0
.- Thêm tính năng hỗ trợ cho thuộc tính không gian tên build.gradle để dùng thay vì applicationId.
Các thay đổi khác
- API
visibleEntries
không còn là bản thử nghiệm và cung cấp chức năng truy xuất tất cả các mục hiện có đích đến hiển thị theoNavController
.
Phiên bản 2.5.0-rc02
Ngày 15 tháng 6 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-rc02
. Phiên bản 2.5.0-rc02 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố do chuyển đổi nhanh giữa các đích đến ở dưới cùng khi sử dụng thành phần Điều hướng trong Compose
NavHost
. (I3979a, b/234054916) Navigation SafeArgs
sẽ không còn gặp sự cố khi sử dụngapplicationIdSuffix
và không gian tên không cóapplicationId
, hoặc khiapplicationId
và không gian tên khác nhau. (I754b1, b/233119646)NavArgument
hiện có một hàmtoString()
tuỳ chỉnh để hiển thị các giá trị nội bộ của đối số. (I900a8)
Phiên bản 2.5.0-rc01
Ngày 11 tháng 5 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-rc01
. Phiên bản 2.5.0-rc01 bao gồm các thay đổi sau.
Tính năng mới
- Đã thêm một quy tắc tìm lỗi mã nguồn mới để cảnh báo việc đặt phần tử
<deeplink>
bên trong<activity>
ở tệpnavigation.xml
của bạn.(Ic15a5, b/178403185)
Sửa lỗi
- Các phạm vi thành phần kết hợp trong
NavHost
vàDialogHost
hiện được sắp xếp theo thứ tự dự kiến, nghĩa là các thành phần bên trong được xử lý trước thành phần bên ngoài. (I157e6) - Giờ đây, tính năng Điều hướng SafeArgs sử dụng
PathSensitivity.RELATIVE
trongArgumentsGenerationTask
để cho phép khả năng tương tác với bộ nhớ đệm. Điều này có nghĩa là giờ đây, bạn có thể sử dụng lại mục nhập bộ nhớ đệm từ một bản dựng CI sang bản dựng cục bộ. (I5f67c, b/173420454) - Quy tắc tìm lỗi mã nguồn
UnrememberedGetBackStackEntryDetector
đã cập nhật để đảm bảo lệnh gọiremember
bao quanh lệnh gọi tớigetBackStackEntry()
được truyền đối tượngNavBackStackEntry
dưới dạng một khoá.(Ib7081 .b/227382831)
Phiên bản 2.5.0-beta01
Ngày 20 tháng 4 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-beta01
. Phiên bản 2.5.0-beta01 bao gồm các thay đổi sau.
Sửa lỗi
- Giờ đây,
DialogNavigator
sẽ dùngpopWithTransition
khi thực hiện một lệnh gọidismiss()
. Thao tác này khắc phục những tình huống tương tranh khi sử dụng đíchViewModel
trongdialog
dẫn đếnIllegalStateException
khi loại bỏ Hộp thoại bằng cách sử dụng hệ thống quay lại hoặc nhấn vào bên ngoài hộp thoại để thoát. (Id7376, b/226552301)
Thông tin cập nhật về phần phụ thuộc
- Giờ đây, thao tác điều hướng phụ thuộc vào Vòng đời
2.5.0-beta01
, sửaIllegalStateException
khi lồng mộtNavHost
trongNavHost
khác vào một thẻ điều hướng dưới cùng chính khi sử dụng nhiều ngăn xếp lui.
Phiên bản 2.5.0-alpha04
Ngày 6 tháng 4 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-alpha04
. Phiên bản 2.5.0-alpha04 bao gồm các thay đổi sau.
Thay đổi về API
visibleEntries
không còn thử nghiệm nữa. (I4829f, b/225394514)
Sửa lỗi
- Giờ đây, NavHost phụ thuộc vào
visibleEntries
trongNavController
để xác định mục nào cần soạn. Điều này có nghĩa là khi sử dụng NavHost lồng,NavHost
bên trong sẽ phải tạo hiệu ứng phù hợp. (I4ba2b, b/225394514) visibleEntries
StateFlow
doNavController
cung cấp hiện dựa trên trạng thái Vòng đời tối đa của mục nhập thay vì trạng thái Vòng đời hiện tại. Điều này có nghĩa là ngay cả khi vòng đời của máy chủnavController
xuống dưới mức STARTER (THỜI ĐIỂM BẮT ĐẦU), danh sách toàn bộ chế độ hiển thị sẽ vẫn giữ nguyên. (I9e2a8, b/225394514)SavedStateViewFactory
hiện hỗ trợ việc sử dụngCreationExtras
ngay cả khi được khởi tạo bằngSavedStateRegistryOwner
. Nếu bạn cung cấp thông số bổ sung, các đối số đã khởi tạo sẽ bị bỏ qua. (I6c43b, b/224844583)NavDeepLink
hiện có thể phân tích cú pháp Uris bằng một tham số truy vấn đơn lẻ không có giá trị. (I0efe8, b/148905489)- Chuỗi trống hiện được coi là đối số hợp lệ trong liên kết sâu. (I70a0d, b/217399862)
Navigation Safe Args
sẽ không còn gặp sự cố khi sử dụng vùng chứa tên và không cóAndroidManifest.xml
nào. (I17ccf, b/227229815)
Phiên bản 2.5.0-alpha03
Ngày 23 tháng 2 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-alpha03
. Phiên bản 2.5.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Giờ đây, bạn có thể chuyển
CreationExtras
vàoby navGraphViewModels
để tạoViewModel
. (I29217, b/217618359)
Sửa lỗi
NavDeepLinks
hiện hỗ trợ đầy đủ các ký tự dòng mới được mã hoá và nhúng trong các tuyến/URI liên kết sâu. (I513d1, b/217815060)CreationExtras
hiện sẽ hoạt động chính xác khi được sử dụng vớiNavBackStackEntries
để tạo ViewModels. (I69161, b/217617710)- Navigation Safe Args hiện đã hỗ trợ việc sử dụng không gian tên được xác định trong
build.gradle
thay cho gói trong AndroidManifest. (I659ef, b/217414933)
Phiên bản 2.5.0-alpha02
Ngày 9 tháng 2 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-alpha02
. Phiên bản 2.5.0-alpha02 bao gồm các thay đổi sau.
Sửa lỗi
- Từ Navigation
2.4.1
:NavHostFragment
giờ đây sẽ thiết lập chính xácOnBackPressedDispatcher
khi sử dụng tính năng liên kết khung hình với biểu đồ lồng. (Ifbb51, b/214577959) - Trong Navigation
2.4.1
: Khi liên kết sâu thông qua nhiềuNavGraph
lồng nhau, các đích đến bắt đầu trung gian sẽ được đưa vào ngăn xếp lui một cách chính xác. (I504c0, b/214383060)
Phiên bản 2.5.0-alpha01
Ngày 26 tháng 1 năm 2022
Phát hành androidx.navigation:navigation-*:2.5.0-alpha01
. Phiên bản 2.5.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
NavBackStackEntry
hiện tích hợp với ViewModel CreatorsExtras, được đưa vào làm một phần thuộc Vòng đời2.5.0-alpha01
. (Ib9fe2, b/207012490)
Sửa lỗi
- Khắc phục vấn đề không thể truy cập vào
ViewModel
được tạo thông quaby navGraphViewModels()
từonCreate()
của một Fragment vớiIllegalStateException
. (I8a14d) NavDeepLink
sẽ không còn giải mã đối số hai lần một cách không cần thiết nữa, nghĩa là đối số chính xác hiện sẽ được chuyển đến đích cuối cùng. (I31b0a, b/210711399)
Safe Args
- Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle, phiên bản 7.0.4. Điều này có nghĩa là Navigation Safe Args sẽ không còn tương thích với các phiên bản Android Studio cũ hơn phiên bản 7.0 nhưng giờ đây sẽ tương thích với trình bổ trợ Android cho Gradle từ 7.1.0 trở lên. (I41c88, b/213086135, b/207670704)
Phiên bản 2.4.2
Phiên bản 2.4.2
Ngày 6 tháng 4 năm 2022
Phát hành androidx.navigation:navigation-*:2.4.2
. Phiên bản 2.4.2 bao gồm các thay đổi sau.
Sửa lỗi
- Điều chỉnh Navigation
2.5.0-alpha03
cho phiên bản cũ:NavDeepLinks
hiện đã hỗ trợ đúng cách các ký tự dòng mới được mã hoá và nhúng trong tuyến/URI liên kết sâu. (I513d1, b/217815060) - Điều chỉnh Điều hướng
2.5.0-alpha03
cho phiên bản cũ: Tính năng SafeArgs điều hướng hiện hỗ trợ sử dụng vùng chứa tên đã xác định trongbuild.gradle
thay cho gói trong AndroidManifest. (I659ef, b/217414933) - Điều chỉnh Navigation
2.5.0-alpha04
cho phiên bản cũ:Navigation Safe Args
sẽ không còn gặp sự cố khi sử dụng không gian tên và không cóAndroidManifest.xml
. (I17ccf, b/227229815) - Điều chỉnh Navigation
2.5.0-alpha04
cho phiên bản cũ: Chuỗi trống hiện được coi là đối số hợp lệ trong liên kết sâu. (I70a0d, b/217399862)
Phiên bản 2.4.1
Phiên bản 2.4.1
Ngày 9 tháng 2 năm 2022
Phát hành androidx.navigation:navigation-*:2.4.1
. Phiên bản 2.4.1 bao gồm các thay đổi sau.
Sửa lỗi
NavHostFragment
giờ đây sẽ thiết lập chính xácOnBackPressedDispatcher
khi sử dụng tính năng liên kết chế độ xem với biểu đồ lồng ghép. (Ifbb51, b/214577959)- Khi liên kết sâu thông qua nhiều
NavGraph
lồng ghép, giờ đây, ngăn xếp lui sẽ hiển thị chính xác đích bắt đầu trung gian. (I504c0, b/214383060) - Điều chỉnh đối với phiên bản cũ của Navigation
2.5.0-alpha01
: Khắc phục vấn đề việc truy cập vào ViewModel được tạo thông quaby navGraphViewModels()
từonCreate()
của mảnh sẽ không thành công vớiIllegalStateException
. (I8a14d) - Điều chỉnh đối với phiên bản cũ của Navigation
2.5.0-alpha01
:NavDeepLink
sẽ không còn giải mã đối số hai lần một cách không cần thiết nữa, nghĩa là đối số đã mã hoá đúng cách hiện sẽ được chuyển đến trang đích cuối cùng. (I31b0a, b/210711399) - Điều chỉnh cho phiên bản cũ của Navigation
2.5.0-alpha01
: Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle Android phiên bản 7.0.4. Điều này có nghĩa là Navigation Safe Args sẽ không còn tương thích các phiên bản Android Studio thấp hơn 7.0 và giờ đây sẽ tương thích với trình bổ trợ Android cho Gradle từ 7.1.0 trở lên. (I41c88, b/213086135, b/207670704)
Phiên bản 2.4.0
Phiên bản 2.4.0
Ngày 26 tháng 1 năm 2022
Phát hành androidx.navigation:navigation-*:2.4.0
. Phiên bản 2.4.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 2.3.0
- Tất cả cấu phần mềm của Navigation đã được viết lại bằng Kotlin. Điều này đã giúp cải thiện tính chất rỗng của các lớp sử dụng thuộc tính chung (chẳng hạn như các lớp con của
NavType
). Tất cả hàm tiện ích Kotlin từng là một phần của cấu phần mềm-ktx
đã được chuyển sang các cấu phần mềm chính tương ứng. Các cấu phần mềm-ktx
sẽ tiếp tục được xuất bản nhưng sẽ trống hoàn toàn. - Cấu phần mềm
navigation-fragment
hiện có cấu hình triển khai tạo sẵn với bố cục hai ngăn thông quaAbstractListDetailFragment
mới. Mảnh này sử dụngSlidingPaneLayout
để quản lý ngăn danh sách (do lớp con tạo ra) và ngăn chi tiết sử dụngNavHostFragment
làm cấu hình triển khai như được minh hoạ trong phần triển khai mẫu của chúng tôi. - Phương thức
currentBackStackEntryAsFlow()
trênNavController
cung cấpFlow
sẽ kích hoạt bất cứ khi nàoNavBackStackEntry
hiện tại thay đổi. Bạn có thể sử dụng quy trình này thay cho việc quản lýOnDestinationChangedListener
theo cách thủ công. - NavController hiện cho phép truy xuất danh sách tất cả phiên bản
NavBackStackEntry
hiển thị cho người dùng dưới dạngStateFlow
thông qua thuộc tínhvisibleEntries
thử nghiệm. - Giờ đây, bạn có thể mở rộng lớp
NavType
để tạo NavTypes tuỳ chỉnh. Các loại tuỳ chỉnh chỉ được hỗ trợ khi tạo biểu đồ điều hướng theo phương thức lập trình, chẳng hạn như thông qua Navigation Graph Kotlin DSL. Navigation hiện cung cấp các API
findStartDestination()
vàgetHierarchy()
có thể dùng để hỗ trợ triển khai NavigationUI tuỳ chỉnh.findStartDestination()
là một hàm mở rộng từNavGraph
, có chức năng định vị đích bắt đầu thực tế sẽ xuất hiện khi bạn điều hướng đến biểu đồ, ngay cả khistartDestination
làNavGraph
lồng.getHierarchy()
là một hàm trênNavDestination
có thể dùng để xác minh xem một đích nhất định có nằm trong hệ thống phân cấp của một đích khác hay không.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
Các phương thức
NavigationUI
sử dụngBottomNavigationView
đã được cập nhật để sử dụng siêu lớp được nêu trong Material1.4.0
,NavigationBarView
. Việc này cho phép sử dụng các phương thức này vớiNavigationRailView
.Khi tăng cường một phần tử
<action>
qua XML, thuộc tính ảnh động có thể sử dụng các thuộc tính lấy từ giao diện bằng cú phápapp:enterAnim="?attr/transitionEnter"
.Safe Args giờ đây có thể tạo phương thức
fromSavedStateHandle()
cho mỗi lớpNavArgs
. (#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) }
Tuyến Navigation và Kotlin DSL
Các phiên bản Navigation trước đây dựa trên việc mỗi đích có một mã nhận dạng bằng số nguyên không đổi. Mã này sẽ nhận dạng riêng đích đó từ các đích cùng cấp và cho phép bạn navigate()
đến đích đó trực tiếp hoặc thông qua một hành động. Mặc dù giá trị này vẫn hợp lệ và hữu ích, đặc biệt là trong trường hợp bạn xác định biểu đồ điều hướng ở định dạng XML và có thể dùng hằng số R.id
được tạo tự động hoặc Safe Args (sử dụng các hằng số đó để tạo mã trong thời gian xây dựng) nhưng hệ thống các số nguyên riêng biệt này không ghi lại ý nghĩa ngữ nghĩa và biểu thức cần thiết để hỗ trợ hoàn toàn các biểu đồ động được dựng theo phương thức lập trình trong thời gian chạy thông qua Navigation Kotlin DSL (DSL Kotlin điều hướng).
Bản phát hành này cung cấp một lựa chọn mới cho phép xác định riêng một đích trong biểu đồ điều hướng dựa trên tuyến của đích đó. Tuyến là String
xác định đường dẫn riêng tới một đích. Tất cả phương thức Kotlin DSL sử dụng mã nhận dạng đích hiện không được dùng nữa và được thay thế bằng một API định tuyến tương đương.
Mỗi tuyến phải được xem là một phần "đường dẫn" của Uri
xác định đích đó, chẳng hạn như home
, profile/{userId}
, profile/{userId}/friends
, v.v. Khi danh tính của một đích đến được liên kết với một phần nội dung cụ thể, các đối số động đó phải là một phần của tuyến theo các quy tắc tương tự như đường liên kết sâu ngầm ẩn.
Tất cả API NavController
trước đây chỉ nhận một mã nhận dạng giờ đây có thể nhận nhiều mã để điều hướng String
. Các API này bao gồm navigate()
, popBackStack()
, popUpTo()
và getBackStackEntry()
.
Điều này có một số ảnh hưởng đến API:
- Chúng tôi đã ngừng sử dụng thuộc tính Kotlin
popUpTo
trên Kotlin DSL và thay bằngpopUpToId
. - API
getStartDestination()
đã ngừng hoạt động và được thay bằnggetStartDestinationId()
.
Không giống như khi điều hướng theo mã nhận dạng, việc điều hướng theo tuyến tuân theo quy tắc giống như quy tắc đối với đường liên kết sâu ngầm ẩn, trong đó bạn có thể điều hướng trực tiếp đến bất kỳ đích đến nào trong biểu đồ lồng, đảm bảo rằng các tuyến này dùng được trong các dự án có nhiều mô-đun mà không cần thêm rõ ràng một đường liên kết sâu hiển thị bên ngoài vào mỗi đích đến.
Navigation Compose
Cấu phần mềm navigation-compose
cho phép tích hợp giữa Navigation Component với Jetpack Compose. Phương thức này sử dụng các hàm @Composable
làm đích trong ứng dụng.
Bản phát hành này cung cấp:
- Thành phần có thể kết hợp
NavHost
cho phép bạn tạo biểu đồ điều hướng thông qua DSL Kotlin bằng các đíchcomposable
vàdialog
, đồng thời hỗ trợ các Trình điều hướng tuỳ chọn, chẳng hạn như các Trình điều hướng không bắt buộc trong Accompanist Navigation Material. - Hỗ trợ bắt buộc cho việc chuyển đổi giữa các đích. Bạn có thể dùng Accompanist Navigation Animation để kiểm soát quá trình chuyển vào và thoát bằng các API Compose thử nghiệm.
- Đặt phạm vi của
Lifecycle
theo mỗi đích có thể kết hợp. Mỗi đích đến chỉ đạt đến trạng tháiRESUMED
khi hoàn tất các quá trình chuyển đổi vào (entering) và chuyển ngay thànhSTARTED
khi bắt đầu các quá trình chuyển đổi thoát (exiting), nhờ đó bạn có thể tránh được tất cảIllegalStateException
và các sự cố đa chạm bằng cách chỉ kích hoạt lệnh gọinavigate
khiLifecycle
làRESUMED
. - Phạm vi của
ViewModel
(thông qua APIviewModel()
của Lifecycle ViewModel Compose2.4.0
hoặchiltViewModel()
của Hilt Navigation Compose1.0.0
ở cấp độ đích cung cấp phạm vi còn lại sau khi thay đổi chế độ cấu hình và nằm trong ngăn xếp lui (khi nội dung thành phần kết hợp được xử lý khác) và tín hiệu trongonCleared()
của ViewModel cho biết đã loại bỏ vĩnh viễn và dọn dẹp trạng thái liên quan đếnNavBackStackEntry
. - Phạm vi trạng thái
rememberSaveable
ở cấp độ đích, đảm bảo tất cả trạng thái thành phần kết hợp được lưu và khôi phục tự động khi bạn quay lại một đích. - Hỗ trợ đầy đủ tính năng lưu và khôi phục trạng thái
NavController
cũng như trạng thái của đích sau khi quá trình bị gián đoạn và tạo lại. - Tích hợp tự động với nút quay lại của hệ thống.
Hỗ trợ việc truyền các đối số, đính kèm các đường liên kết sâu tới các đích và trả lại kết quả về các đích trước đó.
Bạn có thể soạn một số trình trợ giúp cụ thể trong
rememberNavController()
vàcurrentBackStackEntryAsState()
để cho phép chuyển trạng thái lên trên và kết nốiNavController
với các thành phần có thể kết nối bên ngoàiNavHost
(chẳng hạn như thanh điều hướng ở dưới cùng).
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()
}
}
}
Xem hướng dẫn về Compose Navigation để biết thêm thông tin.
Nhiều ngăn xếp lui
NavController chịu trách nhiệm quản lý ngăn xếp lui của các đích, thêm đích vào ngăn xếp lui khi bạn navigate()
đến các đích này và xoá đích khi bạn gọi lệnh popBackStack()
hoặc kích hoạt nút quay lại của hệ thống. Chúng tôi đã mở rộng lớp NavOptions
hiện tại và khả năng tích hợp vào các phần tử <action>
trong tệp XML của biểu đồ điều hướng để hỗ trợ việc lưu và khôi phục ngăn xếp lui.
Cùng với thay đổi này, các phương pháp NavigationUI
đối với onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
và NavigationView.setupWithNavController()
giờ đây sẽ tự động lưu và khôi phục trạng thái của các đích bật lên, cho phép hỗ trợ nhiều ngăn xếp lui mà không cần thay đổi mã. Khi sử dụng Navigation với các Fragment, bạn nên tích hợp với nhiều ngăn xếp lui theo cách sau.
Các API cơ bản thực hiện chức năng lưu và khôi phục trạng thái được hiển thị thông qua một số nền tảng sau:
Trong Navigation XML, phần tử
<action>
giờ đây có thể sử dụng các thuộc tính boolean củaapp:popUpToSaveState
vàapp:restoreState
để lưu trạng thái của bất kỳ đích nào được bật lên thông quaapp:popUpTo
và khôi phục trạng thái liên kết với đích đã được chuyển qua dạngapp: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” />
Trong
navOptions
Kotlin DSL, bạn có thể thêm thuộc tính booleanrestoreState
và thuộc tính booleansaveState
trên trình tạopopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
Khi tạo đối tượng
NavOptions
theo cách thủ công quaNavOptions.Builder
, bạn có thể sử dụngsetRestoreState()
và phương thức nạp chồng mới chosetPopUpTo()
để lấy thêm tham số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);
Các lệnh gọi có lập trình đến
popBackStack()
hiện có thể bao gồm thêm tham sốsaveState
.Bạn có thể sử dụng phương thức
clearBackStack()
để xoá bất kỳ trạng thái nào đã lưu bằngpopBackStack()
hoặcpopUpToSaveState
.
Trong mọi trường hợp, NavController
sẽ lưu và khôi phục trạng thái của mỗi NavBackStackEntry
, bao gồm cả các bản sao ViewModel
trong phạm vi đích điều hướng. Chúng tôi đã cập nhật API Navigator
để cho phép các Navigator
hỗ trợ việc lưu và khôi phục trạng thái của riêng API đó.
Thay đổi về hành vi
NavDeepLinkBuilder
hiện đã thêmPendingIntent.FLAG_IMMUTABLE
vàoPendingIntent
docreatePendingIntent()
trả về, đảm bảo rằng API này hoạt động như dự kiến khi chạy trên Android 12.- Navigation giờ đây phụ thuộc vào Lifecycle
2.3.1
và đánh dấusetGraph()
,popBackStack()
,navigateUp()
vànavigate()
, các phương thức cập nhậtNavBackStackEntry
Lifecycle
, chẳng hạn như@MainThread
, liên kết Navigation với lệnh thực thi chuỗi chính được nêu trong Lifecycle2.3.0
. - Các đường liên kết sâu giờ đây sẽ xác minh việc tất cả đối số bắt buộc (những đối số không có giá trị mặc định) đều có trong
Uri
. - Các đối số được phân tích cú pháp
NavDeepLink
hiện coi các ký hiệu dấu thăng giống như dấu hỏi và là dấu phân tách giữa các phân đoạn đường dẫn, ngăn không cho một đối số nằm trên dấu thăng. - Khi tạo hành động, mã Kotlin được tạo từ Safe Args giờ đây sẽ đặt các đối số không có giá trị mặc định trước các đối số có giá trị mặc định làm tham số.
- Khi tạo đối số, Safe Args giờ đây sẽ đặt các tham số không có giá trị mặc định trước các tham số có giá trị mặc định.
- Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle 4.2.0. Điều này có nghĩa là bạn sẽ không còn thấy cảnh báo sử dụng
applicationIdTextResource
nữa.
Vấn đề đã biết
- Đã sửa trong Navigation
2.5.0-alpha01
: lỗi truy cậpViewModel
được tạo thông quaby navGraphViewModels()
từonCreate()
của Fragment với trạng tháiIllegalStateException
. (b/213504272) - Đã sửa trong Navigation
2.5.0-alpha01
: Safe Args 2.4.0 không tương thích với trình bổ trợ Android cho Gradle từ 7.1.0 trở lên. (b/213086135) - Việc liên kết sâu với nhiều biểu đồ điều hướng lồng nhau sẽ không tạo được chính xác toàn bộ ngăn xếp. (b/214383060)
Phiên bản 2.4.0-rc01
Ngày 15 tháng 12 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-rc01
. Phiên bản 2.4.0-rc01 bao gồm các thay đổi sau.
Thay đổi về hành vi
- Các đối số được phân tích cú pháp
NavDeepLink
hiện coi các ký hiệu dấu thăng giống như dấu hỏi và là dấu phân tách giữa các đối số. (I21309, b/180042703)
Sửa lỗi
- Đường liên kết sâu sẽ không còn bỏ qua các đối số có giá trị giống với tên của phần giữ chỗ. (If8017, b/207389470)
NavController
sẽ không còn gặp sự cố khi bật lên đích đến lồng nhau bằng lượt chuyển đổi sau khiNavController
được khôi phục. (I0f7c9, b/205021623)- Thông báo lỗi khi sử dụng
startDestination
không hợp lệ hiện sẽ mặc định cho tuyến của đích đến bắt đầu (nếu có). (I86b9d, b/208041894)
Sửa lỗi Navigation Compose
- Đã khắc phục sự cố tiềm ẩn gây ra do chuyển đổi nhanh giữa đích bắt đầu và đích khác bằng cách sử dụng các mục trong trình đơn điều hướng dưới cùng. (Ic8976, b/208887901)
- Đích hộp thoại hiện đã được khôi phục đúng cách ở đầu màn hình sau khi thay đổi chế độ cấu hình hoặc quá trình bị gián đoạn. (I4c0dc, b/207386169)
- Đã khắc phục sự cố khi truy xuất
ViewModel
từNavBackStackEntry
của hộp thoại khi hộp thoại bị loại bỏ. (I6b96d, b/206465487) - Đã khắc phục sự cố khi sử dụng
activity
đích bằngNavHost
của tính năng Navigation Compose sẽ dẫn đến việc tạo lại các mục vô hạn. (I8f64c) - Đã khắc phục sự cố rò rỉ trong Navigation Compose, trong đó vẫn tham chiếu đến hoạt động cũ sau khi thay đổi chế độ cấu hình hoặc quá trình bị gián đoạn. (I4efcb, b/204905432)
Sửa một số lỗi Safe Args
SafeArgs
không còn gặp sự cố khi cố gắng khôi phục các mảng tuỳ chỉnh có thể phân phối sau khi quá trình bị gián đoạn. (I618e8, b/207315994)- Đã khắc phục lỗi trong Safe Args không cho phép mảng boolean có giá trị
null
. (I8c396, b/174787525)
Phiên bản 2.4.0-beta02
Ngày 3 tháng 11 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-beta02
. Phiên bản 2.4.0-beta02 bao gồm các thay đổi sau.
Thay đổi về API
- Quy trình xử lý cả đường liên kết sâu rõ ràng và ngầm ẩn hiện đã tự động thêm cờ
saveState
khi chuyển đến một biểu đồ khác, đảm bảo mã đó, chẳng hạn nhưNavigationUI.setupWithNavController
và mã sử dụng nhiều ngăn xếp lui, hoạt động như dự kiến. (Ic8807)
Các thay đổi về hành vi
- Các mẫu đường liên kết sâu hiện được soạn ra từng phần trong NavDeepLink thay vì trong giai đoạn tăng cường. Cách này sẽ cải thiện thời gian tăng cường của các biểu đồ điều hướng có chứa đường liên kết sâu. (b8d257, b/184149935)
Sửa lỗi
- Khắc phục sự cố NavBackStackEntries bị đẩy xuống
Lifecycle.State.CREATED
sau khi chuyển sangLifecycle.State.STARTED
lúcNavHost
được thêm trực tiếp vàosetContent()
của hoạt động. (Ia5ac1, b/203536683) - Khắc phục một tình huống tương tranh trong đó việc bật đích đến
DialogFragment
ra khỏi ngăn xếp lui trước khi hộp thoại thực sự xuất hiện sẽ không đóng hẳn hộp thoại, dẫn đến sự cố khi người dùng đóng hộp thoại bị lỗi theo cách thủ công. (I687e5) - Khắc phục một vấn đề trong đó
API
onNavDestinationSelected
trênNavigationUI
sẽ trả vềtrue
ngay cả khi bạn không thực sựnavigate()
đến biểu đồ điều hướng đó. Phương thức này hiện sử dụng cùng một logic đượcsetupWithNavController
sử dụng nội bộ chỉ cho mục đích chọnMenuItem
liên kết với đích hiện tại bằng cách sử dụnghierarchy
của đích. (I2b053)
Phiên bản 2.4.0-beta01
Ngày 27 tháng 10 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-beta01
. Phiên bản 2.4.0-beta01 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, bạn có thể sử dụng
by navGraphViewModel
kèm theo một tuyến để thay thế cho việc sử dụng mã nhằm hỗ trợ tốt hơn Navigation Kotlin DSL với Fragment. (I901e3, b/201446416)
Thay đổi về API
- API
visibleEntries
hiện đang thử nghiệm. (I93f6f)
Sửa lỗi
- ViewModels sẽ không còn bị huỷ khi các lượt chuyển đổi bị gián đoạn bởi việc điều hướng qua lại giữa các màn hình này (Id52d8, b/200817333)
- Các đối số
NavDeepLink
có thể rỗng không còn yêu cầu giá trị mặc định khi thêm các đường liên kết sâu vàoNavDestination
. (I5aad4, b/201320030) - NavBackStackEntries có Lifecycles khác hiện không được coi là bình đẳng nữa. Điều này có nghĩa là NavHost sẽ kết hợp lại tất cả đích khi điều hướng bằng singleTop và khi chọn lại các mục trong trình đơn ở dưới cùng. (I1b351, b/196997433)
- Khắc phục vấn đề với
AbstractListDetailFragment
khiến thuộc tínhlayout_width
vàlayout_weight
trong ngăn danh sách đượconCreateListPaneView()
trả về bị xử lý hoặc bỏ qua không chính xác. (f5fbf3) - Trạng thái hình ảnh của đích của hộp thoại giờ đây sẽ
đồng bộ hoá chính xác với trạng thái
của
DialogFragmentNavigator
. Điều này có nghĩa là việc gọi APIdismiss()
không đồng bộ choDialogFragment
hiện sẽ xoá hoàn toàn tất cả các đích hộp thoại phía trên hộp thoại hiện bị loại bỏ. Điều này không ảnh hưởng đến các trường hợp mà bạn sử dụngpopUpTo
hoặcpopBackStack()
để đóng hộp thoại. (I77ba2) AbstractAppBarOnDestinationChangedListener
hiện đã có thông báo lỗi rõ ràng hơn choonDestinationChanged()
. (Ie742d)
Phiên bản 2.4.0-alpha10
Ngày 29 tháng 9 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha10
. Phiên bản 2.4.0-alpha10 bao gồm các thay đổi sau.
Tính năng mới
- NavController hiện cung cấp khả năng truy xuất danh sách tất cả bản sao
NavBackStackEntry
hiển thị quavisibleEntries
StateFlow (Ia964e) rememberNavController()
hiện bao gồm thêm một tập hợp các thực thểNavigator
tuỳ chọn mà được thêm vàoNavController
trả về. Việc này nhằm hỗ trợ tốt hơn cho các Trình điều hướng tuỳ chọn, chẳng hạn như Trình điều hướng trong Tài liệu điều hướng đi kèm. (I4619e)
Sửa lỗi
- Tính năng Dynamic Navigation sẽ không còn gặp sự cố khi Activity được tạo lại. (Ifa6a3, b/197942869)
- Khắc phục sự cố nút quay lại của hệ thống chỉ hiện sau khi quay lại đích đến của thành phần kết hợp chứa
NavHost
. (3ed148, b/195668143) - Safe Args hiện tạo các đối số cho
fromBundle()
vàfromSavedStateHandle()
theo thứ tự tham số thích hợp. (I824a8, b/200059831)
Phiên bản 2.4.0-alpha09
Ngày 15 tháng 9 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha09
. Phiên bản 2.4.0-alpha09 bao gồm các thay đổi sau.
Tính năng mới
- Bây giờ, bạn có thể sử dụng phương thức
clearBackStack()
để xoá mọi trạng thái đã lưu bằngpopBackStack()
hoặcpopUpToSaveState
. (I80a0f) - Bây giờ, bạn có thể chuyển danh sách các đối số và/hoặc đường liên kết sâu đến trình tạo biểu đồ điều hướng lồng nhau và các đối số này sẽ tự động được thêm vào biểu đồ kết quả. (I8a470, b/182545357)
Thay đổi về API
- Hàm Kotlin DSL
navArgument
hiện là một phần củanavigation-common
thay vìnavigation-compose
. Bạn sẽ phải cập nhật các mục nhập để tiếp tục sử dụng hàm này. (I1d095)
Các thay đổi về hành vi
- Khi tạo đối số, Safe Args giờ đây sẽ đặt các tham số không có giá trị mặc định trước các tham số có giá trị mặc định. (I89709, b/198493585)
Sửa lỗi
- Khi sử dụng Navigation Compose, NavGraphs chỉ sẽ là
DESTROYED
khi tất cả yếu tố con đều làDESTROYED
. (I86552, b/198741720) - Các đối số
NavDeepLink
có thể rỗng không còn yêu cầu giá trị mặc định. (Ia14ef, b/198689811) - Khi gọi
setGraph()
bằng một biểu đồ mới, bạn hiện cũng sẽ xoá mọi ngăn xếp lui đã lưu ngoài hành vi trước đây là bật lên ngăn xếp lui. (I97f96) - Khắc phục vấn đề trong đó
các bản sao
OnDestinationChangedListener
vàcurrentBackStackEntryFlow
không được thông báo khi sử dụnglaunchSingleTop
. (Iaaebc)
Thông tin cập nhật về phần phụ thuộc
- Navigation Compose hiện phụ thuộc vào Activity Compose 1.3.1. (I05829)
- Navigation Compose hiện phụ thuộc vào Lifecycle ViewModel Compose
2.4.0-beta01
. (Ib86a3)
Phiên bản 2.4.0-alpha08
Ngày 1 tháng 9 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha08
. Phiên bản 2.4.0-alpha08 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, bạn có thể mở rộng lớp
NavType
để tạo NavTypes tuỳ chỉnh. Các loại tuỳ chỉnh chỉ được hỗ trợ khi tạo biểu đồ điều hướng theo phương thức lập trình, chẳng hạn như thông qua Navigation Graph Kotlin DSL. (I78440, b/196871885)
Các thay đổi về hành vi
- Khi tạo hành động, mã Kotlin được tạo từ Safe Args giờ đây sẽ đặt các đối số không có giá trị mặc định trước các đối số có giá trị mặc định làm tham số. (Idb697, b/188855904)
- Các đường liên kết sâu giờ đây sẽ xác minh việc tất cả đối số bắt buộc (những đối số không có giá trị mặc định) đều có trong
Uri
. (#204, b/185527157)
Sửa lỗi
- Việc sử dụng
getBackStackEntry
vàpreviousBackStackEntry
bên trong composable(), kết hợp vớiremember()
, sẽ không còn gây ra ngoại lệ cho không có đích nào ở ngăn xếp lui. (I75138, b/194313238) - Bây giờ, Navigation Compose sẽ kết hợp lại chính xác khi thay đổi các đối số
ngăn xếp lui và sử dụng
launchSingleTop=true
. (Iebd69, b/186392337) - Sẽ không còn
ArrayIndexOutOfBoundsException
nữa khi gọisetGraph
bằng biểu đồ có 13 hoặc 29 đích. (I1a9f1, b/195171984) - Trình tạo JavaScript của Safe Args không còn gây ra cảnh báo tìm lỗi mã nguồn khi tạo lớp Args. (I1a666, b/185843837)
Đóng góp bên ngoài
- Cảm ơn ospixd đã đảm bảo rằng các đường liên kết sâu sẽ xác minh rằng tất cả đối số bắt buộc (những đối số không có giá trị mặc định) đều có trong
Uri
. (#204, b/185527157)
Phiên bản 2.4.0-alpha07
Ngày 18 tháng 8 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha07
. Phiên bản 2.4.0-alpha07 bao gồm các thay đổi sau.
Sửa lỗi
- Bây giờ, Navigation Compose sẽ lưu trạng thái đúng cách sau khi thay đổi chế độ cấu hình và khi thay đổi biểu đồ trong khi sử dụng tính năng nhiều ngăn xếp lui. (If5a3d, b/195141957)
- Việc chọn lại cùng một thẻ khi sử dụng Navigation Compose có nhiều ngăn xếp lui sẽ không còn dẫn đến màn hình trống. (I860dc, b/194925622)
NavHost
hiện đang quan sát các thay đổi trongLifecycle.State
củaNavBackStackEntry
. Điều này có nghĩa là việc sử dụngNavHost
trong một mảnh giờ đây sẽ được kết hợp lại khi vòng đời thay đổi thay vì dẫn đến một màn hình trống. (I4eb85, b/195864489)- Khắc phục vấn đề khi việc loại bỏ
DialogFragment
sẽ không cập nhật chính xác trạng tháiNavController
sau khi tạo lại hoạt động (chẳng hạn sau khi thay đổi chế độ cấu hình). (Icd72b) - Khắc phục sự cố trong đó việc bật đích đến hộp thoại lên không cập nhật phương thức xử lý nút quay lại của hệ thống NavController, có thể khiến NavController chặn nút quay lại mặc dù không có ngăn xếp lui nào để bật lên. (If3b34)
- Bây giờ, Safe Args sẽ tự động tạo một phương thức
toSavedStateHandle
cho các đối số có thể dùng để kiểm tra mãViewModel
. (If1e2d, b/193353880)
Phiên bản 2.4.0-alpha06
Ngày 4 tháng 8 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha06
. Phiên bản 2.4.0-alpha06 bao gồm các thay đổi sau.
Thay đổi về API
- Phương thức
requireSlidingPaneLayout()
vàrequireDetailPaneNavHostFragment()
trênAbstractListDetailFragment
lần lượt đổi tên thànhgetSlidingPaneLayout()
vàgetDetailPaneNavHostFragment()
. (I34a08)
Các thay đổi về hành vi
- Khi điều hướng với ảnh động (như
Crossfade
),Lifecycle
của đích mới giờ sẽ chỉ đạt đếnRESUMED
khi ảnh động hoàn tất. (If0543, b/172112072, b/194301889) NavHost
của Navigation Compose hiện đặt biểu đồ trong lần kết hợp đầu tiên. (Ieb7be)
Sửa lỗi
- Việc bật đích cuối cùng của biểu đồ điều hướng sẽ không còn gửi
ClassCastException
nữa. (If0543, b/172112072, b/194301889) - Khắc phục lỗi
NullPointerException
xảy ra khi thêm đường liên kết sâu mà không cóUri
và điều hướng qua một tuyến hoặc đường liên kết sâu. (938a0c, b/193805425) - Khắc phục vấn đề với Navigation Compose trong đó
NavBackStackEntry
được liên kết sâu sẽ không đạt đến trạng tháiRESUMED
. (I192c5) - Khắc phục sự cố trong đó việc bật đích đến hộp thoại lên không cập nhật phương thức xử lý nút quay lại của hệ thống NavController, có thể khiến NavController chặn nút quay lại mặc dù không có ngăn xếp lui nào để bật lên. (aosp/1782668)
Phiên bản 2.4.0-alpha05
Ngày 21 tháng 7 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha05
. Phiên bản 2.4.0-alpha05 bao gồm các thay đổi sau.
Các thay đổi về hành vi
NavHost
của Navigation Compose hiện luôn sử dụng Crossfades khi điều hướng qua các đích. (I07049, b/172112072)- Giờ đây, bạn có thể thay đổi biểu đồ của NavHost. Các biểu đồ có cùng startDestination và đích đến trong biểu đồ sẽ được coi là ngang nhau và sẽ không xoá ngăn xếp lui
NavController
. (I0b8db, b/175392262)
Sửa lỗi
- Đã khắc phục
NoSuchElementException
khi gọipopBackStack()
từ trongLifecycleObserver
được đính kèm với mộtNavBackStackEntry
do việc cập nhật lặp lại đối với trạng thái của NavController gây ra. (I64621) AbstractListDetailFragment
hiện cho phép xoá hoàn toànSlidingPaneLayout
khỏi APK khi không sử dụngAbstractListDetailFragment
. (I611ad)NavGraph
vàNavDestination
hiện ghi đè các phương thức ngang nhau nên 2 đối tượng có cùng giá trị sẽ được coi là ngang nhau. (I166eb, b/175392262)
Phiên bản 2.4.0-alpha04
Ngày 1 tháng 7 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha04
. Phiên bản 2.4.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Cấu phần mềm
navigation-fragment
hiện có cấu hình triển khai tạo sẵn với bố cục hai ngăn thông quaAbstractListDetailFragment
mới. Mảnh này sử dụngSlidingPaneLayout
để quản lý ngăn danh sách (do lớp con tạo ra) và ngăn chi tiết sử dụngNavHostFragment
làm cấu hình triển khai như được minh hoạ trong phần triển khai mẫu của chúng tôi. (Iac4be, b/191276636) NavHost
của cấu phần mềmnavigation-compose
hiện hỗ trợ đíchdialog
ngoài đíchcomposable
. Mỗi đích đến của hộp thoại này sẽ hiển thị trong một Thành phần kết hợpDialog
, nổi lên phía trên đíchcomposable
hiện tại. (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()
}
}
}
Thay đổi về API
- Hàm
add
trongNavigatorState
đã đổi tên thànhpush
. Tất cả lệnh gọi hiện tại đếnadd()
đều phải thay đổi thành push(). (Ie89fc, b/172112072) - Giờ đây, các bản sao
Navigator
tuỳ chỉnh có thể sử dụng APIpushWithTransaction
vàpopWithTransition
trênNavigatorState
để đẩy hoặc hiển thị đích không đồng bộ. Lưu ý rằng các API này chưa được bất kỳ trình điều hướng nào được bao gồm đưa vào sử dụng. (Ic4d7c, b/172112072)
Các thay đổi về hành vi
NavDeepLinkBuilder
hiện đã thêmPendingIntent.FLAG_IMMUTABLE
vàoPendingIntent
docreatePendingIntent()
trả về, đảm bảo rằng API này hoạt động như dự kiến khi chạy trên Android 12. (If8c52)
Sửa lỗi
- Khắc phục vấn đề xảy ra với
<include-dynamic>
, trong đó các đối số được chuyển đến biểu đồ sẽ không được chuyển chính xác đến biểu đồ đi kèm động. (I3e115) - Sửa
NullPointerException
khi điều hướng đến một đích bằng cách sử dụng đối sốstring[]
có giá trị mặc định là@null
. (I1fbe8) - Thêm các quy tắc ProGuard cho
@Navigator.Name
, khắc phục vấn đề khi sử dụng R8 3.1 chế độ đầy đủ. (I2add9, b/191654433) - Safe Args sẽ không còn bị lỗi khi tạo ứng dụng bằng
Kotlin
phiên bản trước1.5.0
. (Icd1ff, b/190739257)
Phiên bản 2.4.0-alpha03
Ngày 16 tháng 6 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha03
. Phiên bản 2.4.0-alpha03 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề cần có hai lệnh gọi
navigate()
để điều hướng đến một biểu đồ động đi kèm. (I7785c, b/188859835) - Đã khắc phục lỗi hồi quy được nêu trong
Navigation
2.4.0-alpha01
, trong đósetupActionBarWithNavController()
sẽ không xoá đúng biểu tượng Mũi tên lên khi bạn đang ở đích cấp cao nhất. (I5d443, b/189868637) - Khắc phục
IllegalStateException
khi gọipopBackStack()
sau khi hiển thị biểu đồ gốc của NavController. (I2a330, b/190265699) - Quy tắc ProGuard cho
by navArgs()
hiện sẽ áp dụng đúng cách khi sử dụngnavigation-common
hoặc bất kỳ cấu phần mềm nào tuỳ thuộc vào yếu tố này. (I68800, b/190082521) - Một
OnDestinationChangedListener
gọi lạinavigate()
trong lần đầu tiên nhận được lệnh gọi lại hiện nhận được lệnh gọi lại thứ hai với đích nó đã điều hướng đến. (Ie5f9e, b/190228815) - Safe Args không còn gặp sự cố khi sử dụng với các mô-đun tính năng động và AGP 7.0 trở lên. (I69518, b/189966576)
Vấn đề đã biết
- Safe Args sẽ gặp lỗi
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
khi sử dụng Gradle6.7.0
do sự phụ thuộc vào một phiên bản Kotlin cũ. Bạn có thể khắc phục vấn đề này bằng cách cập nhật để sử dụng Gradle 7.0. (b/190739257)
Phiên bản 2.4.0-alpha02
Ngày 2 tháng 6 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha02
. Phiên bản 2.4.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
- Các tuyến hiện được hỗ trợ cho đích đến Activity, Fragment và Dialog, cũng như trong toàn bộ DSL Kotlin DynamicNavigation. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
đã tạm thời thêm các API thử nghiệm để cho phép bạn chọn không lưu trạng thái. Mặc dù việc luôn lưu trạng thái là hành vi chính xác, nhưng những thư viện không dùng nữa (như các mảnh được giữ lại) đôi khi vẫn được sử dụng. Việc này vốn không được hỗ trợ khi lưu trạng thái, vì vậy, ứng dụng sẽ có khả năng chuyển đổi chậm khỏi mọi API không được hỗ trợ. (Idf93c)Navigation hiện cung cấp các API
findDestination()
vàgetHierarchy()
có thể dùng để hỗ trợ triển khai NavigationUI tuỳ chỉnh.findDestination()
là một hàm mở rộng trênNavGraph
, vị trí này sẽ định vị một đích trong biểu đồ.getHierarchy()
là một hàm trênNavDestination
có thể được dùng để xác minh xem một đích nhất định có nằm trong hệ thống phân cấp của một đích khác hay không.(I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
Các phương thức NavigationUI lấy
BottomNavigationView
đã được cập nhật để thay thế cho siêu lớp được giới thiệu trong Material1.4.0
,NavigationBarView
. Việc này cho phép sử dụng các phương thức này vớiNavigationRailView
. (Ib0b36, b/182938895)Khi tăng cường một phần tử
<action>
qua XML, thuộc tính ảnh động có thể sử dụng các thuộc tính lấy từ giao diện bằng cú phápapp:enterAnim="?attr/transitionEnter"
. (I07bc1, b/178291654)
Thay đổi về API
- Các trình tạo DSL Kotlin sử dụng mã không còn được dùng nữa và bạn nên thay thế bằng các trình tạo sử dụng các tuyến này (I85b42, b/188816479) (I9f58f, b/188816479)
Sửa lỗi
DialogFragmentNavigator
hiện sử dụng APINavigatorState.pop()
để thông báo choNavController
khi hộp thoại bị loại bỏ bằng cách nhấn nút quay lại của hệ thống hoặc nhấp vào bên ngoài, đảm bảo rằng trạng tháiNavController
luôn đồng bộ với trạng thái của Trình điều hướng. (I2ead9)Bạn sẽ không thấy
ConcurrentModificationException
nữa khi sử dụng thao tác điều khiển danh sáchOnDestinationChangedListeners
từ lệnh gọi lạionDestinationChanged
. (Ib1707, b/188860458)Safe Args không còn gặp sự cố khi cố gắng tạo các thuộc tính hướng trong Kotlin. (Id2416, b/188564435)
Phương thức setId trên NavDestination hiện đã được chú thích đúng cách bằng
@IdRes
, vì vậy, phương thức này chỉ chấp nhận mã tài nguyên. (I69b80)Hiện tại, tham số int của
findNode
làresId
thay vìresid
. (I7711d)
Cập nhật về phần phụ thuộc
- Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle 4.2.0. Điều này có nghĩa là bạn sẽ không còn thấy cảnh báo sử dụng
applicationIdTextResource
nữa. (I6d67b, b/172824579)
Phiên bản 2.4.0-alpha01
Ngày 18 tháng 5 năm 2021
Phát hành androidx.navigation:navigation-*:2.4.0-alpha01
. Phiên bản 2.4.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
- Phương thức
currentBackStackEntryAsFlow()
trênNavController
cung cấpFlow
sẽ kích hoạt bất cứ khi nàoNavBackStackEntry
hiện tại thay đổi. Bạn có thể sử dụng quy trình này thay cho việc quản lýOnDestinationChangedListener
theo cách thủ công. (I19c4a, #89, b/163947280)
Nhiều ngăn xếp lui
NavController chịu trách nhiệm quản lý ngăn xếp lui của các đích, thêm đích vào ngăn xếp lui khi bạn navigate()
đến các đích này và xoá đích khi bạn gọi lệnh popBackStack()
hoặc kích hoạt nút quay lại của hệ thống. Chúng tôi đã mở rộng lớp NavOptions
hiện tại và khả năng tích hợp vào các mục nhập <action>
trong tệp XML của biểu đồ điều hướng để hỗ trợ việc lưu và khôi phục ngăn xếp lui. (b/80029773)
Cùng với thay đổi này, các phương pháp NavigationUI
đối với onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
và NavigationView.setupWithNavController()
giờ đây sẽ tự động lưu và khôi phục trạng thái của các đích bật lên, cho phép hỗ trợ nhiều ngăn xếp lui mà không cần thay đổi mã. Khi sử dụng Navigation với các Fragment, bạn nên tích hợp với nhiều ngăn xếp lui theo cách sau. (Ie07ca)
Các API cơ bản thực hiện chức năng lưu và khôi phục trạng thái được hiển thị thông qua một số nền tảng sau:
Trong Navigation XML, phần tử
<action>
giờ đây có thể sử dụng các thuộc tính boolean củaapp:popUpToSaveState
vàapp:restoreState
để lưu trạng thái của bất kỳ đích nào được bật lên thông quaapp:popUpTo
và khôi phục trạng thái liên kết với đích đã được chuyển qua dạngapp: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” />
Trong
navOptions
Kotlin DSL, bạn có thể thêm thuộc tính booleanrestoreState
và thuộc tính booleansaveState
trên trình tạopopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
Khi tạo đối tượng
NavOptions
theo cách thủ công quaNavOptions.Builder
, bạn có thể sử dụngsetRestoreState()
và phương thức nạp chồng mới chosetPopUpTo()
để lấy thêm tham sốsaveState
.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
Các lệnh gọi có lập trình đến
popBackStack()
hiện có thể bao gồm thêm tham sốsaveState
.
Trong mọi trường hợp, NavController
sẽ lưu và khôi phục trạng thái của mỗi NavBackStackEntry
, bao gồm cả các bản sao ViewModel
trong phạm vi đích điều hướng. Chúng tôi đã cập nhật API Navigator
để cho phép các Navigator
hỗ trợ việc lưu và khôi phục trạng thái của riêng API đó.
ComposeNavigator
dùng cho composable
đích trong Navigation Compose, cũng như FragmentNavigator
và DynamicFragmentNavigator
dùng cho <fragment>
đích trong Navigation với Fragment đều đã được cập nhật để sử dụng API Trình chuyển mới và hỗ trợ việc lưu và khôi phục trạng thái.
Tuyến Navigation
Tuyến là String
xác định một đích duy nhất. Mặc dù trước đây chỉ được sử dụng trong Navigation Compose, nhưng khái niệm này hiện đã được chuyển thành API Navigation chính. Khái niệm này cung cấp một phương án thay thế cho việc sử dụng mã số nguyên khi tạo biểu đồ thông qua Navigation Kotlin DSL (DSL Kotlin điều hướng). (b/172823546)
Tất cả API trước đây chỉ nhận một mã giờ đây có thể nhận nhiều mã theo một tuyến String
. Các API này bao gồm navigate()
, popBackStack()
, popUpTo()
và getBackStackEntry()
.
Điều này có một số ảnh hưởng đến API:
- Chúng tôi đã ngừng sử dụng thuộc tính Kotlin
popUpTo
trên Kotlin DSL và thay bằngpopUpToId
. (I59c73, b/172823546) - API
getStartDestination()
đã ngừng hoạt động và được thay bằnggetStartDestinationId()
. (I0887f, b/172823546)
Đối với các nhà phát triển nâng cấp từ Navigation Compose trước đây thành Navigation Compose 2.4.0-alpha01
, điều này có nghĩa là các lệnh nhập trên các phương thức mở rộng sau không còn cần thiết và cần được xoá:
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
Đối số KEY_ROUTE
đã được thay thế bằng thuộc tính route
trên NavDestination
, cho phép bạn gọi trực tiếp navBackStackEntry.destination.route
.
Thay đổi về API
- Tất cả cấu phần mềm của Navigation đã được viết lại bằng Kotlin. Điều này đã giúp cải thiện tính chất rỗng của các lớp sử dụng thuộc tính chung (chẳng hạn như các lớp con của
NavType
). Tất cả hàm tiện ích Kotlin từng là một phần của cấu phần mềm-ktx
đã được chuyển sang các cấu phần mềm chính tương ứng. Các cấu phần mềm-ktx
sẽ tiếp tục được xuất bản nhưng sẽ trống hoàn toàn. (b/184292145) NavDeepLinkBuilder
hiện hỗ trợ việc thêm nhiều đích riêng biệt vào ngăn xếp lùi được tạo. (I3ee0d, b/147913689)- Thêm các hàm nhà máy
DynamicNavHostFragment
(Icd515, b/175222619) - Mã nhận dạng duy nhất của
NavBackStackEntry
hiện hiển thị dưới dạng một phần của API công khai. (Ie033a) - Các trường
name
vàargument
cùng các hàm giải mãNamedNavArgument
hiện đang ở chế độ công khai. (#174, b/181320559) - Giới thiệu một tiện ích
NavBackStackEntry#provideToCompositionLocals
mới cung cấpNavBackStackEntry
cho yếu tố có thể kết hợp cục bộ có liên quan. (#175, b/187229439)
Safe Args
Safe Args giờ đây có thể tạo phương thức
fromSavedStateHandle()
cho mỗi lớpNavArgs
. (#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) }
Cập nhật Safe Args để phụ thuộc vào KotlinPoet
1.8.0
. (#172, b/183990444)
Các thay đổi về hành vi
- Navigation giờ đây phụ thuộc vào Lifecycle
2.3.1
và đánh dấusetGraph()
,popBackStack()
,navigateUp()
vànavigate()
, các phương thức cập nhậtNavBackStackEntry
Lifecycle
, chẳng hạn như@MainThread
, liên kết Navigation với lệnh thực thi chuỗi chính được nêu trong Lifecycle2.3.0
. (b/171125856) - Việc phân tích cú pháp các đối số Enum từ đường liên kết sâu hiện sẽ không phân biệt chữ hoa chữ thường, cho phép một đường liên kết sâu như
http://www.example.com/red
khớp với một đường liên kết sâuwww.example.com/{color}
ngay cả khi ký tự có giá trịRED
. (#152, b/135857840)
Khả năng tương thích với ứng dụng Compose
androidx.navigation:navigation-compose:2.4.0-alpha01
chỉ tương thích với ứng dụng Compose phiên bản1.0.0-beta07
trở lên.
Sửa lỗi
- Khắc phục vấn đề trong đó phần giữ chỗ đối số cuối sẽ được ưu tiên hơn các đường liên kết sâu có hậu tố khớp chính xác. (#153, b/184072811)
NavHostFragment
hiện hỗ trợ Trình điều hướng tuỳ chỉnh sử dụng cùng@Navigator.Name("dialog")
vớiDialogFragmentNavigator
mặc định. (Ib1c2c, b/175979140)- Đã cải thiện hoạt động của
NavigatorProvider#addNavigator
để đảm bảo việc gọi nó nhiều lần với cùng một bản sao không gây ra lỗi. (#176, b/187443146)
Đóng góp bên ngoài
- Cảm ơn simonschiller đã giúp hỗ trợ Safe Args tạo một phương thức
fromSavedStateHandle()
cho mỗi lớpNavArgs
. (#122, b/136967621) - Cảm ơn Bradleycorn đã phân tích cú pháp các đối số Enum từ đường liên kết sâu không phân biệt chữ hoa chữ thường. (#152, b/135857840)
- Cảm ơn osipxd đã khắc phục vấn đề mà phần giữ chỗ đối số cuối sẽ được ưu tiên hơn các đường liên kết sâu có hậu tố khớp chính xác. (#153, b/184072811)
- Cảm ơn tatocaster đã cập nhật Safe Args để phụ thuộc vào KotlinPoet
1.8.0
. (#172, b/183990444) - Cảm ơn jossiwolf đã đặt các trường
name
vàargument
và huỷ cấu trúc các hàm củaNamedNavArgument
ở chế độ công khai. (#174, b/181320559) - Cảm ơn jossiwolf đã giới thiệu tiện ích
NavBackStackEntry#provideToCompositionLocals
mới cung cấpNavBackStackEntry
cho cấu trúc cục bộ liên quan. (#175, b/187229439) - Cảm ơn jossiwolf đã cải thiện hành vi của
NavigatorProvider#addNavigator
để đảm bảo rằng việc gọi nó nhiều lần với cùng một bản sao không gây ra lỗi. (#176, b/187443146)
Navigation Compose Phiên bản 1.0.0
Phiên bản 1.0.0-alpha10
Ngày 7 tháng 4 năm 2021
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha10
. Phiên bản 1.0.0-alpha10 bao gồm các thay đổi sau.
Thay đổi về API
NavHost
hiện chấp nhậnModifier
. Giá trị này được truyền đến vùng chứa thành phần kết hợp để gói các thành phần kết hợp đích đến. (I85aca, b/175125483)
Sửa lỗi
NavHost
hiện hoạt động ngay cả khi không tìm thấyOnBackPressedDispatcherOwner
, trường hợp này xảy ra khi xem trướcNavHost
. (I7d8b4)- Navigation Compose hiện phụ thuộc vào Navigation
2.3.5
, khắc phục sự cố khi sử dụngBackHandler
bên trong một đíchNavHost
. (I7e63b, b/182284739)
Phiên bản 1.0.0-alpha09
Ngày 10 tháng 3 năm 2021
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha09
. Phiên bản 1.0.0-alpha09 bao gồm các thay đổi sau.
Thay đổi về API
LocalViewModelStoreOwner.current
nay trả về mộtViewModelStoreOwner
rỗng để xác định xemViewModelStoreOwner
có dùng được trong bản Compose hiện tại hay không. Các API đòi hỏi phải cóViewModelStoreOwner
, chẳng hạn nhưviewModel()
vàNavHost
, vẫn sẽ có ngoại lệ nếu bạn không đặtViewModelStoreOwner
. (Idf39a)
Sửa lỗi
- Navigation Compose hiện phụ thuộc vào Navigation 2.3.4, bao gồm bản sửa lỗi để cố gắng đặt cùng một đối tượng ViewModelStore sau khi đặt biểu đồ. (I65c24, b/177825470)
Phiên bản 1.0.0-alpha08
Ngày 24 tháng 2 năm 2021
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha08
. Phiên bản 1.0.0-alpha08 bao gồm các thay đổi sau.
Tính năng mới
NavHost
hiện điền trướcLocalSavedStateRegistryOwner
CompositionLocal vớiNavBackStackEntry
của đích đó, đảm bảo rằng bất kỳ trạng thái nào được lưu trực tiếp vàoSavedStateRegistry
sẽ được lưu và khôi phục cùng với đích. (I435d7, b/179469431)
Phiên bản 1.0.0-alpha07
Ngày 10 tháng 2 năm 2021
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha07
. Phiên bản 1.0.0-alpha07 bao gồm các thay đổi sau.
Thông tin cập nhật về phần phụ thuộc
- Navigation Compose hiện phụ thuộc vào Lifecycle ViewModel Compose 1.0.0-alpha01 để hỗ trợ
viewModel()
cho các đíchcomposable
. (I7a374) NavHost
hiện sử dụngLocalOnBackPressedDispatcherOwner
mới từ Activity- Compose 1.3.0-alpha01 để tảiOnBackPressedDispatcher
được đặt trênNavController
. (I65b12)
Phiên bản 1.0.0-alpha06
Ngày 28 tháng 1 năm 2021
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha06
. Phiên bản 1.0.0-alpha06 bao gồm các thay đổi sau.
Thay đổi về API
- Đã thêm phương thức tiện ích
getBackStackEntry(route: String)
trênNavController
trả vềNavBackStackEntry
liên kết. (If8931)
Phiên bản 1.0.0-alpha05
Ngày 13 tháng 1 năm 2021
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha05
. Phiên bản 1.0.0-alpha05 bao gồm các thay đổi sau.
Cập nhật để phụ thuộc vào Compose 1.0.0-alpha10.
Phiên bản 1.0.0-alpha04
Ngày 16 tháng 12 năm 2020
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha04
. Phiên bản 1.0.0-alpha04 bao gồm các thay đổi sau.
- Cập nhật để tương thích với Compose
1.0.0-alpha09
.
Phiên bản 1.0.0-alpha03
Ngày 2 tháng 12 năm 2020
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha03
. Phiên bản 1.0.0-alpha03 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố trong đó
popBackStack()
vànavigateUp()
không hoạt động sau khi thay đổi cấu hình, hoặc sau khi bị buộc tắt và tạo lại. (Icea47, b/173281473) - Giờ đây, việc điều hướng đến biểu đồ lồng trong NavHost sẽ hoạt động đúng cách. (I0948d, b/173647694)
Phiên bản 1.0.0-alpha02
Ngày 11 tháng 11 năm 2020
Phát hành androidx.navigation:navigation-compose:1.0.0-alpha02
. Phiên bản 1.0.0-alpha02 bao gồm các thay đổi sau.
Thay đổi về API
- Navigation hiện hỗ trợ NavOptions để sử dụng các hoạt động popUpTo và launchSingleTop (If96c3, b/171468994)
- Thêm hàm điều hướng đi theo tuyến thay vì mã cho phép bạn khởi tạo các biểu đồ lồng nhau trong Navigation Compose DSL. (I1661d)
- startDestination hiện xuất hiện trước tuyến trong danh sách tham số cho một NavHost (Ie620e)
- Bạn hiện có thể tạo biểu đồ bằng cách sử dụng tuyến làm điểm xuất phát bên ngoài thành phần kết hợp NavHost. (Iceb75)
Phiên bản 1.0.0-alpha01
Ngày 28 tháng 10 năm 2020
Phát hành android.navigation:navigation-compose:1.0.0-alpha01
. Phiên bản 1.0.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
Cấu phần mềm navigation-compose
cho phép tích hợp giữa Navigation Component với Jetpack Compose. Phương thức này sử dụng các hàm @Composable
làm đích trong ứng dụng.
Bản phát hành đầu tiên này cung cấp:
NavHost
có thể kết hợp cho phép bạn tạo biểu đồ điều hướng qua Kotlin DSL.- Phạm vi của vòng đời,
ViewModel
và trạng thái được ghi nhớ ở cấp đích. - Tích hợp tự động với nút quay lại của hệ thống.
- Hỗ trợ việc truyền các đối số, đính kèm các đường liên kết sâu tới các đích và trả lại kết quả về các đích trước đó.
- Bạn có thể soạn một số trình trợ giúp cụ thể trong
rememberNavController()
vàcurrentBackStackEntryAsState()
để cho phép chuyển trạng thái lên trên và kết nốiNavController
với các thành phần có thể kết nối bên ngoàiNavHost
(chẳng hạn như thanh điều hướng ở dưới cùng).
Xem hướng dẫn về Compose Navigation để biết thêm thông tin.
Phiên bản 2.3.5
Phiên bản 2.3.5
Ngày 7 tháng 4 năm 2021
Phát hành androidx.navigation:navigation-*:2.3.5
. Phiên bản 2.3.5 bao gồm các thay đổi sau.
Tính năng mới
- Khi điều hướng bằng một
NavDeepLinkRequest
hoặcUri
, bạn hiện có thể truy cậpUri
, hành động và loại MIME trong đích kết quả bằng cách nhận ý định từ các đối số thông quaKEY_DEEP_LINK_INTENT
, phản ánh chức năng đã có cho tính năng liên kết sâu bên ngoài. (I975c3, b/181521877)
Sửa lỗi
OnBackPressedCallbacks
đã được thêm vào trình điều phối vớiNavBackStackEntry
làm LifecycleOwner và hiện đã chặn đúng cách sau khi Activity Lifecycle làSTOPPED
, sau đó làSTARTED
(Iff94f, b/182284739)- Việc phân tích cú pháp miền liên kết sâu hiện không phân biệt chữ hoa chữ thường, đảm bảo rằng
www.example.com
khớp với cảwww.example.com
vàwww.Example.com
. Xin lưu ý rằng các tên tham số truy vấn vẫn phân biệt chữ hoa chữ thường. (#144, b/153829033) - Đã khắc phục
NullPointerException
có thể xảy ra khi một đích có nhiều đối số mặc định không thể rỗng và bạn điều hướng đến đích đó trong khi chỉ ghi đè một tập hợp con các đối số đó. (aosp/1644827)
Thông tin cập nhật về phần phụ thuộc
- Trình bổ trợ Navigation Safe Args Gradle hiện phụ thuộc vào Trình bổ trợ Kotlin Gradle 1.4.31. (aosp/1661058, b/181156413)
Đóng góp bên ngoài
- Cảm ơn
bentrengrove
về yêu cầu làm cho sự phân tích cú pháp miền liên kết sâu không phân biệt chữ hoa chữ thường. (#144, b/153829033)
Phiên bản 2.3.4
Phiên bản 2.3.4
Ngày 10 tháng 3 năm 2021
Phát hành androidx.navigation:navigation-*:2.3.4
. Phiên bản 2.3.4 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, các đối số
ReferenceType
có thể được phân tích cú pháp đúng cách khi được gửi dưới dạng một phần của URI đường liên kết sâu. Việc phân tích cú pháp này hỗ trợ cả giá trị số nguyên thô và giá trị thập lục phân có tiền tố0x
. (#127, b/179166693) android:defaultValue
cho đối số cóapp:argType="float"
hiện hỗ trợ giá trị số nguyên mặc định, cho phép bạn sử dụngandroid:defaultValue="0"
thay vì yêu cầu sử dụng0.0
. (#117, b/173766247)
Sửa lỗi
- Khắc phục sự cố cài đặt bị gián đoạn khi sử dụng khả năng hỗ trợ của Navigation cho các tính năng động. (Ib27a7, b/169636207)
- Việc gọi
setViewModelStore
hoặcsetLifecycleOwner
với cùng một đối tượng đã được đặt hiện sẽ không hoạt động (Idf491, b/177825470) - Giờ đây, Safe Args thêm các chú thích chặn trên các phương thức thích hợp khi sử dụng java. (I8fbc5, b/179463137)
Đóng góp bên ngoài
- Cảm ơn
JvmName
về yêu cầu để đảm bảo rằng giờ đâyReferenceType
có thể được phân tích cú pháp một cách chính xác khi gửi trong URI của đường liên kết sâu. (#127, b/179166693) - Cảm ơn
tatocaster
về yêu cầu để cho phépdefaultValue
cho một đối số cóapp:argType=”float”
hiện hỗ trợ giá trị số nguyên mặc định. (#117, b/173766247)
Phiên bản 2.3.3
Phiên bản 2.3.3
Ngày 27 tháng 1 năm 2021
Phát hành androidx.navigation:navigation-*:2.3.3
. Phiên bản 2.3.3 bao gồm các thay đổi sau.
Sửa lỗi
- Sẽ không còn sự cố nữa khi bật
NavBackStackEntry
trước khiLifecycle
được chuyển sangCREATED
. (Ie3ba3) - Sửa lỗi hồi quy do b/171364502 gây ra khi việc điều hướng đến một
hoạt động có giá trị tài nguyên ảnh động là
0
đã gây raResourceNotFoundException
. (I7aedb, b/176819931)
Phiên bản 2.3.2
Phiên bản 2.3.2
Ngày 2 tháng 12 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.2
. Phiên bản 2.3.2 bao gồm các thay đổi sau.
Sửa lỗi
- Đã khắc phục vấn đề hồi quy trong
NavigationUI
mà trong đó việc sử dụng đích<activity>
vớionNavDestinationSelected
sẽ không điều hướng được đến Activity. (I22e34, b/171364502) - Đã khắc phục vấn đề trong đó
navigation-dynamic-features-fragment
dẫn đến việc điều hướng đến đích mới cài đặt nhiều lần. (aosp/1486056, b/169636207) - Đã khắc phục vấn đề không gửi được đối số mặc định đến các bản sao
OnDestinationChangedListener
khi sử dụnglaunchSingleTop
. (I2c5cb) - Đã khắc phục vấn đề trong đó việc điều hướng đến biểu đồ điều hướng lồng nhau sẽ không tạo bản sao biểu đồ mới trên ngăn xếp lui. (Ifc831)
- Khắc phục sự cố trong đó việc sử dụng
navigate()
vớipopUpTo
đã xoá đích đến cuối cùng trong biểu đồ điều hướng sẽ không huỷ ngay và xoá chính biểu đồ điều hướng khỏi ngăn xếp lui. (I910a3) - Navigation SafeArgs hiện sử dụng KotlinPoet phiên bản 1.7.2, hỗ trợ thêm chế độ API rõ ràng của Kotlin. (I918b5)
- Giờ đây,
NavHostFragment.findNavController(Fragment)
cũng kiểm tra chế độ xem trang trí gốc của DialogFragment ngoài các hoạt động kiểm tra hiện tại của hệ thống phân cấp Fragment và phân cấp chế độ xem của Fragment. Việc này cho phép bạn thử nghiệm các đoạn hộp thoại sử dụng Navigation vớiFragmentScenario
vàNavigation.setViewNavController()
. (I69e0d)
Phiên bản 2.3.1
Phiên bản 2.3.1
Ngày 14 tháng 10 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.1
. Phiên bản 2.3.1 bao gồm các thay đổi sau.
Tính năng mới
- Chúng tôi đã thêm các tài nguyên Trình tạo động mặc định vào Giao diện người dùng Navigation để khuyến khích sử dụng thay cho tài nguyên ảnh động mặc định. (b/167430145)
- NavOptions hiện ghi đè mã băm và phương thức bằng (b/161586466)
- Navigation hiện bao gồm đích hiện tại trong lỗi "Không có đích có mã" IllegalArgumentException, thông tin này sẽ giúp cải thiện trải nghiệm gỡ lỗi dành cho nhà phát triển. (b/168311416)
Sửa lỗi
- Safe Args sẽ không còn ngắt dòng trả về, ngay cả khi tên lớp đối số được tạo dài hơn 100 ký tự. (b/168584987)
Thay đổi về phần phụ thuộc
navigation-ui
bây giờ phụ thuộc vào DrawerLayout 1.1.1, đảm bảo rằngNavigationUI
có thể mở ngăn ngay cả khi sử dụngLOCK_MODE_LOCKED_CLOSED
hoặcLOCK_MODE_LOCKED_OPEN
. (b/162253907)- Safe Args hiện phụ thuộc vào KotlinPoet 1.6.0 (aosp/1435911)
- Safe Args hiện phụ thuộc vào AGP 4.0.1 (aosp/1442337)
Phiên bản 2.3.0
Phiên bản 2.3.0
Ngày 24 tháng 6 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0
. Phiên bản 2.3.0 bao gồm các thay đổi sau.
Thay đổi lớn từ phiên bản 2.2.0
- Tích hợp mô-đun tính năng: Cấu phần mềm
navigation-dynamic-features-runtime
vànavigation-dynamic-features-fragment
cho phép bạn điều hướng đến các đích được xác định trong các mô-đun tính năng, tự động xử lý việc cài đặt các mô-đun tính năng khi cần. Xem phần điều hướng với các mô-đun tính năng để biết thêm thông tin. - Thử nghiệm Navigation: Cấu phần mềm
navigation-testing
cung cấpTestNavHostController
cho phép bạn đặt đích hiện tại và xác minh ngăn xếp lui sau thao tác điều hướng. Xem phần Thử nghiệm Navigation để biết thêm thông tin. - Trả về kết quả:
NavBackStackEntry
liên kết với mỗi đích trên ngăn xếp lui Navigation hiện cho phép bạn truy cập vàoSavedStateHandle
phù hợp để lưu trữ trạng thái lưu trữ nhỏ cần liên kết với một mục cụ thể trong ngăn xếp lui. Xem phần Trả lại kết quả về đích trước đó để biết thêm thông tin. - Hỗ trợ
NavigationUI
choOpenable
: Tất cả trường hợp sử dụngDrawerLayout
trongNavigationUI
đã được thay thế bằng giao diệnOpenable
tổng quát hơn trong CustomView1.1.0
và đượcDrawerLayout
triển khai trong DrawerLayout1.1.0
. - Hỗ trợ Loại MIME và hành động trong đường liên kết sâu: Mở rộng đường liên kết sâu để hỗ trợ
app:action
vàapp:mimeType
ngoàiapp:uri
hiện có.NavController
hiện hỗ trợ việc điều hướng theo bất kỳ tổ hợp nào của các trường này thông qua lớpNavDeepLinkRequest
mới. Xem phần điều hướng bằng NavDeepLinkRequest để biết thêm thông tin.
Vấn đề đã biết
- Manifest Merger chưa hỗ trợ các thao tác liên kết sâu và loại MIME. Cho đến khi hoàn tất tính năng này, mọi phần tử
<intent-filter>
được tạo từ phần tử<nav-graph>
trong tệp kê khai sẽ không bao gồm loại MIME trong phần tử<data>
hoặc<action>
tuỳ chỉnh. Bạn phải tự thêm<intent-filter>
thích hợp vào tệp kê khai.
Phiên bản 2.3.0-rc01
Ngày 10 tháng 6 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-rc01
. Phiên bản 2.3.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Đã sửa
NullPointerException
khi thay thế một bản sao của một đích không có đối số nào bằng một bản sao khác có đối số bằngsingleTop
. (b/158006669) - Tất cả trường hợp ngoại lệ
destination is unknown
doNavController
gửi đều có thông tin gỡ lỗi bổ sung để giúp xác định trạng thái củaNavController
. (b/157764916)
Phiên bản 2.3.0-beta01
Ngày 20 tháng 5 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-beta01
. Phiên bản 2.3.0-beta01 bao gồm các thay đổi sau.
Sửa lỗi
- Đã khắc phục sự cố trong đó
Lifecycle
củaNavBackStackEntry
không được cập nhật đúng cách sau khi quá trình bị gián đoạn. (b/155218371) - Giờ đây, bản sao
OnDestinationChangedListener
đã đăng ký trước khi gọisetGraph()
sẽ được gửi đúng cách đến đích sau khi quá trình bị gián đoạn. (b/155218371) - Khi sử dụng
singleTop
,NavBackStackEntry
hiện đã cập nhật chính xác các đối số và các đối số cập nhật đã được gửi đến tất cả bản saoOnDestinationChangeListener
. (b/156545508)
Thông tin cập nhật về phần phụ thuộc
- Cấu phần mềm
NavigationUI
hiện phụ thuộc vàoCustomView1.1.0-rc01
và DrawerLayout1.1.0-rc01
. (aosp/1309696)
Phiên bản 2.3.0-alpha06
Ngày 29 tháng 4 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-alpha06
. Phiên bản 2.3.0-alpha06 bao gồm các thay đổi sau.
Tính năng mới
- Việc liên kết sâu đã được mở rộng để hỗ trợ
app:action
vàapp:mimeType
ngoàiapp:uri
hiện có. NavController hiện hỗ trợ điều hướng bằng bất kỳ sự kết hợp nào của các trường này thông qua lớpNavDeepLinkRequest
mới. (b/136573074, b/135334841)
Thay đổi về API
- Đã mở rộng đáng kể phạm vi hỗ trợ Kotlin DSL cho các đích Navigation động. (b/148969800)
Sửa lỗi
- Khắc phục vấn đề trong đó Ý định liên kết sâu sẽ bị bỏ qua khi sử dụng đích đến bắt đầu lồng nhau. (b/154532067)
Phiên bản 2.3.0-alpha05
Ngày 15 tháng 4 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-alpha05
. Phiên bản 2.3.0-alpha05 bao gồm các thay đổi sau.
Tính năng mới
- Đối với biểu đồ động bao gồm
<include-dynamic>
, bạn không cần chỉ địnhapp:graphPackage
nữa và chỉ số mặc định sẽ được sử dụng bằng cách thêm hậu tốmoduleName
vàoapplicationId
sau dấu chấm. Nếu bạn cần tuỳ chỉnhgraphPackage
, thì trình giữ chỗ${applicationId}
hiện đã được hỗ trợ. (b/152696768) - Navigation Graph Kotlin DSL hiện đã hiển thị
defaultArguments
Map
cho các hành động, phản ánh khả năng đặt giá trị mặc định trên các phần tử<action>
trong các tệp XML điều hướng. (b/150345605)
Sửa lỗi
- Trong phiên bản Navigation 2.2.2: Khắc phục
IllegalStateException
khi liên kết sâu đến đích bắt đầu của biểu đồ khi bạn có nhiều thực thểNavHostFragment
trong Activity. (b/147378752)
Thông tin cập nhật về phần phụ thuộc
- Hiện tại, Navigation sẽ phụ thuộc vào Fragment
1.2.4
. (aosp/1277325) - Navigation động hiện phụ thuộc vào Play Core
1.7.2
. (aosp/1282257)
Phiên bản 2.3.0-alpha04
Ngày 18 tháng 3 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-alpha04
. Phiên bản 2.3.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Thêm tuỳ chọn hỗ trợ cho hoạt động của mô-đun tính năng và đích mảnh trong Navigation Kotlin DSL. (b/148969800)
Thay đổi về API
- Lớp
DynamicExtras
không còn sử dụng mẫu trình tạo và hiện có thể tạo trực tiếp. (aosp/1253671) DynamicActivityNavigator
hiện sẽ lấyContext
trong hàm khởi tạo của nó thay vìActivity
. (aosp/1250252)
Sửa lỗi
NavigationUI
không bỏ qua các nhãn trống (tức là đích cóandroid:label=””
) và hiện đặt chính xác tiêu đề thành một chuỗi trống. (b/148679860)
Thông tin cập nhật về phần phụ thuộc
- Các cấu phần mềm Tính năng động Navigation hiện phụ thuộc vào Play Core
1.6.5
. (b/149556401)
Phiên bản 2.3.0-alpha03
Ngày 4 tháng 3 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-alpha03
. Phiên bản 2.3.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về API
- Thay vì dựa vào lớp
DrawerLayout
cụ thể,AppBarConfiguration
hiện sử dụng giao diệnOpenable
được nêu trong CustomView1.1.0-alpha02
(DrawerLayout
triển khai kể từ DrawerLayout1.1.0-alpha04
), cho phép bạn sử dụng các biện pháp triển khai tuỳ chỉnh củaOpenable
vớiNavigationUI
. (b/129030452)
Sửa lỗi
- Hiện tại, các quy tắc
navigation-common-ktx
ProGuard chỉ giữ lại các lớpNavArgs
được dùng thay vì tất cả bản saoNavArgs
. (b/150213558)
Thay đổi về phần phụ thuộc
- Navigation đã huỷ bỏ phần phụ thuộc trên Core
1.2.0
và giờ đây phụ thuộc vào Core1.1.0
để tránh buộc các nhà phát triển phải chuyển sang phần phụ thuộc mới khi Navigation không phụ thuộc vào bất kỳ API mới nào trong Core1.2.0
.
Phiên bản 2.3.0-alpha02
Ngày 19 tháng 2 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-alpha02
. Phiên bản 2.3.0-alpha02 bao gồm các thay đổi sau.
Tính năng mới
NavBackStackEntry
hiện cho phép bạn truy cậpSavedStateHandle
phù hợp để lưu trữ một lượng nhỏ trạng thái đã lưu cần liên kết với một mục trong ngăn xếp lui cụ thể. Hãy xem phần Trả lại kết quả để biết ví dụ về một trường hợp sử dụng. (b/79672220)
Thay đổi về API
- Đã thêm các phương thức tiện lợi của
getCurrentBackStackEntry()
vàgetPreviousBackStackEntry()
để giúp bạn truy xuấtNavBackStackEntry
cho các đích hiện tại và trước đó dễ dàng hơn. (b/79672220)
Sửa lỗi
navigateUp()
hiện sẽ chuyển đối số đích hiện tại vàKEY_DEEP_LINK_INTENT
đến đích trước đó khi chạy ứng dụng trên ngăn xếp nhiệm vụ của riêng bạn. (b/147456890)
Thay đổi về phần phụ thuộc
- Hiện tại, Navigation phụ thuộc vào Core
1.2.0
.
Phiên bản 2.3.0-alpha01
Ngày 5 tháng 2 năm 2020
Phát hành androidx.navigation:navigation-*:2.3.0-alpha01
. Phiên bản 2.3.0-alpha01 bao gồm các thay đổi sau.
Tính năng mới
- Cấu phần mềm
navigation-testing
mới cung cấp một lớpTestNavHostController
. Lớp này cung cấp một phương án thay thế cho việc sử dụngNavController
mô phỏng khi thử nghiệm Navigation. Việc này cho phép bạn đặt đích hiện tại và xác minh ngăn xếp lui sau thao tác điều hướng. (b/140884273) navigation-dynamic-features-fragment
mới (và phần phụ thuộc chuyển đổinavigation-dynamic-features-runtime
) cho phép bạn đưa đích đến hoặc toàn bộ biểu đồ điều hướng (thông qua<include-dynamic>
) vào từ các mô-đun tính năng, giúp cài đặt liền mạch các mô-đun tính năng theo yêu cầu khi điều hướng đến các đích đó. Xem phần điều hướng với các mô-đun tính năng để biết thêm thông tin. (b/132170186)
Sửa lỗi
- Trên trang Navigation
2.2.1
: Đường liên kết sâu không có tham số truy vấn hiện sẽ bỏ qua mọi tham số truy vấn thay vì thêm các tham số truy vấn đó vào các phần tử{argument}
cuối hoặc không khớp với đường liên kết sâu. (b/147447512) - Từ Navigation
2.2.1
: Chúng tôi đã cập nhật các quy tắcnavigation-ui
ProGuard choDrawerArrowDrawable
để đảm bảo rằngandroid.enableJetifier=true
là không bắt buộc. (b/147610424) - Từ Navigation
2.2.1
: Mô-đunnavigation-common-ktx
hiện có tên gói tệp kê khai duy nhất thay vì dùng chung tên gói tệp kê khai nhưnavigation-runtime-ktx
. (aosp/1141947)
Thông tin cập nhật về phần phụ thuộc
- Từ Navigation
2.2.1
: Navigation2.2.1
hiện tuỳ thuộc vào Lifecycle ViewModel SavedState2.2.0
và Fragment1.2.1
.
Phiên bản 2.2.2
Phiên bản 2.2.2
Ngày 15 tháng 4 năm 2020
Phát hành androidx.navigation:navigation-*:2.2.2
. Phiên bản 2.2.2 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục
IllegalStateException
khi liên kết sâu đến đích bắt đầu của biểu đồ khi bạn có nhiều thực thểNavHostFragment
trong Activity (Hoạt động). (b/147378752) NavigationUI
không bỏ qua các nhãn trống (tức là đích cóandroid:label=””
) và hiện đặt chính xác tiêu đề thành một chuỗi trống. Tính năng này đã được phát hành trước đó trong phiên bản Navigation 2.3.0-alpha04. (b/148679860)- Hiện tại, các quy tắc
navigation-common-ktx
ProGuard chỉ giữ lại các lớpNavArgs
được dùng thay vì tất cả bản saoNavArgs
. Tính năng này đã được phát hành trước đó trong phiên bản Navigation 2.3.0-alpha03. (b/150213558
Thông tin cập nhật về phần phụ thuộc
- Hiện tại, Navigation sẽ phụ thuộc vào Fragment
1.2.4
. (aosp/1277325)
Phiên bản 2.2.1
Phiên bản 2.2.1
Ngày 5 tháng 2 năm 2020
Phát hành androidx.navigation:navigation-*:2.2.1
. Phiên bản 2.2.1 bao gồm các thay đổi sau.
Sửa lỗi
- Những đường liên kết sâu không có tham số truy vấn hiện sẽ bỏ qua mọi tham số truy vấn thay vì thêm các tham số đó vào phần tử
{argument}
cuối hoặc không khớp với đường liên kết sâu. (b/147447512) - Chúng tôi đã cập nhật các quy tắc
navigation-ui
ProGuard choDrawerArrowDrawable
để đảm bảo rằngandroid.enableJetifier=true
là không bắt buộc. (b/147610424) - Mô-đun
navigation-common-ktx
hiện có tên gói tệp kê khai duy nhất thay vì dùng chung tên gói tệp kê khai nhưnavigation-runtime-ktx
. (aosp/1141947)
Thông tin cập nhật về phần phụ thuộc
- Navigation
2.2.1
bây giờ tuỳ thuộc vào Lifecycle ViewModel SavedState2.2.0
và Fragment1.2.1
,
Phiên bản 2.2.0
Phiên bản 2.2.0
Ngày 22 tháng 1 năm 2020
Phát hành androidx.navigation:navigation-*:2.2.0
. Phiên bản 2.2.0 bao gồm các thay đổi sau.
Thay đổi quan trọng kể từ phiên bản 2.1.0
- NavBackStackEntry: Bây giờ bạn có thể gọi
NavController.getBackStackEntry()
, truyền trong mã nhận dạng của một đích đến hoặc biểu đồ điều hướng trên ngăn xếp lui.NavBackStackEntry
được trả về cung cấpLifecycleOwner
dựa trên Navigation,ViewModelStoreOwner
(cùng giá trị đượcNavController.getViewModelStoreOwner()
trả về) vàSavedStateRegistryOwner
, ngoài việc cung cấp các đối số dùng để bắt đầu đích đó. - Tích hợp Lifecycle ViewModel SavedState:
SavedStateViewModelFactory
hiện là nhà máy mặc định được sử dụng khi sử dụngby navGraphViewModels()
hoặc hàm khởi tạoViewModelProvider
cóViewModelStoreOwner
đượcNavController.getBackStackEntry()
hoặcNavController.getViewModelStoreOwner()
trả về. - Hỗ trợ tham số truy vấn cho đường liên kết sâu: Các đường liên kết sâu có tham số truy vấn hiện hỗ trợ các tham số truy vấn được sắp xếp lại; các đối số có giá trị mặc định hoặc không có giá trị giờ đây là không bắt buộc khi so khớp đường liên kết sâu.
- Cải thiện tính năng hỗ trợ ảnh động:
NavHostFragment
hiện sử dụngFragmentContainerView
từ Fragment 1.2.0, khắc phục các vấn đề thứ tự ảnh động z và các phần lồng ghép cửa sổ gửi đến Fragment.
Phiên bản 2.2.0-rc04
Ngày 18 tháng 12 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-rc04
. Phiên bản 2.2.0-rc04 bao gồm các thay đổi sau.
Sửa lỗi
- Đã điều chỉnh ảnh động mờ mặc định mà
navigation-ui
sử dụng để khớp với ảnh động làm mờ được điều chỉnh trong Fragment1.2.0-rc04
. (b/145769814)
Phiên bản 2.2.0-rc03
Ngày 4 tháng 12 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-rc03
. Phiên bản 2.2.0-rc03 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục sự cố phân tích cú pháp đường liên kết sâu, trong đó việc sử dụng các tham số truy vấn và đối số làm phần cuối của đường dẫn ngăn không cho phân tích cú pháp nhiều ký tự của đối số đường dẫn cuối cùng. (b/144554689)
- Khắc phục sự cố phân tích cú pháp đường liên kết sâu, trong đó các tham số không bắt buộc sẽ nhận
"@null"
thay vìnull
. (b/141613546) NavHostFragment
hiện khôi phục chính xác biểu đồ sau khi thay đổi chế độ cấu hình khi được sử dụng vớiFragmentContainerView
. (b/143752103)
Thay đổi về phần phụ thuộc
- Navigation bây giờ phụ thuộc vào Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
và Fragment1.2.0-rc03
nếu thích hợp.
Phiên bản 2.2.0-rc02
Ngày 7 tháng 11 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-rc02
. Phiên bản 2.2.0-rc02 bao gồm các thay đổi sau.
Thay đổi về phần phụ thuộc
- Hiện Navigation phụ thuộc vào androidx.lifecycle
2.2.0-rc02
.
Phiên bản 2.2.0-rc01
Ngày 23 tháng 10 năm 2019
androidx.navigation:navigation-*:2.2.0-rc01
được phát hành mà không có thay đổi nào kể từ 2.2.0-beta01
. Phiên bản 2.2.0-rc01 bao gồm các thay đổi sau.
Phiên bản 2.2.0-beta01
Ngày 9 tháng 10 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-beta01
. Phiên bản 2.2.0-beta01 bao gồm các thay đổi sau.
Tính năng mới
NavDestination
và các lớp con của lớp này hiện ghi đètoString()
để cung cấp nhiều thông tin hữu ích hơn khi gỡ lỗi. (b/141264986)
Thay đổi về hành vi
- Giờ đây, các tham số truy vấn bổ sung sẽ bị bỏ qua khi so khớp đường liên kết sâu thay vì khiến quá trình so khớp không thành công. (b/141482822)
Sửa lỗi
- Đã khắc phục vấn đề trong đó các đối số trong đường dẫn của đường liên kết sâu sẽ bị bỏ qua nếu bạn cũng chỉ định các tham số truy vấn. (b/141505755)
- Phần mở rộng Kotlin của
navArgs()
trênActivity
hiện có một thông báo lỗi hiệu quả hơn khi không có tiện ích nào khác. (b/141408999) - Lớp Java
Directions
do Safe Args tạo hiện chứa giá trị mặc định. (b/141099045) - Lớp Java
Args
do Safe Args tạo hiện chứa giá trị mặc định. (b/140123727) - Khi sử dụng
Toolbar
,NavigationUI
không còn tạo ảnh động cho thay đổi văn bản khi điều hướng giữa hai đích cấp cao nhất. (b/140848160)
Phiên bản 2.2.0-alpha03
Ngày 18 tháng 9 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-alpha03
. Phiên bản 2.2.0-alpha03 bao gồm các thay đổi sau.
Thay đổi về hành vi
- Nếu gọi
setViewModelStore()
sau khi gọisetGraph
, thì bạn sẽ nhận đượcIllegalStateException
.NavHost
phải luôn đặt giá trị này trong quá trình thiết lập ban đầu để đảm bảo rằng tất cả bản saoNavBackStackEntry
đều có chế độ lưu trữ nhất quán cho các bản saoViewModel
. (aosp/1111821)
Sửa lỗi
- Khắc phục
ConcurrentModificationException
khi sử dụng thực thểViewModel
được đính kèm với nhiều thực thểViewModelStore
khác nhau trong phạm vi biểu đồ điều hướng. (aosp/1112257)
Phiên bản 2.2.0-alpha02
Ngày 5 tháng 9 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-alpha02
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Tính năng mới
- Đường liên kết sâu với các tham số truy vấn hiện hỗ trợ các tham số truy vấn được sắp xếp lại; các đối số có giá trị mặc định hoặc không có giá trị giờ đây là không bắt buộc khi so khớp đường liên kết sâu. (b/133273839)
- Bây giờ bạn có thể gọi
NavController.getBackStackEntry()
, chuyển mã đích hoặc biểu đồ điều hướng trên ngăn xếp lui.NavBackStackEntry
được trả về cung cấpLifecycleOwner
dựa trên Navigation,ViewModelStoreOwner
(cùng giá trị đượcNavController.getViewModelStoreOwner()
trả về) vàSavedStateRegistryOwner
, ngoài việc cung cấp các đối số còn dùng để bắt đầu đích đó. (aosp/1101691, aosp/1101710)
Sửa lỗi
- Khắc phục vấn đề không thể thêm
NavHostFragment
vàoViewPager2
bằngIllegalArgumentException
. (b/133640271) - Giờ đây,
NavInflater
tránh gọigetResourceName()
không cần thiết, đẩy nhanh thời gian tăng cường lên tới 40%. (b/139213740)
Phiên bản 2.2.0-alpha01
Ngày 7 tháng 8 năm 2019
Phát hành androidx.navigation:navigation-*:2.2.0-alpha01
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Tính năng mới
SavedStateViewModelFactory
hiện là nhà máy mặc định được sử dụng khi sử dụngby navGraphViewModels()
hoặc hàm khởi tạoViewModelProvider
cóViewModelStoreOwner
đượcNavController.getViewModelStoreOwner()
trả về. (b/135716331)
Thay đổi về API
- Từ phiên bản Navigation
2.1.0-rc01
: APIgetViewModelStore()
không dùng nữa trênNavController
(được đưa vào2.1.0-alpha02
) đã bị xoá. (aosp/1091021)
Sửa lỗi
NavHostFragment
hiện sử dụngFragmentContainerView
, khắc phục các vấn đề thứ tự ảnh động z và tổng hợp các phần lồng ghép cửa sổ gửi đến các Fragment. (b/137310379)
Phiên bản 2.1.0
Phiên bản 2.1.0
Ngày 5 tháng 9 năm 2019
Phát hành androidx.navigation:navigation-*:2.1.0
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Thay đổi quan trọng kể từ phiên bản 2.0.0
- Chuyển ViewModel thành biểu đồ điều hướng: Giờ đây, bạn có thể tạo ViewModel trong phạm vi ở cấp biểu đồ điều hướng bằng cách uỷ quyền thuộc tính
by navGraphViewModels()
cho người dùng Kotlin sử dụng thư viện-ktx
hoặc bằng cách sử dụng APIgetViewModelStoreOwner()
đã thêm vàoNavController
. Hãy xem phần Chia sẻ dữ liệu liên quan đến giao diện người dùng giữa các đích để biết thêm thông tin. - Đích của hộp thoại: Giờ đây, bạn có thể tạo
<dialog>
đích sẽ hiển thịDialogFragment
khi bạnnavigate
cho chúng. Theo mặc định,NavHostFragment
sẽ hỗ trợ các đích của hộp thoại. Hãy xem phần Tạo đích từ DialogFragment để biết thêm thông tin. - điều hướng bằng URI: Bạn hiện có thể
navigate
bằngUri
, vốn sử dụng<deepLink>
mà bạn đã thêm vào một đích để điều hướng đến đó. Hãy xem phần điều hướng bằng URI để biết thêm thông tin. - NavHostController: API dùng riêng để khởi tạo
NavHost
tuỳ chỉnh đã được chuyển sangNavHostController
, cho phép các phương thức triển khai kết nốiNavController
với dịch vụ lưu trữLifecycleOwner
,OnBackPressedDispatcher
vàViewModelStore
.
Phiên bản 2.1.0-rc01
Ngày 7 tháng 8 năm 2019
Phát hành androidx.navigation:navigation-*:2.1.0-rc01
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Thay đổi về API
- API
getViewModelStore()
không dùng nữa trênNavController
được giới thiệu trong2.1.0-alpha02
đã bị xoá. (aosp/1091021)
Phiên bản 2.1.0-beta02
Ngày 19 tháng 7 năm 2019
Phát hành androidx.navigation:*:2.1.0-beta02
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Sửa lỗi
- Xoá phần phụ thuộc jacoco ngoài ý muốn đã được giới thiệu trong
2.1.0-beta01
. (b/137782950)
Phiên bản 2.1.0-beta01
Ngày 17 tháng 7 năm 2019
Phát hành androidx.navigation:*:2.1.0-beta01
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Tính năng mới
- Giờ đây,
NavigationUI
sẽ thể hiện ảnh động xoá nút Mũi tên lên khi sử dụngsetupWithNavController()
vớiToolbar
hoặcCollapsingToolbarLayout
. (b/131403621)
Sửa lỗi
- Đã khắc phục vấn đề về thời gian khi sử dụng nhiều NavHostFragments với cùng một vùng chứa có
findNavController()
. (b/136021571)
Phiên bản 2.1.0-alpha06
Ngày 2 tháng 7 năm 2019
Phát hành androidx.navigation:*:2.1.0-alpha06
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Tính năng mới
- Thuộc tính
app:navGraph
mà NavHostFragment sử dụng hiện đã được chuyển sang cấu phần mềmnavigation-runtime
. Trình điều hướng tuỳ chỉnh có thể được thêm vào qua XML phải sử dụng thuộc tính này để tích hợp với bảng điều khiển chủ của Trình chỉnh sửa Navigation. (b/133880955)
Thay đổi về API
- API
getViewModelStore()
trênNavController
đã ngừng hoạt động, thay vào đó là phương thứcgetViewModelStoreOwner()
mới sẽ trả vềViewModelStoreOwner
. (aosp/987010) - Việc triển khai các đích cửa sổ nổi, chẳng hạn như các đích
<dialog>
, đã được tổng quát thành giao diện điểm đánh dấuFloatingWindow
, mà tất cả đích<dialog>
hiện đang triển khai. Giờ đây, các phương thức NavigationUI tương tác với thanh ứng dụng hàng đầu sẽ bỏ qua đíchFloatingWindow
. (b/133600763)
Thay đổi về hành vi
- Bây giờ, Navigation sẽ đồng bộ hoá chính xác trạng thái của bản thân với nội dung hiển thị trên màn hình khi dùng đích
<dialog>
. Do đó, Navigation hiện sẽ tự động bật đích đến<dialog>
khi bạn chuyển tới một đích đến không phải là hộp thoại cũng không phải hoạt động, chẳng hạn như đích đến<fragment>
. (b/134089818)
Sửa lỗi
- Giờ đây, Navigation sẽ ngăn chặn ảnh động xảy ra khi tạo lại hoạt động khi xử lý đường liên kết sâu, sửa một flash hiển thị. (b/130362979)
- Khắc phục lỗi khiến ngăn xếp lui Navigation (Điều hướng) không đồng bộ hoá khi thêm chế độ hiển thị một mảnh dưới dạng mảnh ban đầu. (b/133832218)
Phiên bản 2.1.0-alpha05
Ngày 5 tháng 6 năm 2019
Phát hành androidx.navigation:*:2.1.0-alpha05
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Thay đổi về API
- Các API liên quan đến máy chủ trên
NavController
đã được đổi tên và chuyển sang lớp con mới củaNavController
,NavHostController
. (aosp/966091) - Phương thức
NavController
setHostOnBackPressedDispatcherOwner()
đã được thay thế bằng phương thứcsetOnBackPressedDispatcher()
củaNavHostController
và hiện yêu cầu bạn gọisetLifecycleOwner()
trước khi gọi phương thức này. (aosp/965409) NavHostController
hiện chứa một phương thứcenableOnBackPressed(boolean)
thay thế lớpNavHostOnBackPressedManager
màsetHostOnBackPressedDispatcherOwner()
đã trả về trước đó. (aosp/966091)
Sửa lỗi
- Khắc phục sự cố trong đó ngăn xếp lui không chính xác sau khi điều hướng theo URI. (b/132509387)
- Các đường liên kết sâu do NavController xử lý tự động hiện chỉ được kích hoạt một lần. (b/132754763)
Phiên bản 2.1.0-alpha04
Ngày 16 tháng 5 năm 2019
Phát hành androidx.navigation:*:2.1.0-alpha04
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Sửa lỗi
NavHostFragment
tuân thủ đúngapp:defaultNavHost
khi chặn các sự kiện của nút Quay lại trên hệ thống, khắc phục sự hồi quy trong Navigation2.1.0-alpha03
. b/132077777DialogFragmentNavigator
hiện đã xử lý chính xác các thao tácpopBackStack()
vànavigateUp()
. b/132576764- Khắc phục sự cố
IllegalStateException: unknown destination during restore
khi điều hướng liên tục giữa các biểu đồ lồng nhau. b/131733658
Phiên bản 2.1.0-alpha03
Ngày 7 tháng 5 năm 2019
Phát hành androidx.navigation:*:2.1.0-alpha03
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Vấn đề đã biết
- NavHostFragment tiếp tục chặn nút Quay lại của hệ thống mặc dù có sử dụng
app:defaultNavHost="false"
b/132077777
Tính năng mới
- Giờ đây, bạn có thể tạo đích đến
<dialog>
sẽ hiển thịDialogFragment
khi bạnnavigate
vào các đích đến đó. Theo mặc định,NavHostFragment
sẽ hỗ trợ các đích của hộp thoại. b/80267254 - Ngoài việc gọi
navigate
bằng mã tài nguyên hoặc bản saoNavDirections
, giờ đây, bạn có thể điều hướng thông quaUri
. Công cụ này sử dụng<deepLink>
mà bạn đã thêm vào một đích để điều hướng đến đúng đích. b/110412864
Thay đổi về hành vi
- Các ảnh động mặc định do NavigationUI cung cấp đã được tăng tốc từ 400 mili giây lên 220 mili giây nhằm phù hợp với tốc độ hoạt ảnh mặc định của các hoạt động và mảnh. b/130055522
Thay đổi về API
- Phương thức
NavHostFragment
củacreateFragmentNavigator()
không còn được dùng nữa và chức năng của phương thức này đã chuyển sang phương thứconCreateNavController()
mới để giúp rõ ràng hơn rằng đây là điểm truy cập chính xác khi thêm Trình điều hướng tuỳ chỉnh khi phân lớpNavHostFragment
. b/122802849 - Phương pháp
hasDeepLink()
đã được thêm vàoNavDestination
để cho phép bạn kiểm tra xem mộtUri
cụ thể có thể được đích đó xử lý hay không hoặc trong trường hợp củaNavGraph
là bất kỳ đích nào trong biểu đồ điều hướng. b/117437718
Sửa lỗi
- Các đối số mặc định hiện được chuyển đến bản sao
OnDestinationChangedListener
một cách chính xác. b/130630686 NavHostFragment
hiện đã chặn sự kiện Quay lại của hệ thống bằngOnBackPressedDispatcher
, khắc phục sự cố khi thực hiện việc điều hướng có điều kiện trong phương thức vòng đời của Fragment khi trả về một Fragment. b/111598096- Đối với Safe Args, một
android:defaultValue=”@null”
cóapp:argType
không xác định giờ đây sẽ được suy luận chính xác dưới dạng đối sốstring
. b/129629192
Phiên bản 2.1.0-alpha02
Ngày 3 tháng 4 năm 2019
Phát hành androidx.navigation:*:2.1.0-alpha02
. Bạn có thể xem các thay đổi trong phiên bản này tại đây.
Tính năng mới
- Bạn hiện có thể tạo ViewModels trong phạm vi ở cấp biểu đồ điều hướng bằng cách sử dụng sự uỷ quyền thuộc tính
by navGraphViewModels()
cho người dùng Kotlin hoặc bằng cách sử dụng APIgetViewModelStore()
đã thêm vàoNavController
. b/111614463
Thay đổi về API
- Giờ đây, bạn có thể thêm
app:targetPackage
vào đích<activity>
để giới hạn tên gói trùng khớp. Cách này hỗ trợapp:targetPackage="${applicationId}"
hạn chế gói trong mã ứng dụng của riêng bạn. b/110975456
Sửa lỗi
android:name
cho đích<activity>
không còn được phân tích cú pháp thành Class tại thời điểm tăng cường, ngăn ClassNot FoundExceptions khi sử dụng các tính năng động. b/124538597
Phiên bản 2.1.0-alpha01
Ngày 19 tháng 3 năm 2019
Đây là bản phát hành alpha đầu tiên của Navigation 2.1.0
.
Thay đổi về phần phụ thuộc
- Hiện tại, Navigation phụ thuộc vào
androidx.core:core:1.0.1
vàandroidx.fragment:fragment:1.1.0-alpha05
. Bản phát hành này cũng xoá phần phụ thuộc vàoandroidx.legacy:legacy-support-core-utils:1.0.0
. b/128632612
Thay đổi về API
- Phương thức
Navigation.createNavigateOnClickListener(NavDirections)
mới đã được thêm vào để thay thế cho việc tạo trình nghe lượt nhấp với Mã tài nguyên và Gói. b/127631752 FragmentNavigator.instantiateFragment
hiện không dùng nữa. Bây giờ, việc triển khai mặc định sử dụngFragmentFactory
để tạo bản sao Fragment. b/119054429
Sửa lỗi
- Navigation sẽ không còn gửi
Bundle
rỗng nữa khi có các đối số đính kèm đến một đích, khắc phục sự cố khi sử dụngandroid:defaultValue="@null"
. b/128531879 - Giờ đây, các giá trị Safe Args hiện phụ thuộc vào KotlinPoet 1.1.0, khắc phục vấn đề về tên gói cực kỳ dài. b/123654948
Phiên bản 2.0.0
Phiên bản 2.0.0
Ngày 14 tháng 3 năm 2019
Navigation 2.0.0
được phát hành mà không có thay đổi nào từ 2.0.0-rc02
.
Phiên bản 2.0.0-rc02
Ngày 6 tháng 3 năm 2019
Navigation 2.0.0-rc02 cung cấp cấu phần mềm mới có mã nhóm androidx.navigation
và thay đổi các phần phụ thuộc thành các phần tử tương đương của AndroidX.
Hành vi của 2.0.0-rc02 giống với hành vi của Navigation 1.0.0-rc02 và không cần thay đổi mã để cập nhật từ 1.0.0-rc02, ngoài việc cập nhật các phần phụ thuộc để khớp với các phần phụ thuộc mới.
Dự án phải chuyển sang AndroidX để sử dụng bản phát hành 2.X của Navigation. Phiên bản Navigation 1.0 ổn định sẽ là bản phát hành cuối cùng sử dụng các phần phụ thuộc Thư viện hỗ trợ; mọi quy trình phát triển trong tương lai sau 1.0 sẽ dựa trên AndroidX và được xây dựng dựa trên bản phát hành ổn định 2.0.
Phần phụ thuộc trước AndroidX
Đối với các phiên bản Navigation trước AndroidX, hãy thêm các phần phụ thuộc sau:
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
}
Đối với Safe Args, hãy thêm
đường dẫn lớp sau vào tệp cấp cao nhất build.gradle
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
Phiên bản 1.0.0
Phiên bản 1.0.0
Ngày 14 tháng 3 năm 2019
Navigation 1.0.0
được phát hành mà không có thay đổi nào từ 1.0.0-rc02
.
Phiên bản 1.0.0-rc02
Ngày 26 tháng 2 năm 2019
Đây là bản phát hành dùng thử thứ hai dành cho bản phát hành ổn định 1.0.0 của Navigation. Bản phát hành này đã sửa nhiều lỗi.
Sửa lỗi
- Khắc phục sự cố
popBackStack()
bị bỏ qua nếu biểu đồ gốc không có mã nhận dạng b/126251695 navigateUp()
hiện sẽ xử lý đúng cách để quay lại việc cần làm của ứng dụng khi được gọi sau khi xử lý đường liên kết sâu mà không cóFLAG_ACTIVITY_NEW_TASK
b/126082008- Đã khắc phục vấn đề với
ActivityNavigator.applyPopAnimationsToPendingTransition
không áp dụng đúng ảnh động thoát khỏi cửa sổ bật lên b/126237567 - Mã Kotlin do Safe Args tạo hiện đã thoát các từ khoá Kotlin đúng cách
chẳng hạn như
in
vàfun
trong tên gói liên kết với lớpR
. b/126020455
Phiên bản 1.0.0-rc01
Ngày 21 tháng 2 năm 2019
Đây là bản phát hành dùng thử dành cho bản phát hành ổn định 1.0.0 của Navigation. Bản phát hành này có 1 bản sửa lỗi.
Sửa lỗi
- Khắc phục vấn đề khi sử dụng Fragment và thao tác điều hướng
singleTop
b/124294805
Phiên bản 1.0.0-beta02
Ngày 12 tháng 2 năm 2019
Bản phát hành này bao gồm một số điểm cải tiến nhỏ và một số bản sửa lỗi quan trọng.
Tính năng mới
- Bây giờ, bạn có thể sử dụng
0
làmandroid:defaultValue
cho đối sốreference
. b/124248602
Thay đổi về hành vi
- Hiện tại, các đường liên kết sâu chính xác sẽ được ưu tiên hơn đường liên kết sâu với
.*
hoặc đối số phù hợp. b/123969518
Sửa lỗi
popBackStack()
vànavigateUp
hiện sẽ trả về chính xácfalse
khi hiển thị đích cuối cùng trong ngăn xếp lui, khắc phục lỗi hồi quy được nêu trong1.0.0-beta01
. b/123933201- Bây giờ, Navigation sẽ đặt
ClassLoader
một cách chính xác trong quá trình khôi phục trạng thái của bản sao đã lưu, để tránh các vấn đề khi sử dụng các lớp tuỳ chỉnh ở trạng thái đã lưuNavigator
hoặc trong các đối số được gửi tớiNavDestination
. b/123893858 - Các lớp NavArgs do Safe Args tạo không còn gặp sự cố khi khôi phục
một đối số
Parcelable[]
từ trạng thái bản sao đã lưu. b/123963545 - Giờ đây, Safe Args xoá các lớp Kotlin được tạo không cần thiết một cách chính xác. b/124120883
Phiên bản 1.0.0-beta01
Ngày 4 tháng 2 năm 2019
Đây là bản phát hành beta đầu tiên của Navigation; từ giờ trở đi, API điều hướng dự kiến sẽ vẫn ổn định cho đến phiên bản tiếp theo trừ khi có vấn đề nghiêm trọng. Bản phát hành này chứa một số bản sửa lỗi và thay đổi về hành vi.
Thay đổi về hành vi
- Bây giờ, Navigation đảm bảo rằng các giá trị mặc định của đối số được xử lý giống nhau
trong thời gian chạy và thông qua Safe Args. Do đó, chỉ các đối số có
app:argType="reference"
mới có thể trỏ giá trị mặc định đến một tài nguyên khác (ví dụ:@color/colorPrimary
). Việc cố gắng sử dụng giá trị giá trị tham chiếu mặc định với mộtapp:argType
khác sẽ dẫn đến trường hợp ngoại lệ khi phân tích cú pháp XML điều hướng. b/123551990 - Giờ đây, Safe Args phụ thuộc vào Trình bổ trợ Android cho Gradle 3.3.0 aosp/888413
- Giờ đây, Safe Args phụ thuộc vào Kotlin 1.3.20 aosp/888414
Sửa lỗi
- Giờ đây, bạn có thể sử dụng Safe Args trong thư viện và các mô-đun tính năng trên tất cả phiên bản của Trình bổ trợ Android cho Gradle. b/121304903
- Đã khắc phục sự hồi quy gây ra một hành động
popBackStack()
để hiển thị tất cả bản sao của một đích xuất hiện ở đầu ngăn xếp lui, thay vì chỉ một đích tại một thời điểm. b/123552990 - Khắc phục sự cố trong đó trạng thái
FragmentNavigator
sẽ huỷ đồng bộ hoá với trạng thái củaNavController
, gây raIllegalStateException
khi tìm cách khôi phục ngăn xếp lui. b/123803044 - Khắc phục sự cố trong đó mũi tên quay lại
NavigationUI
đã xử lý sẽ không xuất hiện khi sử dụng ProGuard có sự làm rối mã nguồn. b/123449431 - Giờ đây, mã do Safe Args tạo sẽ xử lý đúng cách bằng cách sử dụng
app:argType
trỏ đến một lớp tĩnh bên trong theo định dạng.OuterClass$InnerClass
. b/123736741 - Mã Java do Safe Args tạo ra hiện xử lý đúng cách các hành động chung và các đích được lồng sâu. b/123347762
Phiên bản 1.0.0-alpha11
Ngày 23 tháng 1 năm 2019
Đây là bản phát hành sửa lỗi nóng của 1.0.0-alpha10
khắc phục một sự cố với Safe Args.
Sửa lỗi
- Khắc phục sự cố Safe Args không nhập được lớp Chỉ dẫn liên quan đến hành động chung. b/123307342
Phiên bản 1.0.0-alpha10
Ngày 23 tháng 1 năm 2019
Vấn đề đã biết
- Safe Args không thể nhập lớp Chỉ dẫn liên quan đến hành động chung. b/123307342
Bản phát hành này chứa một số thay đổi có thể gây lỗi API; vui lòng xem phần Thay đổi có thể gây lỗi bên dưới.
Tính năng mới
- Giờ đây, người dùng Kotlin có thể sử dụng sự uỷ quyền thuộc tính
by navArgs()
để tham chiếu từng phần đến một lớpNavArgs
được tạo bằng Safe Args trongActivity
hoặcFragment
. b/122603367 - Giờ đây, Safe Args cho phép bạn tạo mã Kotlin bằng cách áp dụng
trình bổ trợ
androidx.navigation.safeargs.kotlin
. Mã Kotlin được xây dựng dành riêng cho các mô-đun Kotlin, sử dụng các đối số mặc định và các lớp không thể thay đổi được qua mẫu trình tạo mà vẫn có sẵn thông qua trình bổ trợandroidx.navigation.safeargs
trước đó. b/110263087
Các thay đổi về hành vi
- Hiện các đường liên kết sâu phù hợp có xu hướng là đường liên kết sâu có các đối số phù hợp nhất. b/118393029
- Giờ đây, khi gọi
setGraph()
trênNavController
, bạn sẽ đặt lại ngăn xếp lui. b/111450672 - Đường liên kết sâu không xác định không còn gửi
IllegalStateException
nữa, mà sẽ bỏ qua, khắc phục các vấn đề có nhiềuNavHostFragment
hoặc bị lồng. b/121340440
Thay đổi có thể gây lỗi
- Phương thức
NavOptions.applyPopAnimationsToPendingTransition()
để áp dụng ảnh động bật lên cho một Hoạt động đã được chuyển sangActivityNavigator
. b/122413117 - Giờ đây, Safe Args sẽ tránh sao chép các lớp tương tự cho các hành động mà không có
đối số. Loại trả về cho các phương thức không bao gồm đối số trong lớp NavDirection
đã tạo hiện là
NavDirections
. b/123233147 - Các lớp Directions (Chỉ dẫn) do Safe Args tạo không còn có hàm khởi tạo công khai nữa. Bạn chỉ nên tương tác với các phương thức tĩnh được tạo. b/123031660
- Các lớp
NavDirections
do Safe Args tạo sẽ không còn có hàm khởi tạo công khai nữa. Bạn chỉ nên tạo các lớp này bằng các phương thức tĩnh trong các lớp Directions đã tạo. b/122963206 Bundle
được trả về từgetArguments()
củaNavDirections
hiện được đánh dấu là@NonNull
thay vì@Nullable
. b/123243957
Sửa lỗi
NavDeepLinkBuilder
hiện xử lý chính xác nhiềuPendingIntent
đồng thời đến cùng một đích bằng cách sử dụng các đối số bạn nhập vào để xác định tính duy nhất. b/120042732NavController
hiện xử lý chính xác các thao tácpopBackStack()
khi sử dụngNavHostFragment
lồng nhau hoặc các Fragment khác có ngăn xếp lui. b/122770335NavigationUI
hiện đã đặt chính xác nội dung mô tả nội dung của nút Mũi tên lên. b/120395362- Giờ đây, các lớp Chỉ dẫn do Safe Args tạo đã tạo sẽ xử lý chính xác các thao tác chung có cùng mã với thao tác trên một đích. b/122962504
- Giờ đây, các lớp
NavDirections
do Safe Args có đúng giá trịhashCode()
bằng nhau khiequals()
trả về giá trị true. b/123043662 FragmentNavigator
hiện sẽ gửi một thông báo lỗi hiệu quả hơn nếu bạn cố gắng tuỳ chỉnhFragmentTransactions
trênFragmentManager
củaNavHostFragment
. Bạn phải luôn sử dụnggetChildFragmentManager()
. b/112927148
Phiên bản 1.0.0-alpha09
Ngày 18 tháng 12 năm 2018
Bản phát hành này chứa một số thay đổi có thể gây lỗi API; vui lòng xem phần Thay đổi có thể gây lỗi bên dưới.
Chúng tôi chọn không tiếp tục phát triển cấu phần mềm android.arch.navigation:navigation-testing
. Mặc dù đã được chứng minh là hữu ích cho việc thử nghiệm nội bộ của NavController
, nhưng bạn nên có các chiến lược thử nghiệm thay thế, chẳng hạn như mô phỏng thực thể NavController
để xác minh rằng navigate()
chính xác đang thực hiện lệnh gọi. Cách tiếp cận này
sẽ được thảo luận chi tiết trong bài
Buổi nói chuyện về Single Activity tại AndroidDevSummit 2018
và chúng tôi sẽ nghiên cứu tài liệu bổ sung cụ thể về việc thử nghiệm
bằng Navigation.
Tính năng mới
MenuItem
cómenuCategory="secondary"
sẽ không hiển thị ngăn xếp lui nữa khi sử dụng với các phương thứcNavigationUI
. b/120104424AppBarConfiguration
nay cho phép bạn đặt một thực thểOnNavigateUpListener
dự phòng sẽ được gọi khinavController.navigateUp()
trả vềfalse
. b/79993862 b/120690961
Thay đổi có thể gây lỗi
- Khi bạn sử dụng
<argument>
vớiargType="reference"
, Navigation không còn phân tích tệp tham chiếu nữa mà thay vào đó là cung cấp chính mã nhận dạng tài nguyên thô. b/111736515 - Theo mặc định,
onNavDestinationSelected()
sẽ hiện trở lại điểm bắt đầu của biểu đồ điều hướng, làm cho các biểu đồ này nhất quán với các phương thứcsetup
. ThêmmenuCategory="secondary"
vàoMenuItem
để tránh làm bật ra ngăn xếp lui. aosp/852869 - Phương thức
fromBundle()
của các lớpArgs
được tạo hiện giờ sẽ lấyBundle
không rỗng thay vìBundle
rỗng aosp/845616
Sửa lỗi
- Các đối số nay được phân tích cú pháp chính xác từ các đường liên kết sâu dưới dạng
argType
chính xác thay vì luôn là các chuỗi b/110273284 - Bây giờ, Navigation sẽ xuất đúng tài nguyên công khai b/121059552
- Safe Args hiện tương thích với trình bổ trợ Android cho Gradle 3.4 Canary 4 trở lên b/119662045
Phiên bản 1.0.0-alpha08
Ngày 6 tháng 12 năm 2018
Bản phát hành này chứa một số thay đổi có thể gây lỗi API; vui lòng xem phần Thay đổi có thể gây lỗi bên dưới.
Tính năng mới
- Nhãn đích, khi được dùng với các phương thức
NavigationUI
, giờ đây sẽ tự động thay thế các thực thể{argName}
trongandroid:label
bằng đối số chính xác b/80267266 - Hiện tại, cách điều hướng tuỳ thuộc vào Thư viện hỗ trợ 28.0.0 b/120293333
Thay đổi có thể gây lỗi
OnNavigatedListener
đổi tên thànhOnDestinationChangedListener
b/118670572OnDestinationChangedListener
hiện cũng truyền đối sốBundle
aosp/837142- Các thuộc tính
app:clearTask
vàapp:launchDocument
cùng các phương thức liên kết với những thuộc tính này đã bị xoá. Sử dụngapp:popUpTo
với thư mục gốc của biểu đồ để xoá tất cả đích khỏi ngăn xếp lui. b/119628354 ActivityNavigator.Extras
hiện sử dụng mẫuBuilder
và thêm khả năng đặt bất kỳ cờIntent.FLAG_ACTIVITY_
nào aosp/828140NavController.onHandleDeepLink
đổi tên thànhhandleDeepLink
aosp/836063- Nhiều lớp và phương thức không dùng để phân lớp, chẳng hạn như
NavOptions
,NavInflater
,NavDeepLinkBuilder
vàAppBarConfiguration
, đã được tạofinal
aosp/835681 - Phương thức
NavHostFragment.setGraph()
không dùng nữa đã bị xoá aosp/835684 - Phương thức
NavigationUI.navigateUp(DrawerLayout, NavController)
không dùng nữa đã bị xoá. aosp/835684 - Chúng tôi đã chuyển tính năng tạo Mảnh (Fragment) sang
FragmentNavigator
, qua đó giúp bạn uỷ quyền việc tạo Fragment choFragmentFactory
dễ dàng hơn. b/119054429 - Hàm khởi tạo cho
NavGraphNavigator
không còn lấyContext
aosp/835340 - NavigatorProvider hiện là một lớp, chứ không phải là một giao diện.
NavigatorProvider
dogetNavigatorProvider()
trả về không thay đổi chức năng của chế độ này. aosp/830660 - Xoá
NavDestination.navigate()
. Gọinavigate()
trênNavigator
. aosp/830663 - Việc tái cấu trúc đáng kể
Navigator
, giúp bạn không cần phải cóOnNavigatorNavigatedListener
mà thay vào đó, hãy yêu cầunavigate
trả vềNavDestination
trong đó. - Các thực thể
Navigator
không gửi được các sự kiện bật lên choNavController
nữa. Hãy cân nhắc sử dụngOnBackPressedCallback
để chặn hoạt động nhấn nút quay lại và gọinavController.popBackStack()
. aosp/833716
Sửa lỗi
popUpTo
hiện đang hoạt động nhất quán khi đích đến là phần tử<navigation>
b/116831650- Khắc phục một số lỗi dẫn đến lỗi
IllegalArgumentException
khi sử dụng biểu đồ lồng nhau b/118713731 b/113611083 b/113346925 b/113305559 - Thuộc tính
dataPattern
của<activity>
đích hiện sẽ điền các đối số từ đối số không phải Chuỗi bằng cách gọitoString()
b/120161365
Safe Args
- Safe Args hỗ trợ các đối tượng nối tiếp, bao gồm cả giá trị Enum. Các loại Enum
có thể đặt giá trị mặc định bằng cách sử dụng cách liệt kê enum mà không có tên lớp
(ví dụ:
app:defaultValue="READ"
) b/111316353 - Safe Args hỗ trợ các mảng thuộc mọi loại được hỗ trợ b/111487504
- Giờ đây, tất cả thư mục tài nguyên sẽ chứa các thư mục tài nguyên. b/117893516
- Safe Args sẽ thêm chú thích
@Override
nếu cần thiết b/117145301
Phiên bản 1.0.0-alpha07
Ngày 29 tháng 10 năm 2018
Tính năng mới
- Lớp AppBarConfiguration mới cho phép bạn tuỳ chỉnh các đích được coi là đích đến cấp cao nhất. Hãy xem tài liệu cập nhật để biết thông tin chi tiết. b/117333663
- Bây giờ, bạn có thể chuyển đối số đích bắt đầu của biểu đồ b/110300470
- Đường liên kết sâu nay hỗ trợ lược đồ tuỳ chỉnh có dấu chấm, dấu gạch nối và dấu cộng. b/112806402
Thay đổi có thể gây lỗi
- Mô-đun
navigation-testing-ktx
đã được đóng thànhnavigation-testing artifact
và sẽ không xuất bản nữa. - Cấu phần mềm
navigation-testing
hiện có một phần phụ thuộc trong thư viện chuẩn Kotlin. API đã được thay đổi để nhất quán hơn với các quy ước Kotlin, nhưng bạn có thể tiếp tục sử dụng API này cho các thử nghiệm viết bằng Java. - Biểu đồ điều hướng đã đăng ký cho tệp kê khai siêu dữ liệu không còn được hỗ trợ nữa. b/118355937
- Hành động không còn được đính kèm vào đích đến <activity>.aosp/785539
Sửa lỗi
- Giờ đây, các đường liên kết sâu có thể phân tích cú pháp các tham số truy vấn một cách chính xác. b/110057514
- Đích đến Activity (Hoạt động) hiện áp dụng chính xác tất cả ảnh động nhập và thoát. b/117145284
- Khắc phục sự cố xảy ra sau khi thay đổi cấu hình khi sử dụng Trình điều hướng tuỳ chỉnh. b/110763345
Safe Args
- Safe Args nay có phần phụ thuộc cố định trên Trình bổ trợ Android cho Gradle 3.2.1. b/113167627
- Bạn hiện có thể tạo Chỉ dẫn cho các lớp bên trong. b/117407555
- Khắc phục sự cố khi tạo Chỉ dẫn đến biểu đồ <include>. b/116542123
Phiên bản 1.0.0-alpha06
Ngày 20 tháng 9 năm 2018
Tính năng mới
- Hỗ trợ chuyển đổi phần tử được chia sẻ cho các đích Activity và Fragment b/79665225. Để biết thêm thông tin, hãy xem phần Triển khai điều hướng bằng Thành phần kiến trúc Navigation
- Giờ đây, việc chọn một mục trong
NavigationView
sẽ đóng trang tính dưới cùng chứa b/112158843
Thay đổi về API
- Sự thay đổi có thể gây lỗi: Phương thức
navigate()
của Trình điều hướng hiện sẽ nhận tham sốNavigator.Extras
. - Phương thức
getGraph()
của NavController hiện làNonNull
b/112243286
Sửa lỗi
NavigationUI.setupWithNavController()
không còn rò rỉ khung hiển thị nếu sử dụng cùng với khung hiển thị từ các đích đến riêng lẻ b/111961977- Trình điều hướng
onSaveState()
hiện chỉ được gọi một lần b/112627079
Safe Args
- Các lớp Directions (Chỉ dẫn) đích của Navigation hiện mở rộng lớp Directions của phần tử mẹ nếu có sẵn b/79871405
- Giờ đây, các lớp Directions và Args rất hữu ích khi
toString()
triển khai b/111843389
Phiên bản 1.0.0-alpha05
Ngày 10 tháng 8 năm 2018
Sửa lỗi
- Khắc phục lỗi gây ra hành vi chèn lấp không chính xác. b/111907708
- Sửa lỗi trong
equals()
lớp Args đã tạo. b/111450897 - Sửa lỗi trong phiên bản Safe Args. b/109409713
- Khắc phục vấn đề về lượt chuyển đổi từ giá trị nhận dạng tài nguyên thành tên java b/111602491
- Khắc phục thông báo lỗi về tính chất rỗng trong trình bổ trợ Safe Args.
- Thêm chú thích về tính chất rỗng bị thiếu.
Phiên bản 1.0.0-alpha04
Ngày 19 tháng 7 năm 2018
Navigation 1.0.0-alpha04
và trình bổ trợ gradle của Safe Args liên kết chứa một số thay đổi về API, các thay đổi về hành vi và các bản sửa lỗi.
Thay đổi về API/Hành vi
- NavHostFragment sẽ luôn đặt Fragment hiện tại làm mảnh điều hướng chính, đảm bảo rằng trình quản lý mảnh con được bật lên trước khi NavController bên ngoài được kích hoạt b/111345778
Safe Args
- Thay đổi có thể gây lỗi:
app:type
đã được thay đổi thànhapp:argType
để tránh xung đột với các thư viện khác như ConstraintLayout 2.0.0-alpha1b/111110548 - Bây giờ, bạn có thể nhấp vào các thông báo lỗi trong Safe Args b/111534438
- Lớp Args hiện xác nhận rằng các thuộc tính
NonNull
thực tế không phải là giá trị rỗng b/111451769 - Thêm các chú thích
NonNull
bổ sung vào NavDirections và các lớp được tạo bằng Arg b/111455455 b/111455456
Sửa lỗi
- Khắc phục vấn đề về nút quay lại của hệ thống sau khi liên kết sâu với đích của mảnh b/111515685
Phiên bản 1.0.0-alpha03
Ngày 12 tháng 7 năm 2018
Navigation 1.0.0-alpha03
và trình bổ trợ gradle của Safe Args liên kết chứa một số thay đổi về API, các thay đổi về hành vi và các bản sửa lỗi.
Thay đổi về API/Hành vi
- Thêm phương thức NavigationUI.setupWithNavController cho Thanh công cụ b/109868820
- Thêm phương thức NavigationUI.setupWithNavController cho CollapsingToolbarLayout b/110887183
- popBackStack() hiện trả về false khi ngăn xếp lui trống hoặc khi mã nhận dạng đích đã cho không nằm trong ngăn xếp lui b/110893637
- FragmentNavigator hiện bỏ qua các thao tác điều hướng sau khi FragmentManager lưu trạng thái, tránh trường hợp ngoại lệ “Không thể thực hiện hành động này sau onSaveInstanceState” b/110987825
Safe Args
- Thay đổi có thể gây lỗi: Các ký tự không phải chữ và số trong tên hành động và đối số sẽ được thay thế bằng cách viết hoa camel trong tên phương thức NavDirections tương ứng
- Ví dụ:
DemoController.index
sẽ trở thànhsetDemoControllerIndex
b/79995048 - Ví dụ:
action_show_settings
sẽ trở thànhactionShowSettings
b/79642240
- Ví dụ:
- Thay đổi có thể gây lỗi: Theo mặc định, các đối số được xem là không có giá trị rỗng. Để cho phép các giá trị rỗng trên chuỗi và đối số có thể lập trình, hãy thêm
app:nullable="true"
b/79642307 - Hiện tại, bạn có thể sử dụng
app:type="long"
với defaultValues dưới dạng “123L” b/79563966 - Giờ đây, bạn có thể sử dụng tên lớp đủ điều kiện cho
app:type
đối số có thể phân phối. Giá trị mặc định duy nhất được hỗ trợ là"@null"
b/79563966 - Các lớp Args nay triển khai
equals()
vàhashCode()
b/79642246 - Hiện tại, bạn có thể sử dụng trình bổ trợ Safe Args cho các dự án thư viện b/80036553
- Bạn hiện có thể áp dụng trình bổ trợ Safe Args cho các dự án tính năng b/110011752
Sửa lỗi
- Đã khắc phục vấn đề khi điều hướng trong phương thức trong vòng đời của Fragment b/109916080
- Khắc phục sự cố điều hướng nhiều lần qua các biểu đồ lồng nhau b/110178671
- Đã khắc phục vấn đề khi sử dụng
setPopUpTo
với đích đầu tiên trong biểu đồ b/109909461 - Khắc phục sự cố khi chuyển tất cả giá trị
app:defaultValue
dưới dạng Chuỗi b/110710788 - aapt2 đi kèm với Trình bổ trợ Android cho Gradle 3.2 Beta 01 hiện thêm các quy tắc giữ cho mỗi thuộc tính
android:name
trong các tệp XML điều hướng b/79874119 - Khắc phục sự cố rò rỉ bộ nhớ khi thay thế FragmentNavigator mặc định b/110900142
Phiên bản 1.0.0-alpha02
Ngày 7 tháng 6 năm 2018
Các thay đổi về hành vi
FragmentNavigator
hiện đang sử dụngsetReorderingAllowed(true)
. b/109826220Navigation giờ đây URLDecodes các đối số được phân tích cú pháp từ các URL đường liên kết sâu. b/79982454
Sửa lỗi
Đã sửa
IllegalStateException
khi gọi điều hướng từ các phương thức trong vòng đời của Fragment. b/79632233Hiện tại, Navigation phụ thuộc vào Thư viện hỗ trợ 27.1.1 để khắc phục việc nhấp nháy khi sử dụng ảnh động. b/80160903
Khắc phục
IllegalArgumentException
khi sử dụng defaultNavHost="true" làm mảnh con. b/79656847Sửa lỗi
StackOverflowError
khi sử dụng NavDeepLinkBuilder. b/109653065Sửa lỗi
IllegalArgumentException
khi quay lại biểu đồ lồng. b/80453447Khắc phục sự cố các mảnh bị trùng lặp khi sử dụng
launchSingleTop
. b/79407969Bây giờ, Navigation sẽ xây dựng ngăn xếp lui tổng hợp chính xác cho các biểu đồ lồng nhau. b/79734195
Bây giờ, NavigationUI sẽ làm nổi bật mục chính xác khi sử dụng biểu đồ lồng nhau dưới dạng
MenuItem
. b/109675998
Thay đổi về API
Thuộc tính
clearTask
cho các hành động và API liên kết trongNavOptions
không được dùng nữa. b/80338878Ngừng sử dụng thuộc tính
launchDocument
cho các hành động và API liên kết trongNavOptions
. b/109806636
Phiên bản 1.0.0-alpha01
Ngày 8 tháng 5 năm 2018
Navigation cung cấp một khung để tạo
thao tác trong ứng dụng. Bản phát hành đầu tiên này là 1.0.0-alpha01
.