Di chuyển
androidx.navigation
androidx.navigation.compose
androidx.navigation.dynamicfeatures
androidx.navigation.dynamicfeatures.fragment
androidx.navigation.dynamicfeatures.fragment.ui
androidx.navigation.fragment
androidx.navigation.fragment.compose
androidx.navigation.testing
androidx.navigation.ui
| 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 24 tháng 9 năm 2025 | 2.9.5 | - | - | - |
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
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.5" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.5" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
Để 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.9.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.5" 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.5
Ngày 24 tháng 9 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.5. Phiên bản 2.9.5 bao gồm các thay đổi sau.
Sửa lỗi
- Giờ đây, Navigation Safe Args có thể xử lý khả năng hỗ trợ kotlin tích hợp của AGP 9.0. (I1d9d76)
Cập nhật về phần phụ thuộc
- 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 8.4.2. (b/431847270, I5932a)
Phiên bản 2.9.4
Ngày 10 tháng 9 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.4. Phiên bản 2.9.4 bao gồm các thay đổi sau.
Sửa lỗi
- Ngăn chặn sự cố khi một sự kiện xem trước thao tác quay lại được gửi giữa khung hình sau khi trình xử lý bị vô hiệu hoá trong quá trình chuyển đổi
NavHost. (I5667c, b/384186542)
Phiên bản 2.9.3
Ngày 30 tháng 7 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.3. Phiên bản 2.9.3 bao gồm các thay đổi sau.
Sửa lỗi
- Đã khắc phục lỗi trong
NavControllergây raConcurrentModificationExceptionkhi sử dụngOnDestinationChangedListeners. (If7406, b/417784831) - Khắc phục lỗi khi sử dụng
navigate(uri, navOptions,navigationExtras), trong đó các phần bổ sung bị bỏ qua. (I67fb7, b/430336813)
Phiên bản 2.9.2
Ngày 16 tháng 7 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.2. Phiên bản 2.9.2 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề mục không tiếp tục khi hộp thoại phía trên mục bị đóng (Idb20e, b/418746335)
- Đã khắc phục lỗi
MissingFieldExceptionkhi kiểm thửSavedStateHandlebằng các tuyến an toàn về kiểu trong khi sử dụngNavTypestuỳ chỉnh. (I2f843, b/421002511)
Phiên bản 2.9.1
Ngày 2 tháng 7 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.1. Phiên bản 2.9.1 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục một vấn đề khiến
NavEntriesđược khởi tạo bằng một đỉnh duy nhất không bao giờ vượt quá CREATED trongLifecycle.State. (I043ba, b/421095236)
Phiên bản 2.9.0
Ngày 7 tháng 5 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0. Phiên bản 2.9.0 bao gồm các thay đổi sau.
Các thay đổi quan trọng kể từ phiên bản 2.8.0
- Giờ đây, các thao tác Điều hướng Safe Args được tạo bằng chú thích
@CheckResultđể đảm bảo các thao tác này được dùng.
Giao diện SupportingPane
- 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. Giao diện này cho biết vớiNavControllerrằng các đích đến này sẽ xuất hiện cùng với các đích đến khác. Bằng cách sử dụng giao diện này, bạn có thểRESUMEDnhiều đích đến cùng một lúc, chẳng hạn như.
Compose Kotlin Multiplatform
- Giờ đây, Navigation cung cấp một hàm
NavController.handleDeepLink()chung mới nhậnNavDeepLinkRequestthay vìIntent. Điều này cho phép các nền tảng không phải Android xử lý đúng cách các đường liên kết sâu. Cảm ơn Konstantin Tskhovrebov! - Navigation hiện cung cấp
NavUri, một hàm phân tích cú pháp chung mới, là API tương thích cho URI của Android trên các nền tảng khác. Điều này giúp bạn có thể tạo URI theo cách không phân biệt nền tảng. Cảm ơn Konstantin Tskhovrebov!
Hàm an toàn về kiểu
- Các API an toàn về kiểu mà trước đây chỉ có thể truy cập thông qua các phương thức
reified, tức làcomposable<YourScreen>hiện có các phiên bản không được cụ thể hoá trực tiếp lấy một thực thểKClass. - Tính an toàn về kiểu điều hướng hiện hỗ trợ các lớp giá trị dưới dạng một tuyến đường hoặc dưới dạng loại đối số của một tuyến đường.
Phiên bản 2.9.0-rc01
Ngày 23 tháng 4 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-rc01. Phiên bản 2.9.0-rc01 bao gồm các thay đổi sau.
Sửa lỗi
- Xoá tất cả các mục tiêu không phải nền tảng Android khỏi Jetpack Navigation vì những mục tiêu đó không thực sự hoạt động. Giờ đây, các phần giữ chỗ cho nhiều nền tảng sẽ được cung cấp thay thế.(I2877d)
Phiên bản 2.9.0-beta01
Ngày 9 tháng 4 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-beta01. Phiên bản 2.9.0-beta01 bao gồm các thay đổi sau.
Thay đổi về API
- API chung của
parseStringAsNavUriđã được thay đổi thành một hàm tạoNavUrinhận một chuỗi. (I4db6e, b/403616316)
Thông tin cập nhật về phần phụ thuộc
- Thư viện này hiện hướng đến cấp độ ngôn ngữ Kotlin 2.0 và yêu cầu KGP 2.0.0 trở lên. (Idb6b5)
Phiên bản 2.9.0-alpha09
Ngày 26 tháng 3 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-alpha09. Phiên bản 2.9.0-alpha09 bao gồm các thay đổi sau.
Tính năng mới
- Ngoài Android, mô-đun
navigation-testinghiện hỗ trợ trên máy tính, Linux, macOS và iOS. (I2b770, b/398265336) NavTypehiện được hỗ trợ trên máy tính, Linux, macOS và iOS, ngoài Android. (I297d8)
Phiên bản 2.9.0-alpha08
Ngày 12 tháng 3 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-alpha08. Phiên bản 2.9.0-alpha08 bao gồm các thay đổi sau.
Sửa lỗi
- Trong phiên bản Navigation
2.8.9: Khắc phục một lỗi hồi quy trong Navigation 2.8.8. Lỗi này yêu cầu đường liên kết sâu phải khớp chính xác với tất cả các trường của yêu cầu hoặc ý định về đường liên kết sâu thì mới được coi là khớp. Điều này khiến những đường liên kết sâu chứa các trường khớp một phần và không có các trường khác không còn hoạt động nữa. (Ie5e36, b/399826566)
Đóng góp bên ngoài
- Hàm trình phân tích cú pháp chung mới để tạo một
NavUri. Cảm ơn Konstantin Tskhovrebov! (If0a6a)
Phiên bản 2.9.0-alpha07
Ngày 26 tháng 2 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-alpha07. Phiên bản 2.9.0-alpha07 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề khi cố gắng
saveStatebằng thao tác bật lên không bao gồm sẽ dẫn đến savedState rỗng, có thể gây ra sự cố khi khôi phục. (I9f3e8, b/395091644) - Trong phiên bản Navigation 2.8.8: Đã khắc phục vấn đề khớp
NavDeepLink, trong đó một đường liên kết sâu và một yêu cầu đường liên kết sâu phải khớp chính xác về uri, thao tác và mime. Bạn không được phép so khớp nếu chỉ có một hoặc hai trường trùng khớp. (I3b029, b/395712033) - Trong phiên bản Navigation 2.8.8: Khắc phục lỗi trong đó các tuyến đường có đường dẫn ký tự đại diện không khớp với một đường liên kết sâu đã thêm (I7ea92, b/389970341)
Đóng góp bên ngoài
- Trích xuất các API navigation-common, navigation-runtime và navigation-compose sang nền tảng chung. Cảm ơn Konstantin Tskhovrebov! (I1e626, Ica76f, Idf479)
Lỗi đã biết
- Do công việc giải quyết b/395712033, đường liên kết sâu được yêu cầu không chính xác phải có tất cả các trường giống như yêu cầu đường liên kết sâu và/hoặc
Intent. Đường liên kết sâu chỉ cần khớp với các trường mà chúng có và các trường không được đưa vào sẽ bị bỏ qua. Vấn đề này đã được khắc phục trong một bản phát hành sau này trong b/399826566.
Phiên bản 2.9.0-alpha06
Ngày 12 tháng 2 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-alpha06. Phiên bản 2.9.0-alpha06 bao gồm các thay đổi sau.
Tính năng mới
- Giờ đây, các thao tác Điều hướng Safe Args được tạo bằng chú thích
@CheckResultđể đảm bảo các thao tác này được dùng. (I14d4c, b/356323084)
Sửa lỗi
- Khắc phục lỗi trong
NavControllerkhi các trạng thái backStack được khôi phục không chính xác vào một mảng khi chúng được lưu vào một danh sách. (Idfb9b) - Từ phiên bản Navigation
2.8.7: Trình bổ trợ Navigation Safe Args hiện hỗ trợ các đích đến có thể kết hợp. (I35320, b/362791955)
Phiên bản 2.9.0-alpha05
Ngày 29 tháng 1 năm 2025
Phát hành androidx.navigation:navigation-*:2.9.0-alpha05. Phiên bản 2.9.0-alpha05 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề gây ra ảnh động thu phóng không mong muốn khi sử dụng Navigation Compose. (I480f4, b/353294030)
- Từ Điều hướng
2.8.6: Các nhãnNavDestinationđược cung cấp thông qua XML sẽ được phân tích cú pháp thông quaNavType.getđể đảm bảo logicNavTypetuỳ chỉnh được tuân thủ. (I7ec2f, b/388100796) - Trên
2.8.6điều hướng: Khi điều hướng đến hoạt động bằngdataPattern,ActivityNavigatorgiờ đây sẽ cố gắng mã hoá giá trị arg bằngNavTypecủa đối số. (I16376, b/383616432) - Từ Navigation
2.8.5: Khắc phục một vấn đề gây ra ảnh động thu phóng không mong muốn khi sử dụng Navigation Compose và gọi hàm điều hướng trong cùng một khung hình mà ảnh động hiện tại đang kết thúc. (I26cb1, b/353294030)
Phiên bản 2.9.0-alpha04
Ngày 11 tháng 12 năm 2024
Phát hành androidx.navigation:navigation-*:2.9.0-alpha04. Phiên bản 2.9.0-alpha04 bao gồm các thay đổi sau.
Tính năng mới
- Các API an toàn về kiểu mà trước đây chỉ có thể truy cập thông qua các phương thức
reified, tức làcomposable<YourScreen>hiện có các phiên bản không được hiện thực hoá trực tiếp lấy một thực thểKClass.(Ia7eed, Id2879, Ibf244, I17d79, Id09d2, I54696, Ia47be, I93281, Ic1bf0, Iba4ee, If56a5, Icf969, I67644, I6f788, b/382094941, b/366291612, b/381938808)
Bảng dưới đây cung cấp các API KClass và được cụ thể hoá.
| reified | KClass |
|---|---|
composable<TestClass> { } |
composable(TestClass::class) { } |
navigation<NestedGraph>(startDestination = TestClass::class) |
navigation(route = NestedGraph::class, startDestination = TestClass::class) |
dialog<TestClass> {} |
dialog(TestClass::class) {} |
navDeepLink<TestClass>(baseUri) |
navDeepLink(TestClass::class, baseUri) |
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) |
NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri) |
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } |
NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { } |
navController.getBackStackEntry<TestClass>() |
navController.getBackStackEntry(TestClass::class) |
navController.popBackStack<TestClass>(true) |
navController.popBackStack(TestClass::class, true) |
navController.clearBackStack<TestClass>() |
navController.clearBackStack(TestClass::class) |
NavOptions.setPopUpTo<TestClass>() |
NavOptions.setPopUpTo(TestClass::class) |
navOptions { popUpTo<TestClass> {...} } |
navOptions { popUpTo(TestClass::class) {...} } |
NavGraph.setStartDestination<TestClass>() |
NavGraph.setStartDestination(TestClass::class) |
NavGraph.findNode<TestClass>() |
NavGraph.findNode(TestClass::class) |
backStackEntry.toRoute<TestClass>() |
backStackEntry.toRoute(TestClass::class) |
savedStateHandle.toRoute<TestClass>() |
savedStateHandle.toRoute(TestClass::class) |
Thay đổi về API
- Lớp nạp chồng
NavGraph.setStartDestinationdành riêng cho Kotlin để đảm bảo an toàn về kiểu bị ẩn khỏi các nguồn Java. (Ic640c, b/364634035)
Sửa lỗi
- Từ Navigation
2.8.5: Khắc phục vấn đề trong đóNavHostcó thể gửi một ngoại lệ bên trongPredictiveBackHandlernếu ngăn xếp lui được bật xuống 1 mục nhập và một hệ thống quay lại được kích hoạt trong cùng một khung. (I1a429, b/375343407) - Từ Navigation
2.8.5: Đã khắc phụcNavDestinationNullPointerExceptionkhi cập nhậtstartDestinationcủa biểu đồ. (I99421, b/361560785)
Đóng góp bên ngoài
- Từ phiên bản Navigation
2.8.5: Tính năng an toàn về kiểu điều hướng hiện hỗ trợList<Enum>làm kiểu đối số của một tuyến đường mà không yêu cầu bất kỳNavTypetuỳ chỉnh nào. Cảm ơn Csaba Kozák! (GH-725, b/375559962)
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 an toàn về kiểu điều hướng hiện hỗ trợ các lớp giá trị dưới dạng một tuyến đường hoặc dưới dạng loại đối số của một tuyến đường. (I9344a, b/374347483)
Sửa lỗi
- Đã khắc phục một
ConcurrentModificationExceptioncó thể xảy ra khi mộtLifecycleObserverđược đính kèm vào mộtNavBackStackEntrykích hoạt thay đổi đối với ngăn xếp lùi khiLifecycleOwnerlư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)chung 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. Giao diện này cho biết vớiNavControllerrằng các đích đến này sẽ xuất hiện cùng với các đích đến khác. Bằng cách sử dụng giao diện này, bạn có thểRESUMEDnhiều đích đến cùng một lúc, chẳng hạn như. (Id5559) - Từ Navigation
2.8.3: Thêm các chế độ kiểm tra tìm lỗi mã nguồn mới cho các mô-đunnavigation-common,navigation-runtimevànavigation-composeđể giúp xác định mọi tuyến an toàn về kiểu không được chú thích đúng 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ộngNavGraphBuildervàNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Từ Navigation
2.8.3: Thêm các chế độ kiểm tra tìm lỗi mã nguồn mới cho các mô-đunnavigation-common,navigation-runtimevà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 đúng 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ộngNavGraphBuildervàNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Thay đổi về hành vi
- Nếu bạn cố gắng sử dụng một
NavControllerđã đượcDESTROYEDtrước đó, thì sẽ xảy raIllegalStateException. (I520da, b/369616172)
Sửa lỗi
- Cập nhật ngoại lệ không tìm thấy lớp Enum để đề xuất sử dụng chú thích
@Keeptrong trường hợp lớp Enum bị xoá trong các bản dựng được rút gọn. (I90e79, b/358137294)
Lỗi đã biết
- Có một 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 checkkhi cố gắng chạy tính năng 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.9
Ngày 12 tháng 3 năm 2025
Phát hành androidx.navigation:navigation-*:2.8.9. Phiên bản 2.8.9 bao gồm các thay đổi sau.
Sửa lỗi
- Đã khắc phục một lỗi hồi quy trong Navigation 2.8.8. Lỗi này yêu cầu đường liên kết sâu phải khớp chính xác với tất cả các trường của yêu cầu hoặc ý định về đường liên kết sâu thì mới được coi là khớp. Điều này khiến những đường liên kết sâu chứa các trường khớp một phần và không có các trường khác không còn hoạt động nữa. (Ie5e36, b/399826566)
Phiên bản 2.8.8
Ngày 26 tháng 2 năm 2025
Phát hành androidx.navigation:navigation-*:2.8.8. Phiên bản 2.8.8 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục lỗi trong đó các tuyến đường có đường dẫn ký tự đại diện không khớp với đường liên kết sâu đã thêm. (I7ea92, b/389970341)
- Đã khắc phục vấn đề về việc so khớp
NavDeepLink, trong đó đường liên kết sâu và yêu cầu về đường liên kết sâu phải khớp chính xác về uri, thao tác và mime. Bạn không được phép so khớp nếu chỉ có một hoặc hai trường trùng khớp. (I3227f, b/395712033)
Lỗi đã biết
- Do công việc giải quyết b/395712033, đường liên kết sâu được yêu cầu không chính xác phải có tất cả các trường giống như yêu cầu đường liên kết sâu và/hoặc
Intent. Đường liên kết sâu chỉ cần khớp với các trường mà chúng có và các trường không được đưa vào sẽ bị bỏ qua. Vấn đề này đã được khắc phục trong một bản phát hành sau này trong b/399826566.
Phiên bản 2.8.7
Ngày 12 tháng 2 năm 2025
Phát hành androidx.navigation:navigation-*:2.8.7. Phiên bản 2.8.7 bao gồm các thay đổi sau.
Sửa lỗi
- Giờ đây, Navigation Safe Args hỗ trợ các đích đến có thể kết hợp. (I35320, b/362791955)
Phiên bản 2.8.6
Ngày 29 tháng 1 năm 2025
Phát hành androidx.navigation:navigation-*:2.8.6. Phiên bản 2.8.6 bao gồm các thay đổi sau.
Sửa lỗi
- Các nhãn
NavDestinationđược cung cấp thông qua XML sẽ được phân tích cú pháp thông quaNavType.getđể đảm bảo logicNavTypetuỳ chỉnh được tuân thủ. (Id366d, b/388100796) - Khi điều hướng đến hoạt động bằng
dataPattern,ActivityNavigatorgiờ đây sẽ cố gắng mã hoá giá trị arg bằngNavTypecủa đối số. (I1a71d, b/383616432)
Phiên bản 2.8.5
Ngày 11 tháng 12 năm 2024
Phát hành androidx.navigation:navigation-*:2.8.5. Phiên bản 2.8.5 bao gồm các thay đổi sau.
Sửa lỗi
- Khắc phục vấn đề khi
NavHostcó thể gửi một ngoại lệ bên trongPredictiveBackHandlernếu ngăn xếp lui được bật xuống 1 mục và một thao tác quay lại hệ thống được kích hoạt trong cùng một khung hình. (I1a429, b/375343407) - Khắc phục
NavDestinationNullPointerExceptionkhi cập nhậtstartDestinationcủa biểu đồ. (I99421, b/361560785) - Khắc phục vấn đề gây ra ảnh động thu phóng không mong muốn khi sử dụng Navigation Compose và gọi thao tác điều hướng trong cùng một khung hình mà ảnh động hiện tại đang kết thúc. (I26cb1, b/353294030)
- Đã khắc phục một
ConcurrentModificationExceptioncó thể xảy ra khi mộtLifecycleObserverđược đính kèm vào mộtNavBackStackEntrykích hoạt thay đổi đối với ngăn xếp lùi khiLifecycleOwnerlư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)
Đóng góp bên ngoài
- Tính năng an toàn về loại điều hướng hiện hỗ trợ
List<Enum>làm loại đối số của một tuyến đường mà không yêu cầu bất kỳNavTypetuỳ chỉnh nào. Cảm ơn Csaba Kozák! (GH-725, b/375559962)
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: Chế độ an toàn về kiểu điều hướng hiện hỗ trợ lớp giá trị dưới dạng tuyến đường hoặc dưới dạng kiểu đối số của một tuyến đường (I9344a, b/374347483)
Sửa lỗi
- Từ phiên bản Navigation
2.9.0-alpha01: Giờ đây, nếu bạn cố gắng sử dụng mộtNavControllerđã đượcDESTROYEDtrước đó, thì sẽ xả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 chế độ kiểm tra tìm lỗi mã nguồn mới cho các mô-đun
navigation-common,navigation-runtimevànavigation-composeđể giúp xác định mọi tuyến an toàn về kiểu không được chú thích đúng 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ộngNavGraphBuildervàNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Thêm các chế độ kiểm tra tìm lỗi mã nguồn mới cho các mô-đun
navigation-common,navigation-runtimevà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 đúng 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ộngNavGraphBuildervà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 checkkhi cố gắng chạy tính năng 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
- Lint điều hướng sẽ đưa ra lỗi kiểm tra lỗi mã nguồn tuỳ chỉnh không dùng nữa khi cố gắng chạy lint 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ề kiểu điều hướng hiện hỗ trợ các lớp có thể chuyển đổi tuần tự bao gồm
Double,Double?,DoubleArray,DoubleArray?,List<Double>vàList<Double>?mà không yêu cầu bất kỳNavTypetuỳ 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 Thao tác điều hướng không thể liên kết đối số của một tuyến đường 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 đường. (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 Lint (tìm lỗi mã nguồn) mới để đảm bảo việc sử dụng hàm
popBackStacklấy một loại lớp được cụ thể hoá khi cố gắngpopBackStackbằng cách sử dụng các API an toàn về kiểu. (Ief161, b/358095343)
Sửa lỗi
- Giờ đây, Navigation yêu cầu tuyến đường được truyền đến
startDestinationcủaNavGraphphải chứa các giá trị cho tất cả đối số bắt buộc, bao gồm cả những đối số không thể rỗng và không có giá trị mặc định. (I18e74, b/362594265) - Đối số an toàn của thành phần điều hướng đã thêm tính năng hỗ trợ cho các chuỗi không thể rỗng để các giá trị "null" sẽ được phân tích cú pháp và lưu trữ vào gói như hiện tại. Điều này khác với hành vi hiện tại là các giá trị "null" đượ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 String không thể rỗng. Các chuỗi có thể rỗng vẫn giữ nguyên. (I08b4a, b/348936238)
- Không thể liên kết sâu đến
NavDestinationnữa, trừ phi thông qua một đường liên kết sâu được thêm rõ ràng vào đích đến. Điều này cũng có nghĩa là bạn chỉ có thể chuyển đến tuyến đường của một đích đến bằng hàm điều hướng nạp chồng nhận một tuyến đường dạng chuỗi. Điều này khắc phục một lỗ hổng bảo mật cho phép liên kết sâu đến một đích đến có khả năng đượ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 của Kotlin DSL trong thành phần Điều hướng
- Giờ đây, thành phần Điều hướng cung cấp độ an toàn về kiểu cho Kotlin DSL (do Navigation Compose dùng) bằng cách sử dụng Kotlin Serialization để 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 Navigation Compose đáp ứng yêu cầu An toàn về kiểu để biết thêm thông tin.
Cử chỉ xem trước 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
SeekableTransitionStatemới từ compose-animation. Nhờ đó, bạn có thể 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 xác nhận giao dịch thông qua cử chỉ hoàn tất hoặc huỷ.
Navigation Fragment Composable
- Thêm một cấu phần phần mềm
navigation-fragment-composemới bao gồm một lựa chọn thay thếComposableNavHostFragmentchoNavHostFragment, cho phép bạn thêm đích đến có thể kết hợp vào tệp XML điều hướng. Mỗi đích đếncomposablephải được thể hiện dưới dạng một phương thức@Composablecấp cao nhất, không có đối số và tên đủ điều kiện của phương thức này được dùng làm thuộc tínhandroid:nametrên mỗi đích đến. Khi di chuyển đến một trong những đí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, chẳng hạn như danh sách, mảng, bản đồ. Tất cả các mảngNavTypemặc định (IntArrayType,LongArrayType,FloatArrayType,BoolArrayTypevàStringArrayType) hiện đều kế thừa từ lớp mới này. NavTypehiện hỗ trợ sẵn Danh sách số nguyên, Chuỗi, Boolean, Số thực và Số dài.
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 làm đố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 khác. (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 Enum lồng trong một lớp khác mới được hỗ trợ ngay từ đầu. Các Enum 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 được chia sẻ, tính năng điều hướng sẽ ưu tiên việc đi đến đích đến phù hợp nhất từ vị trí hiện tại trên biểu đồ. (Ic89a4, b/352006850)
- Thành phần điều hướng trong safe args hiện đã thêm một
NavType.EnumTypemới. Điều này có nghĩa là các loạiEnumkhông còn yêu cầuNavTypetuỳ chỉnh nữa. Lưu ý rằngSerialNamecủaEnumphải là tên đủ điều kiện mặc định. (I66d22, b/346475493) - Hoạt độ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ố có thể rỗng,bao gồm
Int?,Long?,Float?,Boolean?vàEnum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) startDestinationcủaNavGraphhiện sẽ sử dụng các giá trị đối số mặc định nếu tuyến đườngstartDestinationđược truyền đếnNavGraphhoàn toàn bằng vớistartDestination.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 đó các hoạt động kiểm tra tìm lỗi mã nguồn
WrongStartDestinationTypekhông kiểm tra các đối tượng Companion trên loại lớp được truyền vào, khiến lint 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
singleTopkhiNavGraphslồng nhau dùng chung tuyến đườngstartDestination. (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
- Thành phần điều hướng hiện hỗ trợ việc điều hướng bằng các chuỗi trống trong đối số đường dẫn. (Ic5dbd, b/339481310)
- Cải thiện thông báo lỗi cho các 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ể dùng API kiểm thử
SavedStateHandleFactorytrong các chương trình kiểm thử không phải Android, nhưng sẽ cần Robolectric hỗ trợ việc phân tích cú pháp đối số bằng Bundle. (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 một vấn đề trong Navigation Compose, trong đó sau khi huỷ Cử chỉ xem trước thao tác quay lại,
NavBackStackEntrymà 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ề sẽ có ảnh động chính xác thay vì chỉ xuất hiện ngay lập tức sau khi người dùng hất. (I97a0c, b/346608857) - Khi sử dụng tính năng Xem trước thao tác quay lại với Navigation Compose, đích đến được bật hiện sẽ có thứ tự z phù hợp, hoạt động chính xác ở trên cùng của đích đến đến. (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
CollectionNavTypecó 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.serializeAsValuevà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ốCollectionNavTyperỗng. Khi điều hướng bằngCollectionNavTyperỗ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ố
ClassCastExceptionkhi sử dụngNavBackStackEntry.toRoutevớiNavTypetuỳ chỉnh có thể rỗng. (I1c29b, b/342239473) - Đã khắc phục các vấn đề về khôi phục trạng thái ngăn xếp lui của Navigation xảy ra khi tìm cách khôi phục một mục trong ngăn xếp lui không thể truy cập thông qua mã nhận dạng từ đích đến hiện tại. Vì các tuyến đường được hỗ trợ bằng mã nhận dạng, nên những đí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 một sự cố do việc gọi
clearBackStack()gây ra, 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 lấy tham sốtypeMapcho các loại đối số tuỳ chỉnh. (Ie39fb, b/339026523)- Thêm một API kiểm thử vào
navigation-testingđể tạoSavedStateHandletừ một đối tượng Kotlin Serializable. (Id4867, b/339080702)
Sửa lỗi
- Chúng tôi đã thêm tài liệu về thông 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
- Công việc hỗ trợ chế độ an toàn về kiểu trong thời gian biên dịch cho Navigation Compose và người dùng Navigation Kotlin DSL dựa trên Kotlin Serialization đã hoàn tất và 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 Kotlin Serialization để 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 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 Navigation Compose đáp ứng yêu cầu 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-composehiện cung cấp một thành phần kết hợp cục bộLocalFragmentcho các phương thức có khả năng kết hợp trongComposableFragment. (If35e5) NavTypehiện hỗ trợ sẵn Danh sách số nguyên, Chuỗi, Boolean, Số thực và Số dài. (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-composemới bao gồm một lựa chọn thay thếComposableNavHostFragmentchoNavHostFragment, cho phép bạn thêm các đích đếncomposablevào tệp XML điều hướng. Mỗi đích đếncomposablephải được thể hiện dưới dạng một phương thức@Composablecấp cao nhất, không có đối số và tên đủ điều kiện của phương thức này được dùng làm thuộc tínhandroid:nametrên mỗi đích đến. Khi di chuyển đến một trong những đí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 Kotlin Serialization. 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 một phương pháp dựa trên Kotlin Serialization. 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
NavHosthiện dùngAlignment.TopStartlàm đối số contentAlignment mặc định. Điều này giúp hiệu ứng chuyển đổi này phù hợp với hiệu ứng mặc định choAnimatedContentvà khắc phục một số trường hợp có hiệu ứng chuyển đổi thu phóng từ tâm không mong muốn. (I09e72, b/330111602)- Khi bạn hất nhanh cử chỉ xem trước thao tác quay lại trong khi dùng Navigation Compose,
NavHosthiện sẽ hoàn tất đúng cách hiệu ứng 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
NavGraphcủastartDestinationngay trong tuyến đườngstartDestinationmà không cần dựa vàodefaultValue. Điều này cũng áp dụng choNavGraphstartDestinationslồ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, chẳng hạn như danh sách, mảng, bản đồ. (Ic6d63, b/188693139) - Tất cả các mảng
NavTypemặc định (IntArrayType,LongArrayType,FloatArrayType,BoolArrayTypevàStringArrayType) hiện thuộc loạiCollectionNavType(Idcf79, b/188693139) NavTypehiện cung cấp một APIvalueEqualsmở mới để xác định xem hai giá trị cùng 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}) làm giá trị hợp lệ choNavTypesdựa trên chuỗi. Điều này khắc phục vấn đề khi giá trị như vậy sẽ đượ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
NavControllerhỗ trợ các tuyến nhưnavigatehoặcpopBackStackhiện có thể khớp đúng các tuyến được điền bằng các đố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
SizeTranformcho các hiệu ứng chuyển đổi trong Navigation Compose bằng cách xác định chúng trong quá trình khởi chạy cho các hàmcomposablevà/hoặcnavigation. (I91062, b/296912651)
Sửa lỗi
- Khắc phục vấn đề trong đó
NavHosttrong Compose Navigation không hiển thị đúng hiệu ứng chuyển đổi khi sử dụng thao tác 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.savedStateHandlehiện được đánh dấu là@MainThreadvì nó 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 một vấn đề trong Navigation khiến các ViewModel
NavGraphđượcDESTROYEDquá sớm vìViewModelcủ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
SeekableTransitionStatemới từ compose-animation. Nhờ đó, bạn có thể 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 xác nhậ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 lỗi rò rỉ
BackStackStatetrong đó nhiều lệnh gọisaveStatetrên một đích đến sẽ dẫn đến việc lưu nhiều trạng thái, nhưng chỉ trạng thái đầu tiên có thể được khôi phục. (I598b0, b/309559751) - Khắc phục vấn đề trong đó các đối số không phải là String sẽ không hiển thị đúng cách khi sử dụng các đối tượng hỗ trợ
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 một vấn đề có thể gây ra hiệu ứng chuyển động thu phóng 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 với các đối số không phải Chuỗi khi sử dụng các 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
- Được chuyển ngược từ Navigation
2.8.0-alpha01: Đã khắc phục lỗi rò rỉBackStackStatetrong đó nhiều lệnh gọisaveState()trên mộtNavBackStackEntrysẽ 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 đề các đối số không phải là String sẽ không hiển thị đúng cách khi sử dụng các đối tượng hỗ trợNavigationUIđể đ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 với các đối số không phải Chuỗi khi sử dụng các 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
- Giờ đây, hàm
NavGraphequals()sẽ xem xét các nút của biểu đồ khác một cách chính xá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 với 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 thiện hiệu suất
- Cải thiện đáng kể hiệu suất (cả về thời gian và số lượng phân bổ) khi so sánh 2 biểu đồ. Điều này có nghĩa là các lệnh gọi như
setGraph(nội bộ so sánh 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 vì đã phân tích kỹ lưỡng để chúng tôi có thể cải thiện tính năng này. (I6ad62) NavHosthiện sẽ kết xuất đích đến bắt đầu trong lần kết hợp đầu tiên thay vì phải đợi lầ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ị loại bỏ nếu bạn gọi
setGraphnhiề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 chuyển đến và đóng liên tục sẽ không còn xuất hiện trong danh sách
NavController.visibleEntriesnữa. (I67586, b/287969970) - Khi một mục bị loại bỏ và sau đó có thay đổi về cấu hình,
ViewModelcủa mục đó sẽ được xoá đúng cách nếusaveStatelà false. (Idf242, b/298164648) - Khắc phục vấn đề khiến
NavControllercó 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 gọi đếnsetGraphchỉ khi Intent đến có cờFLAG_ACTIVITY_NEW_TASKđược đặt. (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 Mảnh 1.6.2, khắc phục vấn đề các thực thể
ViewModelcủ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 chức năng hỗ trợ để
popUpTosử 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 những đối số đó, phù hợp với chức năng hỗ trợ có trongpopBackStack. (I731f4, b/299255572)
Sửa lỗi
- Khắc phục vấn đề khi việc làm gián đoạn một thao tác điều hướng bằng một thao tác điều hướng khác bằng
popUpTosẽ khiếnFragmentNavigatorgặp sự cố. (I3c848, b/301887045) - Khắc phục vấn đề trong đó thao tác nhấn nút quay lại của hệ thống khiến
currentDestinationkhông được cập nhật chính xác để khớp với Mảnh hiển thị. (Id0d6c, b/289877514) - Giờ đây, vòng đời
DialogFragmentsẽ 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 một vấn đề trong Navigation với các Mảnh khiến danh sách
visibleEntrieschứa các mục 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 một tương tác giữarememberSaveablevàNavHostcủa Navigation Compose. Tương tác này sẽ khiến trạng tháirememberSaveablecủa các đích đến và mọi thực thểViewModelthuộc sở hữu củaSavedStateHandlekhông được khôi phục đúng cách sau khi quá trình kết thúc và tái tạo. (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
CREATEDthay vì trạng tháiSTARTED. (aosp/2728520, b/289257213) - Đã khắc phục một vấn đề khi hiển thị đồng thời nhiều hộp thoại trong Navigation Compose, trong đó việc loại bỏ 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
STARTEDthay vì chuyển sangRESUMEDmột cách chính xác. (aosp/2629401, b/286371387) - Navigation Safe Args không còn khởi tạo tác vụ một cách háo hức nếu tác vụ đó thực sự không đượ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 với Compose, trong đó khi sử dụng
Scaffold, bạn có thể gặp lỗi khi cố gắng truy cập vàoLifecycle.State.DESTROYEDViewModel. (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 từ Accompanist
Giờ đây, khi AnimatedContent đã ổn định, chúng tôi có thể di chuyển mã từ Ả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 chế độ hỗ trợ để đặ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 bất kỳ thay đổi nào đối với Accompanist Navigation Animation và sẽ chính thức ngừng cung cấp thư viện này trong thời gian tới, cùng với hướng dẫn về cách di chuyển trở lại Navigation Compose. Tuy nhiên, hướng dẫn này sẽ ngược lại với hướng dẫn di chuyển mà không yêu cầu thay đổi API nào khác nếu bạn đ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 đúng cách các lệnh gọi quay lại của hệ thống ngay cả sau khi Hoạt động đã bị DỪNG và TIẾP TỤC. (Icb6de, b/279118447)
Thông tin cập nhật về phần phụ thuộc
- Giờ đây, Navigation phụ thuộc vào Compose
1.5.0từ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 đề trong đó các lambda
EnterTransitionvàExitTransitionđược tạo trongNavHostcó thể vẫn còn trong bộ nhớ ngay cả sau khiNavHostbị 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, bạn có thể gây ra
IllegalArgumentException. Bạn có thể tránh được trường hợp ngoại lệ này bằng cách tái cấu trúc biểu đồ của mình, 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 thao tác điều hướng bằng lựa 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
- Giờ đây,
NavHosttrong Navigation Compose sẽ chặn chính xác các lệnh gọi quay lại của hệ thống ngay cả sau khiActivityđã đượcSTOPPEDvà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 từ Accompanist
Giờ đây, khi AnimatedContent đã ổn định, chúng tôi có thể di chuyển mã từ Ả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 chế độ hỗ trợ để đặ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 bất kỳ thay đổi nào đối với Accompanist Navigation Animation và sẽ chính thức ngừng cung cấp thư viện này trong thời gian tới, cùng với hướng dẫn về cách di chuyển trở lại Navigation Compose. Tuy nhiên, hướng dẫn này sẽ ngược lại với hướng dẫn di chuyển mà không yêu cầu thay đổi API nào khác nếu bạn đ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
- Từ Navigation
2.6.0-rc02: Khắc phục vấn đề với Navigation trong các mảnh, trong đó việc điều hướng bằngpopUpTovà bật một mảnh ra khỏi ngăn xếp lui mà không tạo lại khung hiển thị của mảnh đó sẽ khiến nút quay lại của hệ thống 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
argumentscủaNavBackStackEntryvàargumentsđược chuyển đếnOnDestinationChangedListenerhiệ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àoargumentshoặc các thực thể khác củaOnDestinationChangedListener.NavDeepLinkhiệ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,NavTypecũ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
NavTypecó 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.StringTypehiện ghi đè phương thức này để gọiUri.encodetrê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ệnstartDestinationcủ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
NavDeepLinktrống bằng cách sử dụng Kotlin DSLnavDeepLinksẽ 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 thành phần Điều hướng bằng Mảnh kể từ phiên bản 2.5.0
NavHostFragmentkhông còn tự chặn nút quay lại của hệ thống nữa. Nhờ đó,FragmentManagercơ bản có thể xử lý thao tác quay lại hệ thống. Điều này cho phép Fragment1.7.0-alpha01trở 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 Mảnh, việc tìm cách thực hiện
FragmentTransactiontheo cách thủ công để thêm một mảnh vào ngăn xếp lui củaFragmentManagersẽ tạo ra 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:datavàapp:dataPatterntrong 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ằngpackageNamecủa ngữ cảnh khi tăng cường. FragmentNavigatorhiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries. Tức là giờ đây,NavBackStackEntryLifecyclesẽ đợ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.Statecuối cùng.DialogFragmentNavigatorhiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries. Tức là giờ đây,NavBackStackEntryLifecyclesẽ chờDialogFragmentLifecyclechuyển sangDESTROYEDtrước khi chuyển sang chínhDESTROYED.- Giờ đây,
NavHostFragmentcho phép bạn truy xuấtNavControllerngay 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),NavigationUIhiệ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àmisTopLevelDestinationmới trênAppBarConfiguration. - Việc tích hợp
setupWithNavControllertrongNavigationUIđể 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.stringcho đối sốReferenceTypecó trongandroid:labelthành các giá trị Chuỗi thay vì xuất số nguyên tài nguyên được tạo tự động. NavigationUIhiệ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 Navigation trong các Mảnh, trong đó việc điều hướng bằng
popUpTovà bật một mảnh ra khỏi ngăn xếp lui mà không tạo lại khung hiển thị của mảnh đó sẽ khiến nút 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
popUpTotrong 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
NavBackStackEntryhiện cung cấp một cách triển khaitoStringtuỳ chỉnh. (Iff00b)
Sửa lỗi
- Khi sử dụng Navigation với các Mảnh, việc tìm cách thực hiện
FragmentTransactiontheo cách thủ công để thêm một mảnh vào ngăn xếp lui củaFragmentManagersẽ tạo ra mộtIllegalArgumentException. Bạn phải luôn thêm các mảnh thông qua APInavigate(). (I6d38e) - Khi có một
navigatethêm một mục và mộtpopBackStackxoá mục đó trong cùng một khung hình, mục nhập trên cùng trong ngăn xếp lui sẽ luôn quay lạiRESUMEDLifecycle.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 cho tuyến không hợp lệ để nếu
NavDestinationchứaNavArgumentkhông thể rỗng, thì tuyến của đích đến này phải chứa các phần giữ chỗ cho các đối số có tên giống nhưNavArgumentkhông thể rỗng. (Ic62bf, b/274697949) - Hoạt động điều hướng bằng đường liên kết sâu dựa trên
Action/MimeTypehiện sẽ không thành công nếu thao tác điều hướng thiếuNavArgumentkhông thể rỗng màNavDestinationyêu cầu vàAction/MimeTypekhớp với. (Ibfa17, b/271777424) - Khi
NavControllerđặt một biểu đồ có cùng tuyến đường và đích đến như 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. Điều này khắc phục sự cố khi sử dụngonLaunchSingleTopmà không lưu trạng thái trong Navigation Compose. Điều này cũng khắc phục một lỗi trong đó việc điều hướng đến các đích đến được liên kết với biểu đồ gốc sẽ tạo ra 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
- Giờ đây,
NavHostFragmentcho phép bạn truy xuấtNavControllerngay khiNavHostFragmentđược đính kèm vàoFragmentManager, thay vì chỉ sauonCreate(). (Ic6382, b/220186282)
Sửa lỗi
- Đã khắc phục
NullPointerExceptionkhi hiển thị một biểu đồ lồng ghép có chứa một đối số không thể rỗng. (6b3581, b/249988437) - Khi sử dụng thao tác quay lại của hệ thống sau khi thực hiện thao tác điều hướng bằng
popUpTo, trạng thái củaNavControllersẽ chuyển đến mục nhập chính xác. (I3a8ec, b/270447657) - Giờ đây,
FragmentNavigatorsẽ bật các mục đúng cách khi ngăn xếp lui được bật thông qua hệ thống quay lại hoặcpopBackStack()và 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
FragmentManagercủaFragmentNavigatormà 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,clearBackStackhiện có các mẫu tuyến đường với các đối số có thể rỗng và các tham số truy vấn có thể rỗng (I22294, b/269302500) - Khắc phục vấn đề khi việc gọi
clearBackStack()từNavControllersẽ không xoá trạng thái đã lưu trong trình quản lý mảnh được liên kết với ngăn xếp lui đã xoá. (Ic1cce, b/271190202) - Khắc phục một lỗi hồi quy trong phiên bản 2.6.0-alpha06 khiến
MenuItemkhông chính xác trongBottomNavigationViewđược làm nổi bật khi sử dụng nút Quay lại của 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 các
NavBackStackEntrykhông được chuyển sang trạng thái RESUMED khi 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ệnstartDestinationcủa NavGraph. (I2b89f)
Thay đổi về API
- Tất cả các phương thức nạp chồng
navigatecủaNavControllerhiệ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 Navigation với Fragment, Vòng đời của
NavBackStackEntrykhông đạt đếnRESUMEDkhi 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 một ngăn xếp lui có nhiều mục, thìBottomMenuItemsẽ không được cập nhật đúng cách. (b/270447657) - Khi sử dụng Navigation với Fragment, sau khi khôi phục trạng thái,
NavBackStackEntryLifecyclesẽ không nhận đượcDESTROYEDkhi 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)FragmentNavigatorhiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries. Tức là giờ đây,NavBackStackEntryLifecyclesẽ đợ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.Statecuối cùng. (I3cb19, b/238686802)DialogFragmentNavigatorhiện sử dụng các API chuyển đổi khi điều hướng và bậtNavBackStackEntries. Tức là giờ đây,NavBackStackEntryLifecyclesẽ chờDialogFragmentLifecyclechuyển sangDESTROYEDtrước khi chuyển sang chínhDESTROYED. (I53ee5, b/261213893)
Các thay đổi về API
NavigatorStatehiện cung cấp APIprepareForTransitionđể cho phépNavigatordi chuyểnNavBackStackEntriessangLifecycle.Statetrung 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
NavGraphNavigatorhoặcComposeNavigatorthông qua thuộc tínhbackstack. Giờ đây,ComposeNavigatorcũng hiển thị lệnh gọi lạionTransitionComplete()để đánh dấuNavBackStackEntrylà đã 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/popWithTransitionvà mục nhập đã được xử lý. (Iadbfa, b/261213893) - Khi sử dụng
launchSingleTopcùng vớiNavGraphlồng nhau, tất cả các đích đến bắt đầu từ đích đến ban đầu tớistartDestinationcủ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ể
DialogFragmentkhi đ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
NavTypecó 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.StringTypehiện ghi đè phương thức này để gọiUri.encodetrênStringđã cho. (Ie5213, b/247637434) NavigationUIhiệ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:NavHostsẽ không còn gây raNoSuchElementExceptionkhi không có đích đến đểCrossfadekế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),NavigationUIhiệ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àmisTopLevelDestinationmới trênAppBarConfiguration. (Ie936e, b/238496771)
Sửa lỗi
- Thành phần
navigation:navigation-fragmenthiệ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
setupWithNavControllertrongNavigationUIđể 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.stringcho đối sốReferenceTypecó trongandroid:labelthà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) NavDeepLinkhiệ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,NavTypecũ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:datavàapp:dataPatterntrong 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ằngpackageNamecủa ngữ cảnh khi tăng cường. (Iaabde, b/234223561) - Giờ đây, việc cố gắng tạo một
NavDeepLinktrống bằng cách sử dụng Kotlin DSLnavDeepLinksẽ 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
NavDestinationmớ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ốReferenceTypebằng cách phân tích cú pháp các giá trịR.stringthành giá trị Chuỗi. (I07d89, b/236269380)
Các thay đổi về hành vi
argumentscủa NavBackStackEntry vàargumentsđược chuyển đếnOnDestinationChangedListenerhiệ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àoargumentshoặ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ờlaunchSingleTopthành true (đúng). (I5a2f1, b/237374580) - Trên Navigation
2.5.2: Khắc phụcIllegalStateExceptiondo 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
NavHostsẽ không còn gây raNoSuchElementExceptionkhi không có đích đến đểCrossfadekế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ờ
launchSingleTopthành true. (I5a2f1, b/237374580) - Khắc phục
IllegalStateExceptiondo 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 Argssẽ 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 –
Navigationhiện có khả năng cung cấpViewModelProvider.Factorykhông có trạng thái quaCreationExtrascủ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
visibleEntrieskhô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 SafeArgssẽ không còn gặp sự cố khi sử dụngapplicationIdSuffixvà không gian tên không cóapplicationId, hoặc khiapplicationIdvà không gian tên khác nhau. (I754b1, b/233119646)NavArgumenthiệ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.xmlcủa bạn.(Ic15a5, b/178403185)
Sửa lỗi
- Các phạm vi thành phần kết hợp trong
NavHostvàDialogHosthiệ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.RELATIVEtrongArgumentsGenerationTaskđể 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ọirememberbao quanh lệnh gọi tớigetBackStackEntry()được truyền đối tượngNavBackStackEntrydướ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,
DialogNavigatorsẽ dùngpopWithTransitionkhi 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 đíchViewModeltrongdialogdẫn đếnIllegalStateExceptionkhi 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ửaIllegalStateExceptionkhi lồng mộtNavHosttrongNavHostkhá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
visibleEntrieskhông còn thử nghiệm nữa. (I4829f, b/225394514)
Sửa lỗi
- Giờ đây, NavHost phụ thuộc vào
visibleEntriestrongNavControllerđể 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,NavHostbên trong sẽ phải tạo hiệu ứng phù hợp. (I4ba2b, b/225394514) visibleEntriesStateFlowdoNavControllercung 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ủnavControllerxuố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)SavedStateViewFactoryhiện hỗ trợ việc sử dụngCreationExtrasngay 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)NavDeepLinkhiệ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 Argssẽ không còn gặp sự cố khi sử dụng vùng chứa tên và không cóAndroidManifest.xmlnà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
CreationExtrasvàoby navGraphViewModelsđể tạoViewModel. (I29217, b/217618359)
Sửa lỗi
NavDeepLinkshiệ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)CreationExtrashiệ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.gradlethay 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:NavHostFragmentgiờ đây sẽ thiết lập chính xácOnBackPressedDispatcherkhi 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ềuNavGraphlồ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
NavBackStackEntryhiệ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) NavDeepLinksẽ 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-alpha03cho phiên bản cũ:NavDeepLinkshiệ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-alpha03cho 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.gradlethay cho gói trong AndroidManifest. (I659ef, b/217414933) - Điều chỉnh Navigation
2.5.0-alpha04cho phiên bản cũ:Navigation Safe Argssẽ 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-alpha04cho 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
NavHostFragmentgiờ đây sẽ thiết lập chính xácOnBackPressedDispatcherkhi 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
NavGraphlồ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:NavDeepLinksẽ 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-ktxsẽ 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-fragmenthiện có cấu hình triển khai tạo sẵn với bố cục hai ngăn thông quaAbstractListDetailFragmentmớ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ụngNavHostFragmentlà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ênNavControllercung cấpFlowsẽ kích hoạt bất cứ khi nàoNavBackStackEntryhiện tại thay đổi. Bạn có thể sử dụng quy trình này thay cho việc quản lýOnDestinationChangedListenertheo cách thủ công. - NavController hiện cho phép truy xuất danh sách tất cả phiên bản
NavBackStackEntryhiển thị cho người dùng dưới dạngStateFlowthông qua thuộc tínhvisibleEntriesthử 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ả khistartDestinationlàNavGraphlồng.getHierarchy()là một hàm trênNavDestinationcó 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
NavigationUIsử 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
popUpTotrê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
NavHostcho phép bạn tạo biểu đồ điều hướng thông qua DSL Kotlin bằng các đíchcomposablevà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
Lifecycletheo mỗi đích có thể kết hợp. Mỗi đích đến chỉ đạt đến trạng tháiRESUMEDkhi hoàn tất các quá trình chuyển đổi vào (entering) và chuyển ngay thànhSTARTEDkhi 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ảIllegalStateExceptionvà các sự cố đa chạm bằng cách chỉ kích hoạt lệnh gọinavigatekhiLifecyclelàRESUMED. - Phạm vi của
ViewModel(thông qua APIviewModel()của Lifecycle ViewModel Compose2.4.0hoặ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
NavControllercũ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ốiNavControllervớ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:popUpToSaveStatevàapp:restoreStateđể lưu trạng thái của bất kỳ đích nào được bật lên thông quaapp:popUpTovà 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
navOptionsKotlin DSL, bạn có thể thêm thuộc tính booleanrestoreStatevà thuộc tính booleansaveStatetrê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
NavOptionstheo 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
NavDeepLinkBuilderhiện đã thêmPendingIntent.FLAG_IMMUTABLEvàoPendingIntentdocreatePendingIntent()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.1và đánh dấusetGraph(),popBackStack(),navigateUp()vànavigate(), các phương thức cập nhậtNavBackStackEntryLifecycle, 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
NavDeepLinkhiệ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
applicationIdTextResourcenữ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
NavDeepLinkhiệ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)
NavControllersẽ 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
startDestinationkhô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
ViewModeltừNavBackStackEntrycủ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ằngNavHostcủ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
SafeArgskhô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ờ
saveStatekhi chuyển đến một biểu đồ khác, đảm bảo mã đó, chẳng hạn nhưNavigationUI.setupWithNavControllervà 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.CREATEDsau khi chuyển sangLifecycle.State.STARTEDlú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
DialogFragmentra 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
onNavDestinationSelectedtrênNavigationUIsẽ trả vềtruengay 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 đượcsetupWithNavControllersử dụng nội bộ chỉ cho mục đích chọnMenuItemliên kết với đích hiện tại bằng cách sử dụnghierarchycủ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 navGraphViewModelkè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
visibleEntrieshiệ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ố
NavDeepLinkcó 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
AbstractListDetailFragmentkhiến thuộc tínhlayout_widthvàlayout_weighttrong 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ộ choDialogFragmenthiệ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ụngpopUpTohoặcpopBackStack()để đóng hộp thoại. (I77ba2) AbstractAppBarOnDestinationChangedListenerhiệ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
NavBackStackEntryhiển thị quavisibleEntriesStateFlow (Ia964e) rememberNavController()hiện bao gồm thêm một tập hợp các thực thểNavigatortuỳ chọn mà được thêm vàoNavControllertrả 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
navArgumenthiện là một phần củanavigation-commonthay 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à
DESTROYEDkhi tất cả yếu tố con đều làDESTROYED. (I86552, b/198741720) - Các đối số
NavDeepLinkcó 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
OnDestinationChangedListenervàcurrentBackStackEntryFlowkhô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
getBackStackEntryvàpreviousBackStackEntrybê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
ArrayIndexOutOfBoundsExceptionnữa khi gọisetGraphbằ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)
NavHosthiện đang quan sát các thay đổi trongLifecycle.StatecủaNavBackStackEntry. Điều này có nghĩa là việc sử dụngNavHosttrong 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ỏ
DialogFragmentsẽ không cập nhật chính xác trạng tháiNavControllersau 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
toSavedStateHandlecho 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ênAbstractListDetailFragmentlầ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),Lifecyclecủa đích mới giờ sẽ chỉ đạt đếnRESUMEDkhi ảnh động hoàn tất. (If0543, b/172112072, b/194301889) NavHostcủ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
ClassCastExceptionnữa. (If0543, b/172112072, b/194301889) - Khắc phục lỗi
NullPointerExceptionxảy ra khi thêm đường liên kết sâu mà không cóUrivà đ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
NavHostcủ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
NoSuchElementExceptionkhi gọipopBackStack()từ trongLifecycleObserverđược đính kèm với mộtNavBackStackEntrydo việc cập nhật lặp lại đối với trạng thái của NavController gây ra. (I64621) AbstractListDetailFragmenthiện cho phép xoá hoàn toànSlidingPaneLayoutkhỏi APK khi không sử dụngAbstractListDetailFragment. (I611ad)NavGraphvàNavDestinationhiệ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-fragmenthiện có cấu hình triển khai tạo sẵn với bố cục hai ngăn thông quaAbstractListDetailFragmentmớ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ụngNavHostFragmentlà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) NavHostcủa cấu phần mềmnavigation-composehiện hỗ trợ đíchdialogngoà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 đíchcomposablehiệ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
addtrongNavigatorStateđã đổ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
Navigatortuỳ chỉnh có thể sử dụng APIpushWithTransactionvàpopWithTransitiontrê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
NavDeepLinkBuilderhiện đã thêmPendingIntent.FLAG_IMMUTABLEvàoPendingIntentdocreatePendingIntent()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
NullPointerExceptionkhi đ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
Kotlinphiê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
IllegalStateExceptionkhi 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-commonhoặ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
OnDestinationChangedListenergọ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.0do 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ênNavDestinationcó 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ã nhận dạng 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
DialogFragmentNavigatorhiện sử dụng APINavigatorState.pop()để thông báo choNavControllerkhi 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áiNavControllerluô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
ConcurrentModificationExceptionnữa khi sử dụng thao tác điều khiển danh sáchOnDestinationChangedListenerstừ 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
findNodelàresIdthay 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
applicationIdTextResourcenữ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ênNavControllercung cấpFlowsẽ kích hoạt bất cứ khi nàoNavBackStackEntryhiện tại thay đổi. Bạn có thể sử dụng quy trình này thay cho việc quản lýOnDestinationChangedListenertheo 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:popUpToSaveStatevàapp:restoreStateđể lưu trạng thái của bất kỳ đích nào được bật lên thông quaapp:popUpTovà 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
navOptionsKotlin DSL, bạn có thể thêm thuộc tính booleanrestoreStatevà thuộc tính booleansaveStatetrê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
NavOptionstheo 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
popUpTotrê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-ktxsẽ tiếp tục được xuất bản nhưng sẽ trống hoàn toàn. (b/184292145) NavDeepLinkBuilderhiệ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
NavBackStackEntryhiện hiển thị dưới dạng một phần của API công khai. (Ie033a) - Các trường
namevàargumentcùng các hàm giải mãNamedNavArgumenthiện đang ở chế độ công khai. (#174, b/181320559) - Giới thiệu một tiện ích
NavBackStackEntry#provideToCompositionLocalsmới cung cấpNavBackStackEntrycho 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.1và đánh dấusetGraph(),popBackStack(),navigateUp()vànavigate(), các phương thức cập nhậtNavBackStackEntryLifecycle, 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/redkhớ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-alpha01chỉ tương thích với ứng dụng Compose phiên bản1.0.0-beta07trở 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)
NavHostFragmenthiện hỗ trợ Trình điều hướng tuỳ chỉnh sử dụng cùng@Navigator.Name("dialog")vớiDialogFragmentNavigatormặ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
namevàargumentvà 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#provideToCompositionLocalsmới cung cấpNavBackStackEntrycho 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
NavHosthiệ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
NavHosthiệ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ụngBackHandlerbê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.currentnay trả về mộtViewModelStoreOwnerrỗng để xác định xemViewModelStoreOwnercó 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
NavHosthiện điền trướcLocalSavedStateRegistryOwnerCompositionLocal vớiNavBackStackEntrycủa đích đó, đảm bảo rằng bất kỳ trạng thái nào được lưu trực tiếp vàoSavedStateRegistrysẽ đượ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) NavHosthiện sử dụngLocalOnBackPressedDispatcherOwnermớ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ênNavControllertrả vềNavBackStackEntryliê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:
NavHostcó 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,
ViewModelvà 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ốiNavControllervớ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
NavDeepLinkRequesthoặ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ớiNavBackStackEntrylà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.comkhớp với cảwww.example.comvà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
NullPointerExceptioncó 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
bentrengrovevề 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ố
ReferenceTypecó 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:defaultValuecho đố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
setViewModelStorehoặcsetLifecycleOwnervớ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
JvmNamevề yêu cầu để đảm bảo rằng giờ đâyReferenceTypecó 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
tatocastervề yêu cầu để cho phépdefaultValuecho 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
NavBackStackEntrytrướ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
NavigationUImà trong đó việc sử dụng đích<activity>vớionNavDestinationSelectedsẽ không điều hướng được đến Activity. (I22e34, b/171364502) - Đã khắc phục vấn đề trong đó
navigation-dynamic-features-fragmentdẫ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
OnDestinationChangedListenerkhi 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ớiFragmentScenariovà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-uibây giờ phụ thuộc vào DrawerLayout 1.1.1, đảm bảo rằngNavigationUIcó thể mở ngăn ngay cả khi sử dụngLOCK_MODE_LOCKED_CLOSEDhoặ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-runtimevànavigation-dynamic-features-fragmentcho 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-testingcung cấpTestNavHostControllercho 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ả:
NavBackStackEntryliê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àoSavedStateHandlephù 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ợ
NavigationUIchoOpenable: Tất cả trường hợp sử dụngDrawerLayouttrongNavigationUIđã được thay thế bằng giao diệnOpenabletổng quát hơn trong CustomView1.1.0và đượcDrawerLayouttriể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:actionvàapp:mimeTypengoàiapp:urihiện có.NavControllerhiệ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ớpNavDeepLinkRequestmớ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
NullPointerExceptionkhi 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 unknowndoNavControllergử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 đó
LifecyclecủaNavBackStackEntrykhô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,NavBackStackEntryhiệ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
NavigationUIhiện phụ thuộc vàoCustomView1.1.0-rc01và 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:actionvàapp:mimeTypengoàiapp:urihiệ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ớpNavDeepLinkRequestmớ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:graphPackagenữa và chỉ số mặc định sẽ được sử dụng bằng cách thêm hậu tốmoduleNamevàoapplicationIdsau 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ị
defaultArgumentsMapcho 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
IllegalStateExceptionkhi liên kết sâu đến đích bắt đầu của biểu đồ khi bạn có nhiều thực thểNavHostFragmenttrong 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
DynamicExtraskhô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) DynamicActivityNavigatorhiện sẽ lấyContexttrong hàm khởi tạo của nó thay vìActivity. (aosp/1250252)
Sửa lỗi
NavigationUIkhô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
DrawerLayoutcụ thể,AppBarConfigurationhiện sử dụng giao diệnOpenableđược nêu trong CustomView1.1.0-alpha02(DrawerLayouttriể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ủaOpenablevớiNavigationUI. (b/129030452)
Sửa lỗi
- Hiện tại, các quy tắc
navigation-common-ktxProGuard 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.0và 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
NavBackStackEntryhiện cho phép bạn truy cậpSavedStateHandlephù 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ấtNavBackStackEntrycho 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-testingmớ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ụngNavControllermô 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-fragmentmớ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-uiProGuard choDrawerArrowDrawableđể đảm bảo rằngandroid.enableJetifier=truelà không bắt buộc. (b/147610424) - Từ Navigation
2.2.1: Mô-đunnavigation-common-ktxhiệ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.1hiện tuỳ thuộc vào Lifecycle ViewModel SavedState2.2.0và 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
IllegalStateExceptionkhi liên kết sâu đến đích bắt đầu của biểu đồ khi bạn có nhiều thực thểNavHostFragmenttrong Activity (Hoạt động). (b/147378752) NavigationUIkhô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-ktxProGuard 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-uiProGuard choDrawerArrowDrawableđể đảm bảo rằngandroid.enableJetifier=truelà không bắt buộc. (b/147610424) - Mô-đun
navigation-common-ktxhiệ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.1bây giờ tuỳ thuộc vào Lifecycle ViewModel SavedState2.2.0và 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ấpLifecycleOwnerdự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:
SavedStateViewModelFactoryhiện là nhà máy mặc định được sử dụng khi sử dụngby navGraphViewModels()hoặc hàm khởi tạoViewModelProvidercó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:
NavHostFragmenthiện sử dụngFragmentContainerViewtừ 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-uisử 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) NavHostFragmenthiệ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-rc03và Fragment1.2.0-rc03nế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
NavDestinationvà 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ênActivityhiệ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
Directionsdo Safe Args tạo hiện chứa giá trị mặc định. (b/141099045) - Lớp Java
Argsdo Safe Args tạo hiện chứa giá trị mặc định. (b/140123727) - Khi sử dụng
Toolbar,NavigationUIkhô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.NavHostphả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
ConcurrentModificationExceptionkhi sử dụng thực thểViewModelđược đính kèm với nhiều thực thểViewModelStorekhá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ấpLifecycleOwnerdự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
NavHostFragmentvàoViewPager2bằngIllegalArgumentException. (b/133640271) - Giờ đây,
NavInflatertrá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
SavedStateViewModelFactoryhiện là nhà máy mặc định được sử dụng khi sử dụngby navGraphViewModels()hoặc hàm khởi tạoViewModelProvidercó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
NavHostFragmenthiệ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-ktxhoặ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ịDialogFragmentkhi bạnnavigatecho chúng. Theo mặc định,NavHostFragmentsẽ 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ể
navigatebằ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
NavHosttuỳ chỉnh đã được chuyển sangNavHostController, cho phép các phương thức triển khai kết nốiNavControllervới dịch vụ lưu trữLifecycleOwner,OnBackPressedDispatchervà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,
NavigationUIsẽ thể hiện ảnh động xoá nút Mũi tên lên khi sử dụngsetupWithNavController()vớiToolbarhoặ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:navGraphmà 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
NavControllersetHostOnBackPressedDispatcherOwner()đã được thay thế bằng phương thứcsetOnBackPressedDispatcher()củaNavHostControllervà hiện yêu cầu bạn gọisetLifecycleOwner()trước khi gọi phương thức này. (aosp/965409) NavHostControllerhiện chứa một phương thứcenableOnBackPressed(boolean)thay thế lớpNavHostOnBackPressedManagermà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
NavHostFragmenttuân thủ đúngapp:defaultNavHostkhi 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/132077777DialogFragmentNavigatorhiệ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 restorekhi đ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ịDialogFragmentkhi bạnnavigatevào các đích đến đó. Theo mặc định,NavHostFragmentsẽ hỗ trợ các đích của hộp thoại. b/80267254 - Ngoài việc gọi
navigatebằ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
NavHostFragmentcủ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ộtUricụ thể có thể được đích đó xử lý hay không hoặc trong trường hợp củaNavGraphlà 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
OnDestinationChangedListenermột cách chính xác. b/130630686 NavHostFragmenthiệ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:argTypekhô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:targetPackagevà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:namecho đí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.1và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.instantiateFragmenthiệ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
Bundlerỗ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_TASKb/126082008- Đã khắc phục vấn đề với
ActivityNavigator.applyPopAnimationsToPendingTransitionkhô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ư
invàfuntrong 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
singleTopb/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
0làmandroid:defaultValuecho đố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ànavigateUphiện sẽ trả về chính xácfalsekhi 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
ClassLoadermộ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ưuNavigatorhoặ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:argTypekhá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
FragmentNavigatorsẽ huỷ đồng bộ hoá với trạng thái củaNavController, gây raIllegalStateExceptionkhi 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:argTypetrỏ đế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 trongActivityhoặ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.safeargstrướ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
IllegalStateExceptionnữa, mà sẽ bỏ qua, khắc phục các vấn đề có nhiềuNavHostFragmenthoặ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
NavDirectionsdo 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ủaNavDirectionshiện được đánh dấu là@NonNullthay vì@Nullable. b/123243957
Sửa lỗi
NavDeepLinkBuilderhiệ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/120042732NavControllerhiện xử lý chính xác các thao tácpopBackStack()khi sử dụngNavHostFragmentlồng nhau hoặc các Fragment khác có ngăn xếp lui. b/122770335NavigationUIhiệ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
NavDirectionsdo Safe Args có đúng giá trịhashCode()bằng nhau khiequals()trả về giá trị true. b/123043662 FragmentNavigatorhiệ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ỉnhFragmentTransactionstrênFragmentManagercủ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
MenuItemcó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/120104424AppBarConfigurationnay cho phép bạn đặt một thực thểOnNavigateUpListenerdự 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ấyBundlekhông rỗng thay vìBundlerỗ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
argTypechí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:labelbằ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ànhOnDestinationChangedListenerb/118670572OnDestinationChangedListenerhiện cũng truyền đối sốBundleaosp/837142- Các thuộc tính
app:clearTaskvàapp:launchDocumentcù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:popUpTovớ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.Extrashiện sử dụng mẫuBuildervà thêm khả năng đặt bất kỳ cờIntent.FLAG_ACTIVITY_nào aosp/828140NavController.onHandleDeepLinkđổi tên thànhhandleDeepLinkaosp/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,NavDeepLinkBuildervàAppBarConfiguration, đã được tạofinalaosp/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 choFragmentFactorydễ dàng hơn. b/119054429 - Hàm khởi tạo cho
NavGraphNavigatorkhông còn lấyContextaosp/835340 - NavigatorProvider hiện là một lớp, chứ không phải là một giao diện.
NavigatorProviderdogetNavigatorProvider()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óOnNavigatorNavigatedListenermà thay vào đó, hãy yêu cầunavigatetrả vềNavDestinationtrong đó. - Các thực thể
Navigatorkhông gửi được các sự kiện bật lên choNavControllernữ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
popUpTohiệ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
IllegalArgumentExceptionkhi sử dụng biểu đồ lồng nhau b/118713731 b/113611083 b/113346925 b/113305559 - Thuộc tính
dataPatterncủ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
@Overridenế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 artifactvà sẽ không xuất bản nữa. - Cấu phần mềm
navigation-testinghiệ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
NavigationViewsẽ đó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àNonNullb/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
NonNullthực tế không phải là giá trị rỗng b/111451769 - Thêm các chú thích
NonNullbổ 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.indexsẽ trở thànhsetDemoControllerIndexb/79995048 - Ví dụ:
action_show_settingssẽ trở thànhactionShowSettingsb/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
setPopUpTovớ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:defaultValuedướ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:nametrong 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
FragmentNavigatorhiệ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
IllegalStateExceptionkhi 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
IllegalArgumentExceptionkhi sử dụng defaultNavHost="true" làm mảnh con. b/79656847Sửa lỗi
StackOverflowErrorkhi sử dụng NavDeepLinkBuilder. b/109653065Sửa lỗi
IllegalArgumentExceptionkhi 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
clearTaskcho các hành động và API liên kết trongNavOptionskhông được dùng nữa. b/80338878Ngừng sử dụng thuộc tính
launchDocumentcho 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.