Di chuyển

Navigation là khung điều hướng giữa các đích trong ứng dụng Android, trong đó cung cấp một API nhất quán cho dù các đích được triển khai dưới dạng Fragment, Activity hay các thành phần khác.
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 30 tháng 7 năm 2025 2.9.3 - - -

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.3"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // 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.3"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // 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.3"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.3"
        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.

Báo lỗi mới

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.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 NavController gây ra ConcurrentModificationException khi sử dụng OnDestinationChangedListeners. (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 MissingFieldException khi kiểm thử SavedStateHandle bằng các tuyến an toàn về kiểu trong khi sử dụng NavTypes tuỳ 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 trong Lifecycle.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ới NavController rằ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ể RESUMED nhiề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ận NavDeepLinkRequest thay 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.(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 trả về một đối tượng NavUri nhậ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

  • Giờ đây, mô-đun navigation-testing hỗ trợ trên máy tính, Linux, macOS và iOS ngoài Android. (I2b770, b/398265336)
  • NavType hiệ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 saveState bằ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 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 NavController khi 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ãn NavDestination được cung cấp thông qua XML sẽ được phân tích cú pháp thông qua NavType.get để đảm bảo logic NavType tuỳ 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ằng dataPattern, ActivityNavigator giờ đây sẽ cố gắng mã hoá giá trị arg bằng NavType củ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

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.setStartDestination dà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

  • Trên Navigation 2.8.5: Khắc phục sự cố trong đó NavHost có thể gửi một ngoại lệ bên trong PredictiveBackHandler nếu ngăn xếp lui được đẩy 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)
  • Từ Navigation 2.8.5: Đã khắc phục NavDestination NullPointerException khi cập nhật startDestination của biểu đồ. (I99421, b/361560785)

Đóng góp bên ngoài

  • Từ phiên bản Navigation 2.8.5: Chế độ an toàn về kiểu đ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ỳ NavType tuỳ 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 ConcurrentModificationException có thể xảy ra khi một LifecycleObserver được đính kèm vào một NavBackStackEntry kích hoạt thay đổi đối với ngăn xếp lùi khi LifecycleOwner lưu trữ (chẳng hạn như Hoạt động hoặc Mảnh chứa) thay đổi trạng thái vòng đời. (Ia9494)

Phiên bản 2.9.0-alpha02

Ngày 30 tháng 10 năm 2024

Phát hành androidx.navigation:navigation-*:2.9.0-alpha02. Phiên bản 2.9.0-alpha02 bao gồm các thay đổi sau.

Đóng góp bên ngoài

  • Phương thức NavController.handleDeepLink(request: NavDeepLinkRequest) 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ới NavController rằ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ể RESUMED nhiều đích đến cùng một lúc, chẳng hạn như. (Id5559)
  • Từ Navigation 2.8.3: Thêm các quy tắc kiểm tra tìm lỗi mã nguồn mới cho các mô-đun navigation-common, navigation-runtimenavigation-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ộng NavGraphBuilderNavDeepLinkBuilder. (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ô-đun navigation-common, navigation-runtimenavigation-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ộng NavGraphBuilderNavDeepLinkBuilder. (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 đã được DESTROYED trước đó, thì sẽ xảy ra IllegalStateException. (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 @Keep trong 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ỗi Obsolete custom lint check khi 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 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 qua NavType.get để đảm bảo logic NavType tuỳ chỉnh được tuân thủ. (Id366d, b/388100796)
  • Khi điều hướng đến hoạt động bằng dataPattern, ActivityNavigator giờ đây sẽ cố gắng mã hoá giá trị arg bằng NavType củ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 NavHost có thể gửi một ngoại lệ bên trong PredictiveBackHandler nế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 NavDestination NullPointerException khi cập nhật startDestination củ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 ConcurrentModificationException có thể xảy ra khi một LifecycleObserver được đính kèm vào một NavBackStackEntry kích hoạt thay đổi đối với ngăn xếp lùi khi LifecycleOwner lưu trữ (chẳng hạn như Hoạt động hoặc Mảnh chứa) thay đổi trạng thái vòng đời. (Ia9494)

Đó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ỳ NavType tuỳ 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ột NavController đã được DESTROYED trước đó, thì sẽ xảy ra IllegalStateException. (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-runtimenavigation-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ộng NavGraphBuilderNavDeepLinkBuilder. (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-runtimenavigation-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ộng NavGraphBuilderNavDeepLinkBuilder. (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ỗi Obsolete custom lint check khi 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 lint 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>List<Double>? mà không yêu cầu bất kỳ NavType tuỳ chỉnh nào. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)

Sửa lỗi

  • Cải thiện thông báo lỗi khi Thao tác điều hướng không thể liên kết đối số của một tuyến với NavType, thông báo lỗi mới sẽ chứa tên đối số, tên đủ điều kiện của đối số và tên đủ điều kiện của tuyến. (Id8416, b/346264232)

Phiên bản 2.8.1

Ngày 18 tháng 9 năm 2024

Phát hành androidx.navigation:navigation-*:2.8.1. Phiên bản 2.8.1 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một quy tắc Lint (tìm lỗi mã nguồn) mới để đảm bảo việc sử dụng hàm popBackStack lấy một loại lớp được cụ thể hoá khi cố gắng popBackStack bằ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 startDestination của NavGraph phả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 vào một NavDestination nữ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 SeekableTransitionState mớ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-compose mới bao gồm một lựa chọn thay thế ComposableNavHostFragment cho NavHostFragment, 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 đến composable phải được biểu thị dưới dạng một phương thức @Composable cấp cao nhất, không có đối số. Tên đủ điều kiện của phương thức này được dùng làm thuộc tính android:name trên mỗi đích đến. Khi bạn 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ủa NavType<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ảng NavType mặc định (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) hiện đều kế thừa từ lớp mới này.
  • NavType hiệ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 gần 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 các đối số an toàn hiện đã thêm một NavType.EnumType mới. Điều này có nghĩa là các loại Enum không còn yêu cầu NavType tuỳ chỉnh nữa. Lưu ý rằng SerialName của Enum phả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?Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • startDestination của NavGraph hiện sẽ sử dụng các giá trị đối số mặc định nếu tuyến đường startDestination được truyền đến NavGraph hoàn toàn bằng với startDestination.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 WrongStartDestinationType khô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 singleTop khi NavGraphs lồng nhau dùng chung tuyến đường startDestination. (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ử SavedStateHandleFactory trong 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, NavBackStackEntry mà người dùng quay lại sẽ không bao giờ quay lại Trạng thái vòng đời RESUMED. Đ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 lên hiện sẽ có thứ tự z phù hợp, hoạt ảnh 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

  • CollectionNavType có một phương thức emptyCollection() 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.serializeAsValueserializeAsValues để làm nổi bật rằng đầu ra cuối cùng phải được mã hoá Uri. (Ida6bd, b/344943214)
  • Khắc phục sự cố khi gọi toRoute<T> bằng đối số CollectionNavType rỗng. Khi điều hướng bằng CollectionNavType rỗng, đối số đầu ra sẽ là giá trị mặc định được khai báo trên lớp Serializable hoặc giá trị trả về của emptyCollection() nếu không có giá trị mặc định. (I84158, Id630f, b/342672856)

Phiên bản 2.8.0-beta02

Ngày 29 tháng 5 năm 2024

Phát hành androidx.navigation:navigation-*:2.8.0-beta02. Phiên bản 2.8.0-beta02 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố ClassCastException khi sử dụng NavBackStackEntry.toRoute với NavType tuỳ 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 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ố typeMap cho 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ạo SavedStateHandle từ 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

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-compose hiện cung cấp một thành phần kết hợp cục bộ LocalFragment cho các phương thức có khả năng kết hợp trong ComposableFragment. (If35e5)
  • NavType hiệ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-compose mới bao gồm một lựa chọn thay thế ComposableNavHostFragment cho NavHostFragment, cho phép bạn thêm các đích đến composable vào tệp XML điều hướng. Mỗi đích đến composable phải được biểu thị dưới dạng một phương thức @Composable cấp cao nhất, không có đối số. Tên đủ điều kiện của phương thức này được dùng làm thuộc tính android:name trên mỗi đích đến. Khi bạn 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

Sửa lỗi

  • NavHost hiện dùng Alignment.TopStart là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 cho AnimatedContent và 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, NavHost hiệ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 NavGraph's startDestination ngay trong tuyến đường startDestination mà không cần dựa vào defaultValue. Điều này cũng áp dụng cho NavGraph startDestinations lồng nhau. (I0e0b5, b/109505019, b/188693139)

Thay đổi về API

  • Đã thêm lớp CollectionNavType<T> trừu tượng mới, một lớp con của NavType<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 NavType mặc định (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) hiện thuộc loại CollectionNavType (Idcf79, b/188693139)
  • NavType hiện cung cấp một API valueEquals mở 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ệ cho NavTypes dự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 NavController hỗ trợ các tuyến như navigate hoặc popBackStack hiện có thể khớp đúng các tuyến được điền bằng các đối số của Mảng NavTypes. (Iea805, b/327229511)

Phiên bản 2.8.0-alpha04

Ngày 6 tháng 3 năm 2024

Phát hành androidx.navigation:navigation-*:2.8.0-alpha04. Phiên bản 2.8.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, bạn có thể chỉ định SizeTranform cho các hiệu ứng chuyển đổi trong Navigation Compose bằng cách xác định chúng trong quá trình khởi chạy cho các hàm composable và/hoặc navigation. (I91062, b/296912651)

Sửa lỗi

  • Khắc phục vấn đề trong đó NavHost trong 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.savedStateHandle hiện được đánh dấu là @MainThread vì 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 được DESTROYED quá sớm vì ViewModel của mục nhập được liên kết không thuộc trạng thái đã lưu. (Ib6bb7, b/317581849)

Cập nhật về phần phụ thuộc

Phiên bản 2.8.0-alpha02

Ngày 7 tháng 2 năm 2024

Phát hành androidx.navigation:navigation-*:2.8.0-alpha02. Phiên bản 2.8.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Navigation Compose hiện hỗ trợ tính năng Xem trước thao tác quay lại trong ứng dụng thông qua các API SeekableTransitionState mới từ compose-animation. 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ỉ BackStackState trong đó nhiều lệnh gọi saveState trê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 đề 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ỉ BackStackState trong đó nhiều lệnh gọi saveState() trên một NavBackStackEntry sẽ dẫn đến việc lưu nhiều trạng thái, nhưng chỉ trạng thái đã lưu đầu tiên mới có thể được khôi phục. (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à chuỗi sẽ không hiển thị đúng cách khi sử dụng các đối tượng hỗ trợ NavigationUI để điền sẵ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 NavGraph equals() 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 để giúp chúng tôi cải thiện tính năng này. (I6ad62)
  • Giờ đây, NavHost 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 của bạn sẽ bị loại bỏ nếu bạn gọi setGraph nhiều lần với cùng một biểu đồ chỉ khi có một đích đến trong biểu đồ chứa một thao tác liên kết hai đích đến. (Ieaed7)
  • Các hộp thoại được chuyển đến và đóng liên tục sẽ không còn xuất hiện trong danh sách NavController.visibleEntries nữa. (I67586, b/287969970)
  • Khi một mục được bật lên sau khi có thay đổi về cấu hình, ViewModel của mục đó sẽ được xoá đúng cách nếu saveState là false. (Idf242, b/298164648)
  • Khắc phục vấn đề khiến NavController có thể xử lý cùng một đường liên kết sâu nhiều lần nếu ngăn xếp lui hoàn toàn trống trước khi thay đổi cấu hình hoặc gọi đến setGraph chỉ 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 các Mảnh phụ thuộc vào Fragment 1.6.2, khắc phục vấn đề trong đó các thực thể ViewModel của các mảnh lồng nhau sẽ không bị xoá khi gọi clearBackStack.

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ợ để popUpTo sử dụng các tuyến đường có đối số để cho phép quay lại một mục cụ thể sử dụng chính xác những đối số đó, phù hợp với chức năng hỗ trợ có trong popBackStack. (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 popUpTo sẽ khiến FragmentNavigator gặ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 currentDestination không được cập nhật chính xác để khớp với Mảnh hiển thị. (Id0d6c, b/289877514)
  • Vòng đời DialogFragment hiện sẽ chuyển sang trạng thái RESUMED đú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 visibleEntries chứ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 đời RESUMED. (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ữa rememberSaveableNavHost của Navigation Compose. Tương tác này sẽ khiến trạng thái rememberSaveable của các đích đến và mọi thực thể ViewModel thuộc sở hữu của SavedStateHandle khô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 CREATED thay vì trạng thái STARTED. (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 STARTED thay vì chuyển sang RESUMED mộ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ào Lifecycle.State.DESTROYED ViewModel. (I1dc11, b/268422136)

Phiên bản 2.7.0

Phiên bản 2.7.0

Ngày 9 tháng 8 năm 2023

Phát hành androidx.navigation:navigation-*:2.7.0. Phiên bản 2.7.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.6.0

Ảnh động 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

  • Hiện tại, Navigation phụ thuộc vào Compose 1.5.0 từ 1.1.0.

Phiên bản 2.7.0-rc01

Ngày 26 tháng 7 năm 2023

Phát hành androidx.navigation:navigation-*:2.7.0-rc01. Phiên bản 2.7.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề trong đó các lambda EnterTransitionExitTransition được tạo trong NavHost có thể vẫn còn trong bộ nhớ ngay cả sau khi NavHost bị xoá khỏi thành phần. (I893d0)

Lỗi đã biết

  • Có một vấn đề từ Navigation 2.6.x là khi điều hướng bằng popUpTo, 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, NavHost trong 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 khi Activity đã được STOPPEDRESUMED. (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ằng popUpTo và 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

  • arguments của NavBackStackEntryarguments được chuyển đến OnDestinationChangedListener hiện chỉ là bản sao của các đối số không thể thay đổi được tạo khi bạn điều hướng tới đích đến. Điều này có nghĩa là mọi thay đổi đối với các Gói đó sẽ không được cập nhật trong các lần truy cập tiếp theo vào arguments hoặc các thực thể khác của OnDestinationChangedListener.
  • NavDeepLink hiện hỗ trợ giá trị mặc định cho các mảng, nhờ vậy mà có thể hỗ trợ các tham số truy vấn lặp lại (ánh xạ đến loại mảng của đối số). Giờ đây, NavType cũng bao gồm cả một phương thức mặc định có thể được ghi đè để kết hợp 2 giá trị đã phân tích cú pháp.
  • Giờ đây, các lớp con tuỳ chỉnh của NavType có thể ghi đè serializeAsValue để chuyển đổi tuần tự một giá trị thành một String (chuỗi), cho phép đóng gói hoàn toàn quá trình chuyển đổi tuần tự và huỷ chuyển đổi tuần tự (thông qua parseValue) trong lớp NavType. StringType hiện ghi đè phương thức này để gọi Uri.encode trên String đã 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ện startDestination của NavGraph.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) hiện đều hỗ trợ các tuyến có đối số được điền một phần hoặc toàn bộ. Lưu ý rằng các đối số này phải khớp chính xác với đối số của mục nhập.
  • Giờ đây, việc cố gắng tạo một NavDeepLink trống bằng cách sử dụng Kotlin DSL navDeepLink sẽ dẫn đến cảnh báo Lint (tìm lỗi mã nguồn) cho biết rằng đường liên kết sâu cần có URI, hành động và/hoặc loại mime thì mới hợp lệ.

Các thay đổi quan trọng đối với thành phần Điều hướng bằng các mảnh kể từ phiên bản 2.5.0

  • NavHostFragment không còn tự chặn nút quay lại của hệ thống nữa. Nhờ đó, FragmentManager cơ bản có thể xử lý thao tác quay lại hệ thống. Điều này cho phép Fragment 1.7.0-alpha01 trở lên cung cấp ảnh động Xem trước thao tác quay lại trong ứng dụng trên các thiết bị Android U.
  • Khi sử dụng Navigation với các Mảnh, việc tìm cách thực hiện FragmentTransaction theo cách thủ công để thêm một mảnh vào ngăn xếp lui của FragmentManager sẽ tạo ra một IllegalArgumentException. Bạn nên luôn thêm các mảnh thông qua API navigate().
  • Khi sử dụng ${applicationId} ở dạng chuỗi chính xác làm phần giữ chỗ trong thuộc tính app:dataapp:dataPattern trong phần tử hoạt động của tệp XML điều hướng, phần giữ chỗ sẽ tự động được điền bằng packageName của ngữ cảnh khi tăng cường.
  • FragmentNavigator hiện sử dụng các API chuyển đổi khi điều hướng và bật NavBackStackEntries. Tức là giờ đây, NavBackStackEntry Lifecycle sẽ đợi các hiệu ứng đặc biệt của mảnh vào và thoát hoàn tất trước khi di chuyển Lifecycle.State cuối cùng.
  • DialogFragmentNavigator hiện sử dụng các API chuyển đổi khi điều hướng và bật NavBackStackEntries. Tức là giờ đây, NavBackStackEntry Lifecycle sẽ chờ DialogFragment Lifecycle chuyển sang DESTROYED trước khi chuyển sang chính DESTROYED.
  • Giờ đây, NavHostFragment cho phép bạn truy xuất NavController ngay khi NavHostFragment được đính kèm vào FragmentManager, thay vì chỉ sau onCreate().
  • 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ư qua Menu), NavigationUI hiện chỉ coi đích đến bắt đầu của biểu đồ điều hướng đó là đích đến cấp cao nhất, thay vì đánh dấu không chính xác từng đích đến trong biểu đồ dưới dạng đích đến cấp cao nhất. Hành vi chuyển mã nhận dạng của từng đích đến là không thay đổi. Chức năng tương tự này hiện cũng có cho mã của chính bạn thông qua hàm isTopLevelDestination mới trên AppBarConfiguration.
  • Việc tích hợp setupWithNavController trong NavigationUI để thao tác với thanh ứng dụng ở trên cùng hiện sẽ phân tích cú pháp các giá trị R.string cho đối số ReferenceType có trong android:label thành các giá trị Chuỗi thay vì xuất số nguyên tài nguyên được tạo tự động.
  • NavigationUI hiện cung cấp nhật ký khi không thao tác được qua MenuItem đã 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 popUpTo và 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 một vấn đề trong Navigation với các mảnh, trong đó việc xoá một mảnh thông qua thao tác điều hướng bằng popUpTo trong lệnh gọi lại vòng đời onResume() sẽ gây ra IllegalStateException. (I21884, b/279644470)

Phiên bản 2.6.0-beta01

Ngày 19 tháng 4 năm 2023

Phát hành androidx.navigation:navigation-*:2.6.0-beta01. Phiên bản 2.6.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • NavBackStackEntry hiện cung cấp một cách triển khai toString tuỳ 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 FragmentTransaction theo cách thủ công để thêm một mảnh vào ngăn xếp lui của FragmentManager sẽ tạo ra một IllegalArgumentException. Bạn nên luôn thêm các mảnh thông qua API navigate(). (I6d38e)
  • Khi có một navigate thêm một mục và một popBackStack xoá mục đó trong cùng một khung hình, mục nhập trên cùng thu được trên ngăn xếp lui giờ đây sẽ luôn quay lại RESUMED Lifecycle.State. (Id8067, b/276495952)

Phiên bản 2.6.0-alpha09

Ngày 5 tháng 4 năm 2023

Phát hành androidx.navigation:navigation-*:2.6.0-alpha09. Phiên bản 2.6.0-alpha09 bao gồm các thay đổi sau.

Sửa lỗi

  • Đã khắc phục các bước kiểm tra cho tuyến không hợp lệ để nếu NavDestination chứa NavArgument khô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ư NavArgument khô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/MimeType hiện sẽ không thành công nếu thao tác điều hướng thiếu NavArgument không thể rỗng mà NavDestination yêu cầu và Action/MimeType khớp với thao tác đó. (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ụng onLaunchSingleTop mà 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, NavHostFragment cho phép bạn truy xuất NavController ngay khi NavHostFragment được đính kèm vào FragmentManager, thay vì chỉ sau onCreate(). (Ic6382, b/220186282)

Sửa lỗi

  • Đã khắc phục NullPointerException khi 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ủa NavController sẽ chuyển đến mục nhập chính xác. (I3a8ec, b/270447657)
  • Giờ đây, FragmentNavigator sẽ 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ặc popBackStack() 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 FragmentManager của FragmentNavigator mà không sử dụng tính năng điều hướng sẽ không còn gây ra sự cố nữa. (b17204, b/274167493)

Thông tin cập nhật về phần phụ thuộc

Phiên bản 2.6.0-alpha07

Ngày 8 tháng 3 năm 2023

Phát hành androidx.navigation:navigation-*:2.6.0-alpha07. Phiên bản 2.6.0-alpha07 bao gồm các thay đổi sau.

Sửa lỗi

  • Các biến thể API getBackStackEntry, popBackStack, clearBackStack hiệ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ừ NavController sẽ 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 MenuItem không chính xác trong BottomNavigationView đượ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 NavBackStackEntry không được chuyển sang trạng thái RESUMED khi dùng Animation. (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ện startDestination của NavGraph. (I2b89f)

Thay đổi về API

  • Tất cả các phương thức nạp chồng navigate của NavController hiện đều được chú giải bằng @MainThread để đảm bảo rằng những phương thức này được gọi trên luồng chính. (I2c0b0, b/263427111)

Sửa lỗi

  • Khắc phục sự cố khi tìm cách điều hướng trong lúc dùng tính năng Điều hướng mảnh động. (I3ee29, b/268360479)
  • Khắc phục lỗi xảy ra khi việc điều hướng đến một mảnh khác thông qua nút quay lại của hệ thống không cập nhật thanh dưới cùng thành đúng mục đã chọn (If559f, b/269044426)

Lỗi đã biết

  • Khi sử dụng Navigation với Fragment, Vòng đời của NavBackStackEntry không đạt đến RESUMED khi sử dụng các API Animation. (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ì BottomMenuItem sẽ không được cập nhật đúng cách. (b/270447657)
  • Khi bạn dùng Navigation với Fragment, sau khi khôi phục trạng thái, NavBackStackEntry Lifecycle sẽ không nhận được DESTROYED khi mảnh của nó là DESTROYED . (b/270610768)

Phiên bản 2.6.0-alpha05

Ngày 8 tháng 2 năm 2023

Phát hành androidx.navigation:navigation-*:2.6.0-alpha05. Phiên bản 2.6.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) hiện đều hỗ trợ các tuyến có đối số được điền một phần hoặc toàn bộ. Lưu ý rằng các đối số này phải khớp chính xác với đối số của mục nhập. (Iebd28, Ic678c, I3b37b, b/257514373)
  • FragmentNavigator hiện sử dụng các API chuyển đổi khi điều hướng và bật NavBackStackEntries. Tức là giờ đây, NavBackStackEntry Lifecycle sẽ đợi các hiệu ứng đặc biệt của mảnh vào và thoát hoàn tất trước khi di chuyển Lifecycle.State cuối cùng. (I3cb19, b/238686802)
  • DialogFragmentNavigator hiện sử dụng các API chuyển đổi khi điều hướng và bật NavBackStackEntries. Tức là giờ đây, NavBackStackEntry Lifecycle sẽ chờ DialogFragment Lifecycle chuyển sang DESTROYED trước khi chuyển sang chính DESTROYED. (I53ee5, b/261213893)

Các thay đổi về API

  • NavigatorState hiện cung cấp API prepareForTransition để cho phép Navigator di chuyển NavBackStackEntries sang Lifecycle.State trung gian. (I42c21, b/238686802)
  • Bạn hiện có thể truy cập vào ngăn xếp lui liên kết với NavGraphNavigator hoặc ComposeNavigator thông qua thuộc tính backstack. Giờ đây, ComposeNavigator cũng hiển thị lệnh gọi lại onTransitionComplete() để đánh dấu NavBackStackEntry là đã thực thi thao tác điều hướng hoặc popBackStack. (I02062, I718db, b/257519195)

Sửa lỗi

  • Trạng thái của Trình điều hướng hiện sẽ không hoạt động khi sử dụng API push/popWithTransition và mục nhập đã được xử lý. (Iadbfa, b/261213893)
  • Khi sử dụng launchSingleTop cùng với NavGraph lồng nhau, tất cả các đích đến bắt đầu từ đích đến ban đầu tới startDestination của nó sẽ chỉ được thêm đúng cách vào đầu ngăn xếp lui. (Id4bea, b/253256629)
  • Giờ đây, tính năng Navigation (Điều hướng) sẽ thay thế đúng cách thực thể DialogFragment khi điều hướng tới cùng một đích đến với cờ launchSingleTop được đặt thành true. (I45b5a, b/149572817)
  • SafeArgs của tính năng Điều hướng sẽ không còn gây ra lỗi biên dịch khi sử dụng các đối số có đúng 19 ký tự. (Id60bc, b/257110095)

Phiên bản 2.6.0-alpha04

Ngày 9 tháng 11 năm 2022

Phát hành androidx.navigation:navigation-*:2.6.0-alpha04. Phiên bản 2.6.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, các lớp con tuỳ chỉnh của NavType có thể ghi đè serializeAsValue để chuyển đổi tuần tự một giá trị thành một String (chuỗi), cho phép đóng gói hoàn toàn quá trình chuyển đổi tuần tự và huỷ chuyển đổi tuần tự (thông qua parseValue) trong lớp NavType. StringType hiện ghi đè phương thức này để gọi Uri.encode trên String đã cho. (Ie5213, b/247637434)
  • NavigationUI hiện cung cấp nhật ký khi không thao tác được qua MenuItem đã chọn. (I2af5a, b/247730357)

Sửa lỗi

  • Giờ đây, các đường liên kết sâu của tính năng Điều hướng được phân tích cú pháp từng phần thay vì khởi tạo biểu đồ, cách này có thể giúp cải thiện hiệu suất của ứng dụng khi khởi động. (Iab0ab)
  • Khắc phục sự cố do di chuyển lên sau khi liên kết sâu đến một đích đến có đối số mặc định rỗng. (I51c24, b/243183636)

Cập nhật về phần phụ thuộc

  • Khả năng hỗ trợ của Điều hướng cho Mô-đun có tính năng động hiện phụ thuộc vào Thư viện Play Feature Delivery chi tiết. (Ib4ddc)
  • Trình bổ trợ Navigation Safe Args hiện phụ thuộc vào trình bổ trợ Android cho Gradle, phiên bản 7.3.0. Do đó, trình bổ trợ này hiện chỉ tương thích với các phiên bản từ 7.3.0 trở lên. (I47e49)

Phiên bản 2.6.0-alpha03

Ngày 24 tháng 10 năm 2022

Phát hành androidx.navigation:navigation-*:2.6.0-alpha03. Phiên bản 2.6.0-alpha03 bao gồm các thay đổi sau.

Sửa lỗi

  • Từ phiên bản Navigation 2.5.3: NavHost sẽ không còn gây ra NoSuchElementException khi không có đích đến để Crossfade kết hợp. Hệ thống hiện sẽ bỏ qua lần kết hợp đó. (Ieb46e, b/253299416)
  • Trên Navigation 2.5.3: Khắc phục sự cố trạng thái Compose đã lưu (ví dụ: việc sử dụ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)

Thông tin cập nhật về phần phụ thuộc