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 11 tháng 12 năm 2024 2.8.5 - - 2.9.0-alpha04

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

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

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

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.8.4"
        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.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à API đã tái cấu trúc.

được tái hiện 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

  • Phương thức 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ố 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à hệ thống quay lại được kích hoạt trong cùng một khung. (I1a429, b/375343407)
  • Trong Navigation 2.8.5: Khắc phục NavDestination NullPointerException khi cập nhật startDestination của biểu đồ. (I99421, b/361560785)

Phiên bản 2.9.0-alpha03

Ngày 13 tháng 11 năm 2024

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

Tính năng mới

  • Tính năng an toàn về kiểu điều hướng hiện hỗ trợ các lớp giá trị dưới dạng tuyến hoặc dưới dạng loại đối số của tuyến. (I9344a, b/374347483)

Sửa lỗi

  • Khắc phục lỗi ConcurrentModificationException có thể xảy ra khi LifecycleObserver đính kèm vào NavBackStackEntry kích hoạt thay đổi đối với ngăn xếp lui 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) phổ biến mới. Cảm ơn Konstantin Tskhovrebov! (I3e228)

Phiên bản 2.9.0-alpha01

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

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

Tính năng mới

  • Giờ đây, Trình điều hướng tuỳ chỉnh có thể đánh dấu các đích đến của mình là triển khai giao diện SupportingPane, cho NavController biết rằng các đích đến này sẽ xuất hiện cùng với các đích đến khác. Ví dụ: bằng cách sử dụng giao diện này, nhiều đích đến có thể là RESUMED cùng một lúc. (Id5559)
  • Từ Navigation 2.8.3: Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đun navigation-common, navigation-runtimenavigation-compose để giúp xác định mọi tuyến an toàn về loại không được chú thích chính xác bằng @Serializable. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộng NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Từ Navigation 2.8.3: Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đun navigation-common, navigation-runtimenavigation-compose để giúp xác định mọi tuyến an toàn về loại có đối số Enum không được chú thích chính xác bằng @Keep. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộng NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Thay đổi về hành vi

  • Giờ đây, việc cố gắng sử dụng NavController đã từng là DESTROYED sẽ gây ra IllegalStateException. (I520da, b/369616172)

Sửa lỗi

  • Cập nhật trường hợp ngoại lệ không tìm thấy lớp Enum để đề xuất sử dụng chú thích @Keep trong trường hợp lớp Enum bị xoá trong các bản dựng rút gọn. (I90e79, b/358137294)

Lỗi đã biết

  • Có vấn đề với các quy tắc tìm lỗi mã nguồn mới được thêm vào Navigation 2.8.*, gây ra lỗi Obsolete custom lint check khi cố gắng chạy công cụ tìm lỗi mã nguồn bằng Trình bổ trợ Android cho Gradle 8.4 trở lên. (b/368070326, b/371463741)

Phiên bản 2.8

Phiên bản 2.8.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 đề 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à hệ thống quay lại được kích hoạt trong cùng một khung. (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 theo tỷ lệ không mong muốn khi sử dụng Navigation Compose và gọi tính năng điều hướng trong cùng một khung mà ảnh động hiện tại đang kết thúc. (I26cb1, b/353294030)
  • Khắc phục lỗi ConcurrentModificationException có thể xảy ra khi LifecycleObserver đính kèm vào NavBackStackEntry kích hoạt thay đổi đối với ngăn xếp lui 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.8.4

Ngày 13 tháng 11 năm 2024

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

Tính năng mới

  • Từ Navigation 2.9.0-alpha03: Tính năng an toàn về kiểu điều hướng hiện hỗ trợ lớp giá trị dưới dạng tuyến hoặc dưới dạng loại đối số của tuyến (I9344a, b/374347483)

Sửa lỗi

Phiên bản 2.8.3

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

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

Tính năng mới

  • Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đun navigation-common, navigation-runtimenavigation-compose để giúp xác định mọi tuyến an toàn về kiểu không được chú thích chính xác bằng @Serializable. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộng NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Thêm các tính năng kiểm tra tìm lỗi mã nguồn mới cho các mô-đun navigation-common, navigation-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 chính xác bằng @Keep. Quy trình kiểm tra này được áp dụng cho tất cả các hàm mở rộ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 công cụ tìm lỗi mã nguồn bằng Trình bổ trợ Android cho Gradle 8.4 trở lên. (I1be3d, b/368070326, b/371463741)

Lỗi đã biết

  • Trình tìm lỗi mã nguồn Navigation sẽ gửi lỗi Kiểm tra tìm lỗi mã nguồn tuỳ chỉnh đã lỗi thời khi cố gắng chạy trình tìm lỗi mã nguồn bằng Lint 16 (AGP 8.7) trở lên. (b/371926651)

Phiên bản 2.8.2

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

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

Tính năng mới

  • Tính năng An toàn về loại điều hướng hiện hỗ trợ các lớp Serializable bao gồm Double, Double?, DoubleArray, DoubleArray?, List<Double>List<Double>? mà không yêu cầu bất kỳ NavType tuỳ chỉnh nào. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)

Sửa lỗi

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

Phiên bản 2.8.1

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

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

Tính năng mới

  • Thêm một quy tắc tìm lỗi mã nguồn mới để đảm bảo việc sử dụng hàm popBackStack lấy một loại lớp được tái cấu trúc khi cố gắng popBackStack bằng các API an toàn về kiểu. (Ief161, b/358095343)

Sửa lỗi

  • Navigation hiện yêu cầu tuyến đường được truyền đến startDestination của NavGraph phải chứa các giá trị cho tất cả đối số bắt buộc, bao gồm cả các đối số không thể rỗng và không có giá trị mặc định. (I18e74, b/362594265)
  • Navigation safe args đã thêm tính năng hỗ trợ cho các chuỗi không rỗng, nhờ đó các giá trị "rỗng" sẽ được phân tích cú pháp và lưu trữ vào gói như hiện có. Điều này khác với hành vi hiện tại, trong đó các giá trị "rỗng" được phân tích cú pháp thành một đối tượng rỗng. Thay đổi này chỉ áp dụng cho các loại Chuỗi không rỗng. Chuỗi rỗng vẫn giữ nguyên. (I08b4a, b/348936238)
  • Bạn không thể liên kết sâu vào NavDestination nữa, ngoại trừ thông qua một đường liên kết sâu được thêm vào đích đến một cách rõ ràng. Điều này cũng có nghĩa là bạn chỉ có thể điều hướng đến tuyến của một đích đến bằng cách nạp chồng hàm điều hướng lấy một tuyến chuỗi. Điều này giúp khắc phục một lỗ hổng có thể tạo ra đường liên kết sâu đến một đích đến có thể được bảo vệ. (Ie30e6)

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

  • Navigation Safe Args hiện phụ thuộc vào Kotlin 1.9.24 thay vì Kotlin 2.X, đảm bảo rằng nhà phát triển không bị buộc phải cập nhật. (a4129a)
  • Navigation Compose hiện phụ thuộc vào Compose 1.7.2.

Phiên bản 2.8.0

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

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

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

An toàn về kiểu trong Navigation Kotlin DSL

  • Giờ đây, tính năng Điều hướng cung cấp tính năng an toàn về kiểu cho Kotlin DSL (do Navigation Compose sử dụng) bằng cách sử dụng tính năng chuyển đổi tuần tự Kotlin để cho phép bạn xác định các đích đến trong biểu đồ điều hướng thông qua các đối tượng và lớp dữ liệu an toàn về kiểu:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

Hãy xem bài đăng trên blog về việc Navigation Compose đáp ứng tính năng An toàn về kiểu để biết thêm thông tin.

Tính năng dự đoán thao tác quay lại trong Navigation Compose

  • Navigation Compose hiện hỗ trợ tính năng Xem trước thao tác quay lại trong ứng dụng thông qua các API SeekableTransitionState mới từ compose-animation. Điều này cho phép bạn sử dụng cử chỉ quay lại để xem đích đến trước đó bằng Hiệu ứng chuyển đổi tuỳ chỉnh trước khi quyết định thực hiện giao dịch thông qua cử chỉ đã hoàn tất hoặc huỷ.

Thành phần kết hợp mảnh điều hướng

  • Thêm một cấu phần phần mềm navigation-fragment-compose mới bao gồm một ComposableNavHostFragment thay thế cho NavHostFragment cho phép bạn thêm các đích đến có thể kết hợp vào tệp XML Điều hướng. Mỗi đích đến composable phải được biểu thị dưới dạng phương thức @Composable cấp cao nhất, không có đối số, tên đủ điều kiện được dùng làm thuộc tính android:name trên mỗi đích đến. Khi điều hướng đến một trong các đích đến này, một mảnh chứa sẽ được tạo để hiển thị nội dung có thể kết hợp.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

Các thay đổi khác

  • Navigation Compose hiện phụ thuộc vào Compose 1.7.0.
  • Navigation hiện cung cấp một lớp CollectionNavType<T> mới, một lớp con của NavType<T> cho các đối số dựa trên tập hợp như danh sách, mảng, bản đồ. Tất cả các mảng NavType mặc định (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) hiện kế thừa từ lớp mới này.
  • NavType hiện đã tích hợp tính năng hỗ trợ cho Danh sách các loại Int, String, Boolean, Float và Long.

Phiên bản 2.8.0-rc01

Ngày 21 tháng 8 năm 2024

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

Sửa lỗi

  • Khắc phục sự cố điều hướng khi truyền các lớp Enum cấp cao nhất dưới dạng đối số an toàn về kiểu. (I0ba76, b/358137294)
  • Navigation 2.8 hiện hoạt động chính xác với SDK 34 và sẽ không chuyển sang SDK 35 cho đến khi phát hành phiên bản 2.9 cùng với các thư viện AndroidX còn lại. (b/358798728)

Phiên bản 2.8.0-beta07

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

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

Lỗi đã biết

  • Do b/358137294, chỉ các Enums lồng trong một lớp khác mới được hỗ trợ ngay từ đầu. Enums cấp cao nhất sẽ được hỗ trợ trong bản phát hành tiếp theo.

Sửa lỗi

  • Khi điều hướng đến các đích đến trùng lặp hoặc dùng chung, tính năng điều hướng sẽ ưu tiên chuyển đến đích đến phù hợp nhất gần nhất từ vị trí hiện tại trong biểu đồ. (Ic89a4, b/352006850)
  • Navigation trong safe args 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)
  • Tính năng điều hướng trong safe args đã thêm tính năng hỗ trợ tích hợp cho các loại đối số rỗng,bao gồm Int?, Long?, Float?, Boolean?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 bằng chính xác 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 đó tính năng kiểm tra tìm lỗi mã nguồn WrongStartDestinationType không kiểm tra các đối tượng Đồng hành trên loại lớp đã truyền, khiến tính năng tìm lỗi mã nguồn không phát hiện được lỗi. (I92b09)

Phiên bản 2.8.0-beta05

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

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

Sửa lỗi

  • Khắc phục sự cố điều hướng singleTop khi NavGraphs lồng nhau dùng chung tuyến 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

  • Navigation hiện hỗ trợ điều hướng bằng chuỗi trống trong đối số đường dẫn. (Ic5dbd, b/339481310)
  • Cải thiện thông báo lỗi cho trình chuyển đổi tuần tự tuỳ chỉnh được khai báo trực tiếp trên các trường lớp thông qua @Serializable(with =...) để làm rõ rằng đây hiện là một tính năng không được hỗ trợ. (I052b0, b/341319151)
  • Giờ đây, bạn có thể sử dụng API kiểm thử SavedStateHandleFactory trong các bài kiểm thử không phải Android, nhưng sẽ yêu cầu Robolectric hỗ trợ phân tích cú pháp đối số bằng Gói. (I76cdc, b/340966212)
  • Khắc phục sự cố khi khôi phục trạng thái khi tiếp tục ứng dụng sau khi quá trình bị gián đoạn bằng cách sử dụng tính năng Điều hướng an toàn về loại trong Compose. (Ia8f38, b/341801005)
  • Khắc phục vấn đề trong Navigation Compose, trong đó sau khi huỷ Cử chỉ quay lại dự đoán, NavBackStackEntry mà người dùng quay lại sẽ không bao giờ quay lại Trạng thái vòng đời RESUMED. Điều này cũng đảm bảo đích đến trả về tạo ảnh động chính xác thay vì bật vào vị trí sau khi hất. (I97a0c, b/346608857)
  • Khi sử dụng tính năng Dự đoán thao tác quay lại bằng Navigation Compose, đích đến đang bật lên hiện sẽ có thứ tự z thích hợp, tạo ảnh động chính xác trên đích đến sắp tới. (I2077b, b/345993681)

Phiên bản 2.8.0-beta03

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

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

Thay đổi về API

  • CollectionNavType có một phương thứ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ể nhận giá trị rỗng. (I1c29b, b/342239473)
  • Khắc phục các vấn đề khôi phục trạng thái ngăn xếp lui của Navigation xảy ra khi cố gắng khôi phục mục nhập ngăn xếp lui không thể truy cập được qua mã nhận dạng từ đích hiện tại. Vì các tuyến đường được hỗ trợ bằng mã nhận dạng, nên các đích đến được tạo bằng tuyến đường cũng bị ảnh hưởng. Điều này cũng khắc phục sự cố do gọi clearBackStack() có cùng vấn đề cơ bản. (I423c3, b/339908057)

Phiên bản 2.8.0-beta01

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

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

Thay đổi về API

  • SavedStateHandle.toRoute() hiện nhận tham số typeMap cho các loại đối số tuỳ chỉnh. (Ie39fb, b/339026523)
  • Thêm API kiểm thử vào navigation-testing để tạo SavedStateHandle từ đối tượng Serializable của Kotlin. (Id4867, b/339080702)

Sửa lỗi

  • Thêm tài liệu về tham số bị thiếu cho các hàm Navigation Kotlin DSL. (I26a36)

Phiên bản 2.8.0-alpha08

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

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

Safe Args trong Navigation Compose

Chức năng này sử dụng tính năng Chuyển đổi tuần tự Kotlin để cho phép bạn xác định đích đến trong biểu đồ điều hướng thông qua các đối tượng an toàn về kiểu và lớp dữ liệu:

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

Hãy xem bài đăng trên blog về việc Navigation Compose đáp ứng tính năng An toàn về kiểu để biết thêm thông tin.

Tính năng mới

  • Cấu phần phần mềm navigation-fragment-compose hiện cung cấp một thành phần kết hợp LocalFragment cục bộ cho các phương thức có khả năng kết hợp trong ComposableFragment. (If35e5)
  • NavType hiện đã tích hợp tính năng hỗ trợ cho Danh sách các loại Int, String, Boolean, Float và Long. (I4b6dd, Ia914c, b/188693139)

Phiên bản 2.8.0-alpha07

Ngày 17 tháng 4 năm 2024

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

Tính năng mới

  • Thêm một cấu phần phần mềm navigation-fragment-compose mới bao gồm một ComposableNavHostFragment thay thế cho NavHostFragment cho phép bạn thêm đích 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 phương thức @Composable cấp cao nhất, không có đối số, tên đủ điều kiện được dùng làm thuộc tính android:name trên mỗi đích đến. Khi điều hướng đến một trong các đích đến này, một mảnh chứa sẽ được tạo để hiển thị nội dung có thể kết hợp. (I0ef2e, b/265480755)

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

Thay đổi về API

  • Tiếp tục hỗ trợ Safe Args trong Navigation Compose bằng cách sử dụng phương pháp dựa trên quá trình chuyển đổi tuần tự Kotlin. Các API này chưa hoàn tất và được đánh dấu bằng chú giải ExperimentalSafeArgsApi. Chú thích này sẽ bị xoá khi toàn bộ giao diện API hoàn tất trong một bản phát hành trong tương lai. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)

Phiên bản 2.8.0-alpha06

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

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

Thay đổi về API

Sửa lỗi

  • NavHost hiện sử dụng Alignment.TopStart làm đối số contentAlignment mặc định. Điều này phù hợp với giá trị mặc định cho AnimatedContent và khắc phục một số trường hợp tỷ lệ không mong muốn từ quá trình chuyển đổi trung tâm. (I09e72, b/330111602)
  • Khi vuốt cử chỉ xem trước thao tác quay lại trong khi sử dụng Navigation Compose, NavHost hiện sẽ hoàn tất chính xác quá trình chuyển đổi tuỳ chỉnh thay vì kết thúc ngay lập tức. (I99017, b/327292110)

Phiên bản 2.8.0-alpha05

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

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

Tính năng mới

  • Giờ đây, bạn có thể truyền các đối số đến startDestination của NavGraph ngay trong tuyến 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 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 giúp xác định xem hai giá trị thuộc cùng một loại có bằng nhau hay không. (I6cb97, b/327229511)

Sửa lỗi

  • Các tham số truy vấn trong đường liên kết sâu hiện cho phép các giá trị ở dạng dấu ngoặc nhọn xung quanh tên đối số (tức là {argName}) dưới dạng giá trị hợp lệ cho NavTypes dựa trên chuỗi. Điều này giúp khắc phục vấn đề khi một giá trị như vậy được coi là không hợp lệ (hoặc không có giá trị) đối với tất cả các loại. (I18302, b/327274038)
  • Các hàm NavController hỗ trợ các tuyến như navigate hoặc popBackStack hiện có thể so khớp chính xác các tuyến được điền bằng đối số của Mả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 các hiệu ứng đó trong quá trình khởi chạy cho hàm composable và/hoặc navigation. (I91062, b/296912651)

Sửa lỗi

  • Khắc phục vấn đề NavHost trong tính năng Điều hướng trong Compose không hiển thị đúng cách quá trình chuyển đổi khi sử dụng tính năng Quay lại hệ thống mà không có cử chỉ. (Iceeae, b/325998468)

Phiên bản 2.8.0-alpha03

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

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

Thay đổi về API

  • NavBackStackEntry.savedStateHandle hiện được đánh dấu là @MainThread vì dù sao thì lớp này cũng sử dụng mã bắt buộc phải nằm trên luồng chính. (Ibb988, b/299523245)

Sửa lỗi

  • Khắc phục vấn đề trong Navigation khiến ViewModel NavGraph trở thành 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. Điều này cho phép bạn sử dụng cử chỉ quay lại để xem đích đến trước đó bằng Hiệu ứng chuyển đổi tuỳ chỉnh trước khi quyết định thực hiện giao dịch thông qua cử chỉ đã hoàn tất hoặc huỷ. (I8b8e9)

Phiên bản 2.8.0-alpha01

Ngày 24 tháng 1 năm 2024

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

Sửa lỗi

  • Khắc phục sự cố rò rỉ BackStackState trong đó nhiều lệnh gọ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ỉ có thể khôi phục trạng thái đầu tiên. (I598b0, b/309559751)
  • Khắc phục vấn đề đối số không phải Chuỗi sẽ không hiển thị đúng cách khi sử dụng trình trợ giúp NavigationUI để điền tiêu đề của thanh ứng dụng. (#636, b/316676794)

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

  • Navigation Compose hiện phụ thuộc vào Compose 1.7.0-alpha01 để khắc phục vấn đề có thể gây ra hiệu ứng chuyển động theo tỷ lệ không mong muốn. (b/297258205)

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

  • Cảm ơn SimonMarquis đã khắc phục vấn đề hiển thị đối số không phải Chuỗi khi sử dụng trình trợ giúp NavigationUI để điền tiêu đề của thanh ứng dụng.

Phiên bản 2.7.7

Phiên bản 2.7.7

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

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

Sửa lỗi

  • Điều chỉnh cho phiên bản cũ từ Navigation 2.8.0-alpha01: Khắc phục sự cố rò rỉ BackStackState, trong đó nhiều lệnh gọi saveState() trên một NavBackStackEntry sẽ dẫn đến việc lưu nhiều trạng thái, nhưng chỉ có thể khôi phục trạng thái đã lưu đầu tiên. (I598b0, b/309559751)
  • Điều chỉnh đối với phiên bản cũ của Navigation 2.8.0-alpha01: Khắc phục vấn đề đối số không phải Chuỗi sẽ không hiển thị đúng cách khi sử dụng trình trợ giúp 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 số không phải Chuỗi khi sử dụng trình trợ giúp NavigationUI để điền tiêu đề của thanh ứng dụng.

Phiên bản 2.7.6

Phiên bản 2.7.6

Ngày 13 tháng 12 năm 2023

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

Sửa lỗi

  • Hàm NavGraph equals() hiện xem xét chính xác các nút của biểu đồ khác thay vì chỉ xem xét nút gọi. Điều này sẽ đảm bảo rằng các biểu đồ có các nút có mã nhận dạng khác nhau sẽ không còn được coi là bằng nhau (I401cb, b/311414915)

Phiên bản 2.7.5

Phiên bản 2.7.5

Ngày 1 tháng 11 năm 2023

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

Cải tiến hiệu suất

  • Cải thiện đáng kể hiệu suất (cả về thời gian và số lượt phân bổ) khi so sánh hai biểu đồ. Điều này có nghĩa là các lệnh gọi như setGraph so sánh nội bộ biểu đồ mới với biểu đồ hiện có sẽ nhanh hơn nhiều và dẫn đến ít khung hình bị bỏ qua hơn. Cảm ơn Michał Z đã phân tích kỹ lưỡng để giúp cải thiện vấn đề này. (I6ad62)
  • NavHost hiện sẽ hiển thị đích bắt đầu trên lượt truyền thành phần đầu tiên thay vì cần phải đợi lượt truyền thứ hai để đọc trạng thái đã cập nhật. (I439a7, b/304852206)

Sửa lỗi

  • Khắc phục vấn đề ngăn xếp lui sẽ bật lên nếu bạn gọi setGraph nhiều lần với cùng một biểu đồ chỉ khi có một đích đến trong biểu đồ chứa một thao tác liên kết hai đích đến. (Ieaed7)
  • Các hộp thoại được điều hướng đến và đóng liên tiếp sẽ không còn rò rỉ vào danh sách NavController.visibleEntries nữa. (I67586, b/287969970)
  • Khi một mục được đẩy lên, sau đó là một thay đổi về cấu hình, ViewModel của mục đó hiện sẽ được xoá đúng cách nếu saveState là sai. (Idf242, b/298164648)
  • Khắc phục lỗi NavController có thể xử lý cùng một đường liên kết sâu nhiều lần nếu ngăn xếp lui hoàn toàn trống trước khi thay đổi cấu hình hoặc chỉ gọi đến setGraph khi Ý định đến đã đặt cờ FLAG_ACTIVITY_NEW_TASK. (I73c7f)

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

  • Giờ đây, tính năng Điều hướng bằng Mảnh phụ thuộc vào Fragment 1.6.2, khắc phục vấn đề các thực thể ViewModel của các mảnh lồng nhau sẽ không bị xoá khi gọ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 tính năng hỗ trợ cho popUpTo để sử dụng các tuyến đường có đối số cho phép quay lại một mục nhập cụ thể sử dụng chính xác các đối số đó, khớp với tính năng hỗ trợ có trong popBackStack. (I731f4, b/299255572)

Sửa lỗi

  • Khắc phục vấn đề khi việc gián đoạn thao tác điều hướng bằng một thao tác điều hướng khác bằng popUpTo sẽ khiến FragmentNavigator gặp sự cố. (I3c848, b/301887045)
  • Khắc phục vấn đề khi nhấn nút quay lại của hệ thống khiến currentDestination không được cập nhật chính xác để khớp với Mảnh hiển thị. (Id0d6c, b/289877514)
  • Vòng đời DialogFragment hiện sẽ chuyển sang trạng thá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 vấn đề trong Navigation với các Mảnh khiến danh sách visibleEntries chứa các mục nhập không chính xác. (I5caa9, b/288520638)
  • Khắc phục vấn đề khiến đích đến Cửa sổ nổi (tức là Dialogs, Bottomsheets, v.v.) không bao giờ nhận được lệnh gọi lại Vòng đờ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 sự tương tác giữa rememberSaveableNavHost của Navigation Compose, điều này sẽ khiến trạng thái rememberSaveable của đích đến và mọi bản sao SavedStateHandle thuộc sở hữu của ViewModel không được khôi phục đúng cách sau khi quá trình bị gián đoạn và tạo lại. (b/298059596, b/289436035)
  • Khắc phục vấn đề khi hiển thị đồng thời nhiều hộp thoại trong Navigation Compose, trong đó các hộp thoại bị che khuất một phần (ví dụ: không phải hộp thoại trên cùng) sẽ ở trạng thái Vòng đời CREATED thay vì trạng thái STARTED. (aosp/2728520, b/289257213)
  • Khắc phục vấn đề khi hiển thị đồng thời nhiều hộp thoại trong Navigation Compose, trong đó việc đóng hộp thoại trên cùng sẽ khiến hộp thoại trên cùng mới bị kẹt ở trạng thái Vòng đời STARTED thay vì chuyển chính xác sang RESUMED. (aosp/2629401, b/286371387)
  • Navigation Safe Args không còn tạo bản sao cho tác vụ của nó nếu tác vụ đó không thực sự được thực thi. (I0e385, b/260322841)

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

  • Navigation Compose hiện phụ thuộc vào Compose 1.5.1.

Phiên bản 2.7.1

Phiên bản 2.7.1

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

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

Sửa lỗi

  • Khắc phục vấn đề trong tính năng Điều hướng bằng 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 của Accompanist

Giờ đây, khi AnimatedContent đã ổn định, chúng ta có thể di chuyển mã từ Accompanist Navigation Animation (Ảnh động điều hướng đi kèm) trở lại chính Navigation Compose.

Điều này có nghĩa là tất cả các tính năng hỗ trợ việc đặt hiệu ứng chuyển đổi tuỳ chỉnh có trong AnimatedNavHost đều được hỗ trợ trực tiếp trong NavHost.

Chúng tôi sẽ không thực hiện thêm thay đổi nào đối với Ảnh động điều hướng của Accompanist và sẽ sớm ngừng sử dụng tính năng này cùng với hướng dẫn về cách di chuyển trở lại Navigation Compose. Tuy nhiên, việc này sẽ ngược lại với hướng dẫn di chuyển mà không cần 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 chính xác các lệnh gọi quay lại hệ thống ngay cả sau khi Hoạt động đã DỪNG và TIẾP TỤC. (Icb6de, b/279118447)

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

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

Phiên bản 2.7.0-rc01

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

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

Sửa lỗi

  • Khắc phục vấn đề các hàm lambda 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, có thể gây ra IllegalArgumentException. Bạn có thể tránh ngoại lệ này bằng cách tái cấu trúc biểu đồ, tương tự như lời khuyên được đề xuất tại đây. (b/287133013)

Phiên bản 2.7.0-beta02

Ngày 28 tháng 6 năm 2023

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

Sửa lỗi

  • Navigation Compose hiện có thứ tự z phù hợp cho các hiệu ứng chuyển đổi tuỳ chỉnh sử dụng tính năng điều hướng bằng tuỳ chọn popUpTo.(/Ib1c3a, b/285153947)

Phiên bản 2.7.0-beta01

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

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

Sửa lỗi

  • NavHost trong Navigation Compose hiện chặn chính xác các lệnh gọi quay lại hệ thống ngay cả sau khi Activity đã là 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 của Accompanist

Giờ đây, khi AnimatedContent đã ổn định, chúng ta có thể di chuyển mã từ Accompanist Navigation Animation (Ảnh động điều hướng đi kèm) trở lại chính Navigation Compose.

Điều này có nghĩa là tất cả các tính năng hỗ trợ việc đặt hiệu ứng chuyển đổi tuỳ chỉnh có trong AnimatedNavHost đều được hỗ trợ trực tiếp trong NavHost.

Chúng tôi sẽ không thực hiện thêm thay đổi nào đối với Ảnh động điều hướng của Accompanist và sẽ sớm ngừng sử dụng tính năng này cùng với hướng dẫn về cách di chuyển trở lại Navigation Compose. Tuy nhiên, việc này sẽ ngược lại với hướng dẫn di chuyển mà không cần 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

  • Trên Navigation 2.6.0-rc02: Khắc phục vấn đề với Navigation trong Fragment, trong đó việc điều hướng bằng popUpTo và bật một mảnh ra khỏi ngăn xếp lui mà không tạo lại chế độ xem của mảnh đó sẽ khiến hệ thống quay lại ngừng hoạt động. (Ieb8d4, b/281726455)

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

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

Phiên bản 2.6.0

Phiên bản 2.6.0

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

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

Các thay đổi quan trọng đối với Navigation kể từ phiên bản 2.5.0

  • arguments củ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 đến đích đến. Điều này có nghĩa là mọi thay đổi đối với các Gói đó sẽ không được cập nhật trong các lần truy cập tiếp theo và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 Navigation với Fragment kể từ phiên bản 2.5.0

  • NavHostFragment không còn tự chặn nút quay lại của hệ thống. Điều này cho phép FragmentManager cơ bản xử lý thao tác quay lại hệ thống. Điều này cho phép Mảnh 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 Fragment, việc cố gắng thực hiện FragmentTransaction theo cách thủ công để thêm một mảnh vào ngăn xếp lui của FragmentManager sẽ gửi một IllegalArgumentException. Bạn phải 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.
  • NavHostFragment hiện 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 tính năng Điều hướng trong Mảnh, trong đó việc điều hướng bằng popUpTo và bật một mảnh ra khỏi ngăn xếp lui mà không tạo lại chế độ xem của mảnh đó sẽ khiến tính năng quay lại của hệ thống ngừng hoạt động. (Ieb8d4, b/281726455)

Phiên bản 2.6.0-rc01

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

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

Sửa lỗi

  • Khắc phục vấn đề trong Navigation với các mảnh, trong đó việc xoá một mảnh thông qua thao tác điều hướng bằng popUpTo trong lệnh gọi lại vòng đờ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 cách triển khai toString tuỳ chỉnh. (Iff00b)

Sửa lỗi

  • Khi sử dụng Navigation với các Fragment, việc cố gắng thực hiện FragmentTransaction theo cách thủ công để thêm một mảnh vào ngăn xếp lui của FragmentManager sẽ gửi một IllegalArgumentException. Bạn phải 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, thì mục trên cùng thu được trên ngăn xếp lui hiện sẽ luôn đưa mục đó trở lạ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 tuyến không hợp lệ, chẳng hạn như nếu NavDestination chứa NavArgument không thể nhận giá trị rỗng, thì tuyến của đích đến này phải chứa phần giữ chỗ cho các đối số có tên giống với NavArgument không thể nhận giá trị rỗng. (Ic62bf, b/274697949)
  • Giờ đây, thao tác điều hướng đường liên kết sâu dựa trên Action/MimeType sẽ không thành công nếu thao tác điều hướng thiếu NavArgument không thể nhận giá trị rỗng mà NavDestination yêu cầu và Action/MimeType khớp với NavDestination đó. (Ibfa17, b/271777424)
  • Khi NavController đặt một biểu đồ có cùng tuyến đường và đích đến với biểu đồ trước, giờ đây, biểu đồ này sẽ thay thế đúng cách các nút biểu đồ hiện tại và đích đến ngăn xếp lui bằng các thực thể mới. Thao tác này sẽ khắc phục sự cố khi sử dụng onLaunchSingleTop mà không lưu trạng thái trong Navigation Compose. Điều này cũng khắc phục lỗi điều hướng đến các đích đến liên kết với bản dựng biểu đồ gốc và ngăn xếp lui không chính xác. (I5bc58, b/275258161, b/275407804)

Phiên bản 2.6.0-alpha08

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

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

Tính năng mới

  • NavHostFragment hiện 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 bật một biểu đồ lồng nhau có chứa đối số không thể rỗng. (6b3581, b/249988437)
  • Khi sử dụng tính năng quay lại hệ thống sau khi điều hướng bằng popUpTo, trạng thái của NavController sẽ bật lên mục nhập chính xác. (I3a8ec, b/270447657)
  • Giờ đây, FragmentNavigator sẽ bật các mục nhập đúng cách khi ngăn xếp lui được bật lên thông qua thao tác quay lại hệ thống hoặc popBackStack() và liệu giao dịch có sử dụng hiệu ứng cho mảnh hay không. (I81bdf)
  • Việc thêm các mảnh vào FragmentManager củ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 nhận tuyến đường hiện nhận mẫu tuyến đường có đối số rỗng và tham số truy vấn rỗng (I22294, b/269302500)
  • Khắc phục vấn đề khi 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 liên kết với ngăn xếp lui đã xoá. (Ic1cce, b/271190202)
  • Khắc phục lỗi hồi quy trong phiên bản 2.6.0-alpha06 khiến MenuItem trong BottomNavigationView bị làm nổi bật không đúng cách khi sử dụng tính năng 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 NavBackStackEntry không được chuyển sang trạng thái RESUMED (ĐÃ TIẾP TỤC) khi sử 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 tính năng Điều hướng với Mảnh, Vòng đời của NavBackStackEntry không thể đạ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 ngăn xếp lui có nhiều mục nhập, thì BottomMenuItem sẽ không được cập nhật chính xác. (b/270447657)
  • Khi sử dụng tính năng Điều hướng bằng Mảnh, sau khi khôi phục trạng thái, NavBackStackEntry Lifecycle sẽ không nhận đượ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

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ư 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. (Ie936e, b/238496771)

Sửa lỗi

  • Thành phần navigation:navigation-fragment hiện phụ thuộc vào Fragment phiên bản 1.5.2. (I00ba4)
  • Mục trong trình đơn đã chọn sẽ không còn được cập nhật khi chuyển đến đích đến FloatingWindow, chẳng hạn như hộp thoại. (I4cde8, b/240308330)

Phiên bản 2.6.0-alpha01

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

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

Tính năng mới

  • Việc tích hợp setupWithNavController 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. (I5f803, b/167959935)
  • NavDeepLink hiện hỗ trợ giá trị mặc định cho các mảng, nhờ vậy mà có thể hỗ trợ các tham số truy vấn lặp lại (ánh xạ đến loại mảng của đối số). Giờ đây, NavType cũng bao gồm cả một phương thức mặc định có thể được ghi đè để kết hợp 2 giá trị đã phân tích cú pháp. (Id68c3, b/209977108)
  • Khi sử dụng ${applicationId} ở dạng chuỗi chính xác làm phần giữ chỗ trong thuộc tí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. (Iaabde, b/234223561)
  • Giờ đây, việc cố gắng tạo một NavDeepLink trống bằng cách sử dụng Kotlin 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ệ. (I08d2f, b/154038883)

Các thay đổi về API

  • Thêm hàm mở rộng NavDestination mới để phân tích cú pháp các nhãn động có đối số ở dạng android:label="{arg}" thành Chuỗi. Hỗ trợ các đối số ReferenceType bằng cách phân tích cú pháp các giá trị R.string thành giá trị Chuỗi. (I07d89, b/236269380)

Các thay đổi về hành vi

  • arguments của NavBackStackEntry và arguments được chuyển đế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. (I676f5)

Sửa lỗi

  • Trên 2.5.2 điều hướng: Giờ đây, tính năng Dynamic Navigation (Điều hướng linh hoạt) sẽ tìm cách cài đặt đúng cách các đích đến Activity (Hoạt động) từ các mô-đun khác trước khi điều hướng đến đó. (Ia2c16, b/240292838)
  • Trên Navigation 2.5.2: Giờ đây, tính năng Navigation (Điều hướng) sẽ thay thế đúng cách thực thể Fragment (Mảnh) khi điều hướng đến cùng một đích đến và đặt cờ launchSingleTop thành true (đúng). (I5a2f1, b/237374580)
  • Trên Navigation 2.5.2: Khắc phục IllegalStateException do việc điều hướng đến một biểu đồ kép lồng nhau dùng chung đích đến chính với đích đến bắt đầu mới được bật lên. (I9f7cb, b/243778589)

Phiên bản 2.5

Phiên bản 2.5.3

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

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

Sửa lỗi

  • NavHost sẽ không còn gây 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)
  • Khắc phục sự cố trạng thái Compose đã lưu (ví dụ: việc sử dụng rememberSaveable) không bị xoá và chỉ bị xoá khi một đích đến được đẩy ra khỏi ngăn xếp lui. (I64949)

Phiên bản 2.5.2

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

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

Sửa lỗi

  • Giờ đây, tính năng Dynamic Navigation (Điều hướng linh hoạt) sẽ tìm cách cài đặt các đích đến Activity (Hoạt động) từ các mô-đun khác theo cách phù hợp trước khi điều hướng đến đó. (Ia2c16, b/240292838)
  • Giờ đây, tính năng Navigation (Điều hướng) sẽ thay thế đúng cách thực thể Fragment (Mảnh) khi điều hướng đến cùng một đích đến và đặt cờ launchSingleTop thành true. (I5a2f1, b/237374580)
  • Khắc phục IllegalStateException do việc điều hướng đến một biểu đồ kép lồng nhau dùng chung đích đến chính với đích đến bắt đầu mới được bật lên. (I9f7cb, b/243778589)

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

Phiên bản 2.5.1

Ngày 27 tháng 7 năm 2022

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

Sửa lỗi

  • Navigation Safe Args sẽ không còn gây ra cảnh báo về việc ngừng sử dụng trong các lớp được tạo khi dùng các loại đối số tuỳ chỉnh được lưu trong Bundle. (Id86ed, b/237725966)

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

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 CreationExtrasNavigation hiện có khả năng cung cấp ViewModelProvider.Factory không có trạng thái qua CreationExtras của Vòng đời 2.5.0.

Điều hướng SafeArgs

  • Navigation Safe Args đã nâng cấp phần phụ thuộc Android Gradle Plugin để dựa vào 7.0.4, giảm khả năng tương thích cho các phiên bản AGP trước 7.0.
  • Thêm tính năng hỗ trợ cho thuộc tính không gian tên build.gradle để dùng thay vì applicationId.

Các thay đổi khác

  • API visibleEntries không còn là bản thử nghiệm và cung cấp chức năng truy xuất tất cả các mục hiện có đích đến hiển thị theo NavController.

Phiên bản 2.5.0-rc02

Ngày 15 tháng 6 năm 2022

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

Sửa lỗi

  • Khắc phục sự cố do chuyển đổi nhanh giữa các đích đến ở dưới cùng khi sử dụng thành phần Điều hướng trong Compose NavHost. (I3979a, b/234054916)
  • Navigation SafeArgs sẽ không còn gặp sự cố khi sử dụng applicationIdSuffix và không gian tên không có applicationId, hoặc khi applicationId và không gian tên khác nhau. (I754b1, b/233119646)
  • NavArgument hiện có một hàm toString() 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ệp navigation.xml của bạn.(Ic15a5, b/178403185)

Sửa lỗi

  • Các phạm vi thành phần kết hợp trong NavHostDialogHost hiện được sắp xếp theo thứ tự dự kiến, nghĩa là các thành phần bên trong được xử lý trước thành phần bên ngoài. (I157e6)
  • Giờ đây, tính năng Điều hướng SafeArgs sử dụng PathSensitivity.RELATIVE trong ArgumentsGenerationTask để 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ọi remember bao quanh lệnh gọi tới getBackStackEntry() được truyền đối tượng NavBackStackEntry dưới dạng một khoá.(Ib7081 .b/227382831)

Phiên bản 2.5.0-beta01

Ngày 20 tháng 4 năm 2022

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

Sửa lỗi

  • Giờ đây, DialogNavigator sẽ dùng popWithTransition khi thực hiện một lệnh gọi dismiss(). Thao tác này khắc phục những tình huống tương tranh khi sử dụng đích ViewModel trong dialog dẫn đến IllegalStateException khi loại bỏ Hộp thoại bằng cách sử dụng hệ thống quay lại hoặc nhấn vào bên ngoài hộp thoại để thoát. (Id7376, b/226552301)

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

  • Giờ đây, thao tác điều hướng phụ thuộc vào Vòng đời 2.5.0-beta01, sửa IllegalStateException khi lồng một NavHost trong NavHost khác vào một thẻ điều hướng dưới cùng chính khi sử dụng nhiều ngăn xếp lui.

Phiên bản 2.5.0-alpha04

Ngày 6 tháng 4 năm 2022

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

Thay đổi về API

Sửa lỗi

  • Giờ đây, NavHost phụ thuộc vào visibleEntries trong NavController để xác định mục nào cần soạn. Điều này có nghĩa là khi sử dụng NavHost lồng, NavHost bên trong sẽ phải tạo hiệu ứng phù hợp. (I4ba2b, b/225394514)
  • visibleEntries StateFlow do NavController cung cấp hiện dựa trên trạng thái Vòng đời tối đa của mục nhập thay vì trạng thái Vòng đời hiện tại. Điều này có nghĩa là ngay cả khi vòng đời của máy chủ navController xuống dưới mức STARTER (THỜI ĐIỂM BẮT ĐẦU), danh sách toàn bộ chế độ hiển thị sẽ vẫn giữ nguyên. (I9e2a8, b/225394514)
  • SavedStateViewFactory hiện hỗ trợ việc sử dụng CreationExtras ngay cả khi được khởi tạo bằng SavedStateRegistryOwner. Nếu bạn cung cấp thông số bổ sung, các đối số đã khởi tạo sẽ bị bỏ qua. (I6c43b, b/224844583)
  • NavDeepLink hiện có thể phân tích cú pháp Uris bằng một tham số truy vấn đơn lẻ không có giá trị. (I0efe8, b/148905489)
  • Chuỗi trống hiện được coi là đối số hợp lệ trong liên kết sâu. (I70a0d, b/217399862)
  • Navigation Safe Args sẽ không còn gặp sự cố khi sử dụng vùng chứa tên và không có AndroidManifest.xml nào. (I17ccf, b/227229815)

Phiên bản 2.5.0-alpha03

Ngày 23 tháng 2 năm 2022

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

Thay đổi về API

  • Giờ đây, bạn có thể chuyển CreationExtras vào by navGraphViewModels để tạo ViewModel. (I29217, b/217618359)

Sửa lỗi

  • NavDeepLinks hiện hỗ trợ đầy đủ các ký tự dòng mới được mã hoá và nhúng trong các tuyến/URI liên kết sâu. (I513d1, b/217815060)
  • CreationExtras hiện sẽ hoạt động chính xác khi được sử dụng với NavBackStackEntries để tạo ViewModels. (I69161, b/217617710)
  • Navigation Safe Args hiện đã hỗ trợ việc sử dụng không gian tên được xác định trong build.gradle thay cho gói trong AndroidManifest. (I659ef, b/217414933)

Phiên bản 2.5.0-alpha02

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

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

Sửa lỗi

  • Từ Navigation 2.4.1: NavHostFragment giờ đây sẽ thiết lập chính xác OnBackPressedDispatcher khi sử dụng tính năng liên kết khung hình với biểu đồ lồng. (Ifbb51, b/214577959)
  • Trong Navigation 2.4.1: Khi liên kết sâu thông qua nhiều NavGraph lồng nhau, các đích đến bắt đầu trung gian sẽ được đưa vào ngăn xếp lui một cách chính xác. (I504c0, b/214383060)

Phiên bản 2.5.0-alpha01

Ngày 26 tháng 1 năm 2022

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

Tính năng mới

Sửa lỗi

  • Khắc phục vấn đề không thể truy cập vào ViewModel được tạo thông qua by navGraphViewModels() từ onCreate() của một Fragment với IllegalStateException. (I8a14d)
  • NavDeepLink sẽ không còn giải mã đối số hai lần một cách không cần thiết nữa, nghĩa là đối số chính xác hiện sẽ được chuyển đến đích cuối cùng. (I31b0a, b/210711399)

Safe Args

  • Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle, phiên bản 7.0.4. Điều này có nghĩa là Navigation Safe Args sẽ không còn tương thích với các phiên bản Android Studio cũ hơn phiên bản 7.0 nhưng giờ đây sẽ tương thích với trình bổ trợ Android cho Gradle từ 7.1.0 trở lên. (I41c88, b/213086135, b/207670704)

Phiên bản 2.4.2

Phiên bản 2.4.2

Ngày 6 tháng 4 năm 2022

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

Sửa lỗi

  • Điều chỉnh Navigation 2.5.0-alpha03 cho phiên bản cũ: NavDeepLinks hiện đã hỗ trợ đúng cách các ký tự dòng mới được mã hoá và nhúng trong tuyến/URI liên kết sâu. (I513d1, b/217815060)
  • Điều chỉnh Điều hướng 2.5.0-alpha03 cho phiên bản cũ: Tính năng SafeArgs điều hướng hiện hỗ trợ sử dụng vùng chứa tên đã xác định trong build.gradle thay cho gói trong AndroidManifest. (I659ef, b/217414933)
  • Điều chỉnh Navigation 2.5.0-alpha04 cho phiên bản cũ: Navigation Safe Args sẽ không còn gặp sự cố khi sử dụng không gian tên và không có AndroidManifest.xml. (I17ccf, b/227229815)
  • Điều chỉnh Navigation 2.5.0-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

  • NavHostFragment giờ đây sẽ thiết lập chính xác OnBackPressedDispatcher khi sử dụng tính năng liên kết chế độ xem với biểu đồ lồng ghép. (Ifbb51, b/214577959)
  • Khi liên kết sâu thông qua nhiều NavGraph lồng ghép, giờ đây, ngăn xếp lui sẽ hiển thị chính xác đích bắt đầu trung gian. (I504c0, b/214383060)
  • Điều chỉnh đối với phiên bản cũ của Navigation2.5.0-alpha01: Khắc phục vấn đề việc truy cập vào ViewModel được tạo thông qua by navGraphViewModels() từ onCreate() của mảnh sẽ không thành công với IllegalStateException. (I8a14d)
  • Điều chỉnh đối với phiên bản cũ của Navigation 2.5.0-alpha01: NavDeepLink sẽ không còn giải mã đối số hai lần một cách không cần thiết nữa, nghĩa là đối số đã mã hoá đúng cách hiện sẽ được chuyển đến trang đích cuối cùng. (I31b0a, b/210711399)
  • Điều chỉnh cho phiên bản cũ của Navigation 2.5.0-alpha01: Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle Android phiên bản 7.0.4. Điều này có nghĩa là Navigation Safe Args sẽ không còn tương thích các phiên bản Android Studio thấp hơn 7.0 và giờ đây sẽ tương thích với trình bổ trợ Android cho Gradle từ 7.1.0 trở lên. (I41c88, b/213086135, b/207670704)

Phiên bản 2.4.0

Phiên bản 2.4.0

Ngày 26 tháng 1 năm 2022

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

Thay đổi quan trọng kể từ phiên bản 2.3.0

  • Tất cả cấu phần mềm của Navigation đã được viết lại bằng Kotlin. Điều này đã giúp cải thiện tính chất rỗng của các lớp sử dụng thuộc tính chung (chẳng hạn như các lớp con của NavType). Tất cả hàm tiện ích Kotlin từng là một phần của cấu phần mềm -ktx đã được chuyển sang các cấu phần mềm chính tương ứng. Các cấu phần mềm -ktx sẽ tiếp tục được xuất bản nhưng sẽ trống hoàn toàn.
  • Cấu phần mềm navigation-fragment hiện có cấu hình triển khai tạo sẵn với bố cục hai ngăn thông qua AbstractListDetailFragment mới. Mảnh này sử dụng SlidingPaneLayout để quản lý ngăn danh sách (do lớp con tạo ra) và ngăn chi tiết sử dụng NavHostFragment làm cấu hình triển khai như được minh hoạ trong phần triển khai mẫu của chúng tôi.
  • Phương thức currentBackStackEntryAsFlow() trên NavController cung cấp Flow sẽ kích hoạt bất cứ khi nào NavBackStackEntry hiện tại thay đổi. Bạn có thể sử dụng quy trình này thay cho việc quản lý OnDestinationChangedListener theo cách thủ công.
  • NavController hiện cho phép truy xuất danh sách tất cả phiên bản NavBackStackEntry hiển thị cho người dùng dưới dạng StateFlow thông qua thuộc tính visibleEntries thử nghiệm.
  • Giờ đây, bạn có thể mở rộng lớp NavType để tạo NavTypes tuỳ chỉnh. Các loại tuỳ chỉnh chỉ được hỗ trợ khi tạo biểu đồ điều hướng theo phương thức lập trình, chẳng hạn như thông qua Navigation Graph Kotlin DSL.
  • Navigation hiện cung cấp các API findStartDestination()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ả khi startDestinationNavGraph lồng. getHierarchy() là một hàm trên NavDestination có thể dùng để xác minh xem một đích nhất định có nằm trong hệ thống phân cấp của một đích khác hay không.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Các phương thức NavigationUI sử dụng BottomNavigationView đã được cập nhật để sử dụng siêu lớp được nêu trong Material 1.4.0, NavigationBarView. Việc này cho phép sử dụng các phương thức này với NavigationRailView.

  • 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áp app:enterAnim="?attr/transitionEnter".

  • Safe Args giờ đây có thể tạo phương thức fromSavedStateHandle() cho mỗi lớp NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

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ếnString 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()getBackStackEntry().

Điều này có một số ảnh hưởng đến API:

  • Chúng tôi đã ngừng sử dụng thuộc tính Kotlin popUpTo trên Kotlin DSL và thay bằng popUpToId.
  • API getStartDestination() đã ngừng hoạt động và được thay bằng getStartDestinationId().

Không giống như khi điều hướng theo mã nhận dạng, việc điều hướng theo tuyến tuân theo quy tắc giống như quy tắc đối với đường liên kết sâu ngầm ẩn, trong đó bạn có thể điều hướng trực tiếp đến bất kỳ đích đến nào trong biểu đồ lồng, đảm bảo rằng các tuyến này dùng được trong các dự án có nhiều mô-đun mà không cần thêm rõ ràng một đường liên kết sâu hiển thị bên ngoài vào mỗi đích đến.

Navigation Compose

Cấu phần mềm navigation-compose cho phép tích hợp giữa Navigation Component với Jetpack Compose. Phương thức này sử dụng các hàm @Composable làm đích trong ứng dụng.

Bản phát hành này cung cấp:

  • Thành phần có thể kết hợp NavHost cho phép bạn tạo biểu đồ điều hướng thông qua DSL Kotlin bằng các đích composabledialog, đồng thời hỗ trợ các Trình điều hướng tuỳ chọn, chẳng hạn như các Trình điều hướng không bắt buộc trong Accompanist Navigation Material.
  • Hỗ trợ bắt buộc cho việc chuyển đổi giữa các đích. Bạn có thể dùng Accompanist Navigation Animation để kiểm soát quá trình chuyển vào và thoát bằng các API Compose thử nghiệm.
  • Đặt phạm vi của Lifecycle theo mỗi đích có thể kết hợp. Mỗi đích đến chỉ đạt đến trạng thái RESUMED khi hoàn tất các quá trình chuyển đổi vào (entering) và chuyển ngay thành STARTED khi bắt đầu các quá trình chuyển đổi thoát (exiting), nhờ đó bạn có thể tránh được tất cả IllegalStateException và các sự cố đa chạm bằng cách chỉ kích hoạt lệnh gọi navigate khi LifecycleRESUMED.
  • Phạm vi của ViewModel (thông qua API viewModel() của Lifecycle ViewModel Compose 2.4.0 hoặc hiltViewModel() của Hilt Navigation Compose 1.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 trong onCleared() 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 đến NavBackStackEntry.
  • Phạm vi trạng thái rememberSaveable ở cấp độ đích, đảm bảo tất cả trạng thái thành phần kết hợp được lưu và khôi phục tự động khi bạn quay lại một đích.
  • Hỗ trợ đầy đủ tính năng lưu và khôi phục trạng thái NavController cũng như trạng thái của đích sau khi quá trình bị gián đoạn và tạo lại.
  • Tích hợp tự động với nút quay lại của hệ thống.
  • Hỗ trợ việc truyền các đối số, đính kèm các đường liên kết sâu tới các đích và trả lại kết quả về các đích trước đó.

  • Bạn có thể soạn một số trình trợ giúp cụ thể trong rememberNavController()currentBackStackEntryAsState() để cho phép chuyển trạng thái lên trên và kết nối NavController với các thành phần có thể kết nối bên ngoài NavHost (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()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ủa app:popUpToSaveStateapp:restoreState để lưu trạng thái của bất kỳ đích nào được bật lên thông qua app:popUpTo và khôi phục trạng thái liên kết với đích đã được chuyển qua dạng app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Trong navOptionsKotlin DSL, bạn có thể thêm thuộc tính boolean restoreState và thuộc tính boolean saveState trên trình tạo popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Khi tạo đối tượng NavOptions theo cách thủ công qua NavOptions.Builder, bạn có thể sử dụng setRestoreState() và phương thức nạp chồng mới cho setPopUpTo() để 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ằng popBackStack() hoặc popUpToSaveState.

Trong mọi trường hợp, NavController sẽ lưu và khôi phục trạng thái của mỗi NavBackStackEntry, bao gồm cả các bản sao ViewModel trong phạm vi đích điều hướng. Chúng tôi đã cập nhật API Navigator để cho phép các Navigator hỗ trợ việc lưu và khôi phục trạng thái của riêng API đó.

Thay đổi về hành vi

  • NavDeepLinkBuilder hiện đã thêm PendingIntent.FLAG_IMMUTABLE vào PendingIntent do createPendingIntent() trả về, đảm bảo rằng API này hoạt động như dự kiến khi chạy trên Android 12.
  • Navigation giờ đây phụ thuộc vào Lifecycle 2.3.1 và đánh dấu setGraph(), popBackStack(), navigateUp()navigate(), các phương thức cập nhật NavBackStackEntry Lifecycle, chẳng hạn như @MainThread, liên kết Navigation với lệnh thực thi chuỗi chính được nêu trong Lifecycle 2.3.0.
  • Các đường liên kết sâu giờ đây sẽ xác minh việc tất cả đối số bắt buộc (những đối số không có giá trị mặc định) đều có trong Uri.
  • Các đối số được phân tích cú pháp NavDeepLink hiện coi các ký hiệu dấu thăng giống như dấu hỏi và là dấu phân tách giữa các phân đoạn đường dẫn, ngăn không cho một đối số nằm trên dấu thăng.
  • Khi tạo hành động, mã Kotlin được tạo từ Safe Args giờ đây sẽ đặt các đối số không có giá trị mặc định trước các đối số có giá trị mặc định làm tham số.
  • Khi tạo đối số, Safe Args giờ đây sẽ đặt các tham số không có giá trị mặc định trước các tham số có giá trị mặc định.
  • Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle 4.2.0. Điều này có nghĩa là bạn sẽ không còn thấy cảnh báo sử dụng applicationIdTextResource nữa.

Vấn đề đã biết

  • Đã sửa trong Navigation 2.5.0-alpha01: lỗi truy cập ViewModel được tạo thông qua by navGraphViewModels() từ onCreate() của Fragment với trạng thái IllegalStateException. (b/213504272)
  • Đã sửa trong Navigation 2.5.0-alpha01: Safe Args 2.4.0 không tương thích với trình bổ trợ Android cho Gradle từ 7.1.0 trở lên. (b/213086135)
  • Việc liên kết sâu với nhiều biểu đồ điều hướng lồng nhau sẽ không tạo được chính xác toàn bộ ngăn xếp. (b/214383060)

Phiên bản 2.4.0-rc01

Ngày 15 tháng 12 năm 2021

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

Thay đổi về hành vi

  • Các đối số được phân tích cú pháp NavDeepLink hiện coi các ký hiệu dấu thăng giống như dấu hỏi và là dấu phân tách giữa các đối số. (I21309, b/180042703)

Sửa lỗi

  • Đường liên kết sâu sẽ không còn bỏ qua các đối số có giá trị giống với tên của phần giữ chỗ. (If8017, b/207389470)
  • NavController sẽ không còn gặp sự cố khi bật lên đích đến lồng nhau bằng lượt chuyển đổi sau khi NavController được khôi phục. (I0f7c9, b/205021623)
  • Thông báo lỗi khi sử dụng startDestination không hợp lệ hiện sẽ mặc định cho tuyến của đích đến bắt đầu (nếu có). (I86b9d, b/208041894)

Sửa lỗi Navigation Compose

  • Đã khắc phục sự cố tiềm ẩn gây ra do chuyển đổi nhanh giữa đích bắt đầu và đích khác bằng cách sử dụng các mục trong trình đơn điều hướng dưới cùng. (Ic8976, b/208887901)
  • Đích hộp thoại hiện đã được khôi phục đúng cách ở đầu màn hình sau khi thay đổi chế độ cấu hình hoặc quá trình bị gián đoạn. (I4c0dc, b/207386169)
  • Đã khắc phục sự cố khi truy xuất ViewModel từ NavBackStackEntry của hộp thoại khi hộp thoại bị loại bỏ. (I6b96d, b/206465487)
  • Đã khắc phục sự cố khi sử dụng activity đích bằng NavHost của tính năng Navigation Compose sẽ dẫn đến việc tạo lại các mục vô hạn. (I8f64c)
  • Đã khắc phục sự cố rò rỉ trong Navigation Compose, trong đó vẫn tham chiếu đến hoạt động cũ sau khi thay đổi chế độ cấu hình hoặc quá trình bị gián đoạn. (I4efcb, b/204905432)

Sửa một số lỗi Safe Args

  • SafeArgs không còn gặp sự cố khi cố gắng khôi phục các mảng tuỳ chỉnh có thể phân phối sau khi quá trình bị gián đoạn. (I618e8, b/207315994)
  • Đã khắc phục lỗi trong Safe Args không cho phép mảng boolean có giá trị null. (I8c396, b/174787525)

Phiên bản 2.4.0-beta02

Ngày 3 tháng 11 năm 2021

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

Thay đổi về API

  • Quy trình xử lý cả đường liên kết sâu rõ ràng và ngầm ẩn hiện đã tự động thêm cờ saveState khi chuyển đến một biểu đồ khác, đảm bảo mã đó, chẳng hạn như NavigationUI.setupWithNavController và mã sử dụng nhiều ngăn xếp lui, hoạt động như dự kiến. (Ic8807)

Các thay đổi về hành vi

  • Các mẫu đường liên kết sâu hiện được soạn ra từng phần trong NavDeepLink thay vì trong giai đoạn tăng cường. Cách này sẽ cải thiện thời gian tăng cường của các biểu đồ điều hướng có chứa đường liên kết sâu. (b8d257, b/184149935)

Sửa lỗi

  • Khắc phục sự cố NavBackStackEntries bị đẩy xuống Lifecycle.State.CREATED sau khi chuyển sang Lifecycle.State.STARTED lúc NavHost được thêm trực tiếp vào setContent() của hoạt động. (Ia5ac1, b/203536683)
  • Khắc phục một tình huống tương tranh trong đó việc bật đích đến DialogFragment ra khỏi ngăn xếp lui trước khi hộp thoại thực sự xuất hiện sẽ không đóng hẳn hộp thoại, dẫn đến sự cố khi người dùng đóng hộp thoại bị lỗi theo cách thủ công. (I687e5)
  • Khắc phục một vấn đề trong đó API onNavDestinationSelected trên NavigationUI sẽ trả về true ngay cả khi bạn không thực sự navigate() đến biểu đồ điều hướng đó. Phương thức này hiện sử dụng cùng một logic được setupWithNavController sử dụng nội bộ chỉ cho mục đích chọn MenuItem liên kết với đích hiện tại bằng cách sử dụng hierarchy của đích. (I2b053)

Phiên bản 2.4.0-beta01

Ngày 27 tháng 10 năm 2021

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

Tính năng mới

  • Giờ đây, bạn có thể sử dụng by navGraphViewModel kèm theo một tuyến để thay thế cho việc sử dụng mã nhằm hỗ trợ tốt hơn Navigation Kotlin DSL với Fragment. (I901e3, b/201446416)

Thay đổi về API

  • API visibleEntries hiện đang thử nghiệm. (I93f6f)

Sửa lỗi

  • ViewModels sẽ không còn bị huỷ khi các lượt chuyển đổi bị gián đoạn bởi việc điều hướng qua lại giữa các màn hình này (Id52d8, b/200817333)
  • Các đối số NavDeepLink có thể rỗng không còn yêu cầu giá trị mặc định khi thêm các đường liên kết sâu vào NavDestination. (I5aad4, b/201320030)
  • NavBackStackEntries có Lifecycles khác hiện không được coi là bình đẳng nữa. Điều này có nghĩa là NavHost sẽ kết hợp lại tất cả đích khi điều hướng bằng singleTop và khi chọn lại các mục trong trình đơn ở dưới cùng. (I1b351, b/196997433)
  • Khắc phục vấn đề với AbstractListDetailFragment khiến thuộc tính layout_widthlayout_weight trong ngăn danh sách được onCreateListPaneView() 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 API dismiss() không đồng bộ cho DialogFragment hiện sẽ xoá hoàn toàn tất cả các đích hộp thoại phía trên hộp thoại hiện bị loại bỏ. Điều này không ảnh hưởng đến các trường hợp mà bạn sử dụng popUpTo hoặc popBackStack() để đóng hộp thoại. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener hiện đã có thông báo lỗi rõ ràng hơn cho onDestinationChanged(). (Ie742d)

Phiên bản 2.4.0-alpha10

Ngày 29 tháng 9 năm 2021

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

Tính năng mới

  • NavController hiện cung cấp khả năng truy xuất danh sách tất cả bản sao NavBackStackEntry hiển thị qua visibleEntriesStateFlow (Ia964e)
  • rememberNavController() hiện bao gồm thêm một tập hợp các thực thể Navigator tuỳ chọn mà được thêm vào NavController trả về. Việc này nhằm hỗ trợ tốt hơn cho các Trình điều hướng tuỳ chọn, chẳng hạn như Trình điều hướng trong Tài liệu điều hướng đi kèm. (I4619e)

Sửa lỗi

  • Tính năng Dynamic Navigation sẽ không còn gặp sự cố khi Activity được tạo lại. (Ifa6a3, b/197942869)
  • Khắc phục sự cố nút quay lại của hệ thống chỉ hiện sau khi quay lại đích đến của thành phần kết hợp chứa NavHost. (3ed148, b/195668143)
  • Safe Args hiện tạo các đối số cho fromBundle()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ằng popBackStack() hoặc popUpToSaveState. (I80a0f)
  • Bây giờ, bạn có thể chuyển danh sách các đối số và/hoặc đường liên kết sâu đến trình tạo biểu đồ điều hướng lồng nhau và các đối số này sẽ tự động được thêm vào biểu đồ kết quả. (I8a470, b/182545357)

Thay đổi về API

  • Hàm Kotlin DSL navArgument hiện là một phần của navigation-common thay vì navigation-compose. Bạn sẽ phải cập nhật các mục nhập để tiếp tục sử dụng hàm này. (I1d095)

Các thay đổi về hành vi

  • Khi tạo đối số, Safe Args giờ đây sẽ đặt các tham số không có giá trị mặc định trước các tham số có giá trị mặc định. (I89709, b/198493585)

Sửa lỗi

  • Khi sử dụng Navigation Compose, NavGraphs chỉ sẽ là DESTROYED khi tất cả yếu tố con đều là DESTROYED. (I86552, b/198741720)
  • Các đối số NavDeepLink có thể rỗng không còn yêu cầu giá trị mặc định. (Ia14ef, b/198689811)
  • Khi gọi setGraph() bằng một biểu đồ mới, bạn hiện cũng sẽ xoá mọi ngăn xếp lui đã lưu ngoài hành vi trước đây là bật lên ngăn xếp lui. (I97f96)
  • Khắc phục vấn đề trong đó các bản saoOnDestinationChangedListenercurrentBackStackEntryFlow không được thông báo khi sử dụng launchSingleTop. (Iaaebc)

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

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 getBackStackEntrypreviousBackStackEntry bên trong composable(), kết hợp với remember(), sẽ không còn gây ra ngoại lệ cho không có đích nào ở ngăn xếp lui. (I75138, b/194313238)
  • Bây giờ, Navigation Compose sẽ kết hợp lại chính xác khi thay đổi các đối số ngăn xếp lui và sử dụng launchSingleTop=true. (Iebd69, b/186392337)
  • Sẽ không còn ArrayIndexOutOfBoundsException nữa khi gọi setGraph bằng biểu đồ có 13 hoặc 29 đích. (I1a9f1, b/195171984)
  • Trình tạo JavaScript của Safe Args không còn gây ra cảnh báo tìm lỗi mã nguồn khi tạo lớp Args. (I1a666, b/185843837)

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

  • Cảm ơn ospixd đã đảm bảo rằng các đường liên kết sâu sẽ xác minh rằng tất cả đối số bắt buộc (những đối số không có giá trị mặc định) đều có trong Uri. (#204, b/185527157)

Phiên bản 2.4.0-alpha07

Ngày 18 tháng 8 năm 2021

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

Sửa lỗi

  • Bây giờ, Navigation Compose sẽ lưu trạng thái đúng cách sau khi thay đổi chế độ cấu hình và khi thay đổi biểu đồ trong khi sử dụng tính năng nhiều ngăn xếp lui. (If5a3d, b/195141957)
  • Việc chọn lại cùng một thẻ khi sử dụng Navigation Compose có nhiều ngăn xếp lui sẽ không còn dẫn đến màn hình trống. (I860dc, b/194925622)
  • NavHost hiện đang quan sát các thay đổi trong Lifecycle.State của NavBackStackEntry. Điều này có nghĩa là việc sử dụng NavHost trong một mảnh giờ đây sẽ được kết hợp lại khi vòng đời thay đổi thay vì dẫn đến một màn hình trống. (I4eb85, b/195864489)
  • Khắc phục vấn đề khi việc loại bỏ DialogFragment sẽ không cập nhật chính xác trạng thái NavController sau khi tạo lại hoạt động (chẳng hạn sau khi thay đổi chế độ cấu hình). (Icd72b)
  • Khắc phục sự cố trong đó việc bật đích đến hộp thoại lên không cập nhật phương thức xử lý nút quay lại của hệ thống NavController, có thể khiến NavController chặn nút quay lại mặc dù không có ngăn xếp lui nào để bật lên. (If3b34)
  • Bây giờ, Safe Args sẽ tự động tạo một phương thức toSavedStateHandle cho các đối số có thể dùng để kiểm tra mã ViewModel. (If1e2d, b/193353880)

Phiên bản 2.4.0-alpha06

Ngày 4 tháng 8 năm 2021

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

Thay đổi về API

  • Phương thức requireSlidingPaneLayout()requireDetailPaneNavHostFragment() trên AbstractListDetailFragment lần lượt đổi tên thành getSlidingPaneLayout()getDetailPaneNavHostFragment(). (I34a08)

Các thay đổi về hành vi

  • Khi điều hướng với ảnh động (như Crossfade), Lifecycle của đích mới giờ sẽ chỉ đạt đến RESUMED khi ảnh động hoàn tất. (If0543, b/172112072, b/194301889)
  • NavHost của Navigation Compose hiện đặt biểu đồ trong lần kết hợp đầu tiên. (Ieb7be)

Sửa lỗi

  • Việc bật đích cuối cùng của biểu đồ điều hướng sẽ không còn gửi ClassCastException nữa. (If0543, b/172112072, b/194301889)
  • Khắc phục lỗi NullPointerException xảy ra khi thêm đường liên kết sâu mà không có Uri và điều hướng qua một tuyến hoặc đường liên kết sâu. (938a0c, b/193805425)
  • Khắc phục vấn đề với Navigation Compose trong đó NavBackStackEntry được liên kết sâu sẽ không đạt đến trạng thái RESUMED. (I192c5)
  • Khắc phục sự cố trong đó việc bật đích đến hộp thoại lên không cập nhật phương thức xử lý nút quay lại của hệ thống NavController, có thể khiến NavController chặn nút quay lại mặc dù không có ngăn xếp lui nào để bật lên. (aosp/1782668)

Phiên bản 2.4.0-alpha05

Ngày 21 tháng 7 năm 2021

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

Các thay đổi về hành vi

  • NavHost của Navigation Compose hiện luôn sử dụng Crossfades khi điều hướng qua các đích. (I07049, b/172112072)
  • Giờ đây, bạn có thể thay đổi biểu đồ của NavHost. Các biểu đồ có cùng startDestination và đích đến trong biểu đồ sẽ được coi là ngang nhau và sẽ không xoá ngăn xếp lui NavController. (I0b8db, b/175392262)

Sửa lỗi

  • Đã khắc phục NoSuchElementException khi gọi popBackStack() từ trong LifecycleObserver được đính kèm với một NavBackStackEntry do việc cập nhật lặp lại đối với trạng thái của NavController gây ra. (I64621)
  • AbstractListDetailFragment hiện cho phép xoá hoàn toàn SlidingPaneLayout khỏi APK khi không sử dụng AbstractListDetailFragment. (I611ad)
  • NavGraphNavDestination hiện ghi đè các phương thức ngang nhau nên 2 đối tượng có cùng giá trị sẽ được coi là ngang nhau. (I166eb, b/175392262)

Phiên bản 2.4.0-alpha04

Ngày 1 tháng 7 năm 2021

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

Tính năng mới

  • Cấu phần mềm navigation-fragment hiện có cấu hình triển khai tạo sẵn với bố cục hai ngăn thông qua AbstractListDetailFragment mới. Mảnh này sử dụng SlidingPaneLayout để quản lý ngăn danh sách (do lớp con tạo ra) và ngăn chi tiết sử dụng NavHostFragment làm cấu hình triển khai như được minh hoạ trong phần triển khai mẫu của chúng tôi. (Iac4be, b/191276636)
  • NavHost của cấu phần mềm navigation-compose hiện hỗ trợ đích dialog ngoài đích composable. 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ợp Dialog, nổi lên phía trên đích composable hiện tại. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

Thay đổi về API

  • Hàm add trong NavigatorState đã đổi tên thành push. Tất cả lệnh gọi hiện tại đến add() đều phải thay đổi thành push(). (Ie89fc, b/172112072)
  • Giờ đây, các bản sao Navigator tuỳ chỉnh có thể sử dụng API pushWithTransactionpopWithTransition trên NavigatorState để đẩy hoặc hiển thị đích không đồng bộ. Lưu ý rằng các API này chưa được bất kỳ trình điều hướng nào được bao gồm đưa vào sử dụng. (Ic4d7c, b/172112072)

Các thay đổi về hành vi

  • NavDeepLinkBuilder hiện đã thêm PendingIntent.FLAG_IMMUTABLE vào PendingIntent do createPendingIntent() trả về, đảm bảo rằng API này hoạt động như dự kiến khi chạy trên Android 12. (If8c52)

Sửa lỗi

  • Khắc phục vấn đề xảy ra với <include-dynamic>, trong đó các đối số được chuyển đến biểu đồ sẽ không được chuyển chính xác đến biểu đồ đi kèm động. (I3e115)
  • Sửa NullPointerException khi điều hướng đến một đích bằng cách sử dụng đối số string[] có giá trị mặc định là @null. (I1fbe8)
  • Thêm các quy tắc ProGuard cho @Navigator.Name, khắc phục vấn đề khi sử dụng R8 3.1 chế độ đầy đủ. (I2add9, b/191654433)
  • Safe Args sẽ không còn bị lỗi khi tạo ứng dụng bằng Kotlin phiên bản trước 1.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 Navigation2.4.0-alpha01, trong đó setupActionBarWithNavController() sẽ không xoá đúng biểu tượng Mũi tên lên khi bạn đang ở đích cấp cao nhất. (I5d443, b/189868637)
  • Khắc phục IllegalStateException khi gọi popBackStack() 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ụng navigation-common hoặc bất kỳ cấu phần mềm nào tuỳ thuộc vào yếu tố này. (I68800, b/190082521)
  • Một OnDestinationChangedListener gọi lại navigate() 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 Gradle 6.7.0 do sự phụ thuộc vào một phiên bản Kotlin cũ. Bạn có thể khắc phục vấn đề này bằng cách cập nhật để sử dụng Gradle 7.0. (b/190739257)

Phiên bản 2.4.0-alpha02

Ngày 2 tháng 6 năm 2021

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

Tính năng mới

  • Các tuyến hiện được hỗ trợ cho đích đến Activity, Fragment và Dialog, cũng như trong toàn bộ DSL Kotlin DynamicNavigation. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI đã tạm thời thêm các API thử nghiệm để cho phép bạn chọn không lưu trạng thái. Mặc dù việc luôn lưu trạng thái là hành vi chính xác, nhưng những thư viện không dùng nữa (như các mảnh được giữ lại) đôi khi vẫn được sử dụng. Việc này vốn không được hỗ trợ khi lưu trạng thái, vì vậy, ứng dụng sẽ có khả năng chuyển đổi chậm khỏi mọi API không được hỗ trợ. (Idf93c)
  • Navigation hiện cung cấp các API findDestination()getHierarchy() có thể dùng để hỗ trợ triển khai NavigationUI tuỳ chỉnh. findDestination() là một hàm mở rộng trên NavGraph, vị trí này sẽ định vị một đích trong biểu đồ. getHierarchy() là một hàm trên NavDestination có thể được dùng để xác minh xem một đích nhất định có nằm trong hệ thống phân cấp của một đích khác hay không.(I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Các phương thức NavigationUI lấy BottomNavigationView đã được cập nhật để thay thế cho siêu lớp được giới thiệu trong Material 1.4.0, NavigationBarView. Việc này cho phép sử dụng các phương thức này với NavigationRailView. (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áp app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

Thay đổi về API

  • Các trình tạo DSL Kotlin sử dụng mã không còn được dùng nữa và bạn nên thay thế bằng các trình tạo sử dụng các tuyến này (I85b42, b/188816479) (I9f58f, b/188816479)

Sửa lỗi

  • DialogFragmentNavigator hiện sử dụng API NavigatorState.pop() để thông báo cho NavController khi hộp thoại bị loại bỏ bằng cách nhấn nút quay lại của hệ thống hoặc nhấp vào bên ngoài, đảm bảo rằng trạng thái NavController luôn đồng bộ với trạng thái của Trình điều hướng. (I2ead9)
  • Bạn sẽ không thấy ConcurrentModificationException nữa khi sử dụng thao tác điều khiển danh sách OnDestinationChangedListeners từ lệnh gọi lại onDestinationChanged. (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 findNoderesId thay vì resid. (I7711d)

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

  • Safe Args giờ đây phụ thuộc vào trình bổ trợ Android cho Gradle 4.2.0. Điều này có nghĩa là bạn sẽ không còn thấy cảnh báo sử dụng applicationIdTextResource nữa. (I6d67b, b/172824579)

Phiên bản 2.4.0-alpha01

Ngày 18 tháng 5 năm 2021

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

Tính năng mới

  • Phương thức currentBackStackEntryAsFlow() trên NavController cung cấp Flow sẽ kích hoạt bất cứ khi nào NavBackStackEntry hiện tại thay đổi. Bạn có thể sử dụng quy trình này thay cho việc quản lý OnDestinationChangedListener theo cách thủ công. (I19c4a, #89, b/163947280)

Nhiều ngăn xếp lui

NavController chịu trách nhiệm quản lý ngăn xếp lui của các đích, thêm đích vào ngăn xếp lui khi bạn navigate() đến các đích này và xoá đích khi bạn gọi lệnh popBackStack() hoặc kích hoạt nút quay lại của hệ thống. Chúng tôi đã mở rộng lớp NavOptions hiện tại và khả năng tích hợp vào các mục nhập <action> trong tệp XML của biểu đồ điều hướng để hỗ trợ việc lưu và khôi phục ngăn xếp lui. (b/80029773)

Cùng với thay đổi này, các phương pháp NavigationUI đối với onNavDestinationSelected(), BottomNavigationView.setupWithNavController()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ủa app:popUpToSaveStateapp:restoreState để lưu trạng thái của bất kỳ đích nào được bật lên thông qua app:popUpTo và khôi phục trạng thái liên kết với đích đã được chuyển qua dạng app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Trong navOptionsKotlin DSL, bạn có thể thêm thuộc tính boolean restoreState và thuộc tính boolean saveState trên trình tạo popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Khi tạo đối tượng NavOptions theo cách thủ công qua NavOptions.Builder, bạn có thể sử dụng setRestoreState() và phương thức nạp chồng mới cho setPopUpTo() để 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ư FragmentNavigatorDynamicFragmentNavigator 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ếnString 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()getBackStackEntry().

Điều này có một số ảnh hưởng đến API:

  • Chúng tôi đã ngừng sử dụng thuộc tính Kotlin popUpTo trên Kotlin DSL và thay bằng popUpToId. (I59c73, b/172823546)
  • API getStartDestination() đã ngừng hoạt động và được thay bằng getStartDestinationId(). (I0887f, b/172823546)

Đối với các nhà phát triển nâng cấp từ Navigation Compose trước đây thành Navigation Compose 2.4.0-alpha01, điều này có nghĩa là các lệnh nhập trên các phương thức mở rộng sau không còn cần thiết và cần được xoá:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

Đối số KEY_ROUTE đã được thay thế bằng thuộc tính route trên NavDestination, cho phép bạn gọi trực tiếp navBackStackEntry.destination.route.

Thay đổi về API

  • Tất cả cấu phần mềm của Navigation đã được viết lại bằng Kotlin. Điều này đã giúp cải thiện tính chất rỗng của các lớp sử dụng thuộc tính chung (chẳng hạn như các lớp con của NavType). Tất cả hàm tiện ích Kotlin từng là một phần của cấu phần mềm -ktx đã được chuyển sang các cấu phần mềm chính tương ứng. Các cấu phần mềm -ktx sẽ tiếp tục được xuất bản nhưng sẽ trống hoàn toàn. (b/184292145)
  • NavDeepLinkBuilder hiện hỗ trợ việc thêm nhiều đích riêng biệt vào ngăn xếp lùi được tạo. (I3ee0d, b/147913689)
  • Thêm các hàm nhà máy DynamicNavHostFragment (Icd515, b/175222619)
  • Mã nhận dạng duy nhất của NavBackStackEntry hiện hiển thị dưới dạng một phần của API công khai. (Ie033a)
  • Các trường nameargument cùng các hàm giải mã NamedNavArgument hiện đang ở chế độ công khai. (#174, b/181320559)
  • Giới thiệu một tiện ích NavBackStackEntry#provideToCompositionLocals mới cung cấp NavBackStackEntry cho yếu tố có thể kết hợp cục bộ có liên quan. (#175, b/187229439)

Safe Args

  • Safe Args giờ đây có thể tạo phương thức fromSavedStateHandle() cho mỗi lớp NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • Cập nhật Safe Args để phụ thuộc vào KotlinPoet 1.8.0. (#172, b/183990444)

Các thay đổi về hành vi

  • Navigation giờ đây phụ thuộc vào Lifecycle 2.3.1 và đánh dấu setGraph(), popBackStack(), navigateUp()navigate(), các phương thức cập nhật NavBackStackEntry Lifecycle, chẳng hạn như @MainThread, liên kết Navigation với lệnh thực thi chuỗi chính được nêu trong Lifecycle 2.3.0. (b/171125856)
  • Việc phân tích cú pháp các đối số Enum từ đường liên kết sâu hiện sẽ không phân biệt chữ hoa chữ thường, cho phép một đường liên kết sâu như http://www.example.com/red khớp với một đường liên kết sâu www.example.com/{color} ngay cả khi ký tự có giá trị RED. (#152, b/135857840)

Khả năng tương thích với ứng dụng Compose

  • androidx.navigation:navigation-compose:2.4.0-alpha01 chỉ tương thích với ứng dụng Compose phiên bản 1.0.0-beta07 trở lên.

Sửa lỗi

  • Khắc phục vấn đề trong đó phần giữ chỗ đối số cuối sẽ được ưu tiên hơn các đường liên kết sâu có hậu tố khớp chính xác. (#153, b/184072811)
  • NavHostFragment hiện hỗ trợ Trình điều hướng tuỳ chỉnh sử dụng cùng @Navigator.Name("dialog") với DialogFragmentNavigator mặc định. (Ib1c2c, b/175979140)
  • Đã cải thiện hoạt động của NavigatorProvider#addNavigator để đảm bảo việc gọi nó nhiều lần với cùng một bản sao không gây ra lỗi. (#176, b/187443146)

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

  • Cảm ơn simonschiller đã giúp hỗ trợ Safe Args tạo một phương thức fromSavedStateHandle() cho mỗi lớp NavArgs. (#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 nameargument và huỷ cấu trúc các hàm của NamedNavArgument ở chế độ công khai. (#174, b/181320559)
  • Cảm ơn jossiwolf đã giới thiệu tiện ích NavBackStackEntry#provideToCompositionLocals mới cung cấp NavBackStackEntry cho cấu trúc cục bộ liên quan. (#175, b/187229439)
  • Cảm ơn jossiwolf đã cải thiện hành vi của NavigatorProvider#addNavigator để đảm bảo rằng việc gọi nó nhiều lần với cùng một bản sao không gây ra lỗi. (#176, b/187443146)

Phiên bản 1.0.0-alpha10

Ngày 7 tháng 4 năm 2021

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

Thay đổi về API

  • NavHost hiện chấp nhận Modifier. Giá trị này được truyền đến vùng chứa thành phần kết hợp để gói các thành phần kết hợp đích đến. (I85aca, b/175125483)

Sửa lỗi

  • NavHost hiện hoạt động ngay cả khi không tìm thấy OnBackPressedDispatcherOwner, trường hợp này xảy ra khi xem trước NavHost. (I7d8b4)
  • Navigation Compose hiện phụ thuộc vào Navigation 2.3.5, khắc phục sự cố khi sử dụng BackHandler bên trong một đích NavHost. (I7e63b, b/182284739)

Phiên bản 1.0.0-alpha09

Ngày 10 tháng 3 năm 2021

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

Thay đổi về API

  • LocalViewModelStoreOwner.current nay trả về một ViewModelStoreOwner rỗng để xác định xem ViewModelStoreOwner có dùng được trong bản Compose hiện tại hay không. Các API đòi hỏi phải có ViewModelStoreOwner, chẳng hạn như viewModel()NavHost, vẫn sẽ có ngoại lệ nếu bạn không đặt ViewModelStoreOwner. (Idf39a)

Sửa lỗi

  • Navigation Compose hiện phụ thuộc vào Navigation 2.3.4, bao gồm bản sửa lỗi để cố gắng đặt cùng một đối tượng ViewModelStore sau khi đặt biểu đồ. (I65c24, b/177825470)

Phiên bản 1.0.0-alpha08

Ngày 24 tháng 2 năm 2021

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

Tính năng mới

  • NavHost hiện điền trước LocalSavedStateRegistryOwner CompositionLocal với NavBackStackEntry của đích đó, đảm bảo rằng bất kỳ trạng thái nào được lưu trực tiếp vàoSavedStateRegistry sẽ được lưu và khôi phục cùng với đích. (I435d7, b/179469431)

Phiên bản 1.0.0-alpha07

Ngày 10 tháng 2 năm 2021

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

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

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ên NavController trả về NavBackStackEntry liên kết. (If8931)

Phiên bản 1.0.0-alpha05

Ngày 13 tháng 1 năm 2021

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

Cập nhật để phụ thuộc vào Compose 1.0.0-alpha10.

Phiên bản 1.0.0-alpha04

Ngày 16 tháng 12 năm 2020

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

  • Cập nhật để tương thích với Compose 1.0.0-alpha09.

Phiên bản 1.0.0-alpha03

Ngày 2 tháng 12 năm 2020

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

Sửa lỗi

  • Khắc phục sự cố trong đó popBackStack()navigateUp() không hoạt động sau khi thay đổi cấu hình, hoặc sau khi bị buộc tắt và tạo lại. (Icea47, b/173281473)
  • Giờ đây, việc điều hướng đến biểu đồ lồng trong NavHost sẽ hoạt động đúng cách. (I0948d, b/173647694)

Phiên bản 1.0.0-alpha02

Ngày 11 tháng 11 năm 2020

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

Thay đổi về API

  • Navigation hiện hỗ trợ NavOptions để sử dụng các hoạt động popUpTo và launchSingleTop (If96c3, b/171468994)
  • Thêm hàm điều hướng đi theo tuyến thay vì mã cho phép bạn khởi tạo các biểu đồ lồng nhau trong Navigation Compose DSL. (I1661d)
  • startDestination hiện xuất hiện trước tuyến trong danh sách tham số cho một NavHost (Ie620e)
  • Bạn hiện có thể tạo biểu đồ bằng cách sử dụng tuyến làm điểm xuất phát bên ngoài thành phần kết hợp NavHost. (Iceb75)

Phiên bản 1.0.0-alpha01

Ngày 28 tháng 10 năm 2020

Phát hành android.navigation:navigation-compose:1.0.0-alpha01. Phiên bản 1.0.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

Cấu phần mềm navigation-compose cho phép tích hợp giữa Navigation Component với Jetpack Compose. Phương thức này sử dụng các hàm @Composable làm đích trong ứng dụng.

Bản phát hành đầu tiên này cung cấp:

  • NavHost có thể kết hợp cho phép bạn tạo biểu đồ điều hướng qua Kotlin DSL.
  • Phạm vi của vòng đời, ViewModel và trạng thái được ghi nhớ ở cấp đích.
  • Tích hợp tự động với nút quay lại của hệ thống.
  • Hỗ trợ việc truyền các đối số, đính kèm các đường liên kết sâu tới các đích và trả lại kết quả về các đích trước đó.
  • Bạn có thể soạn một số trình trợ giúp cụ thể trong rememberNavController()currentBackStackEntryAsState() để cho phép chuyển trạng thái lên trên và kết nối NavController với các thành phần có thể kết nối bên ngoài NavHost (chẳng hạn như thanh điều hướng ở dưới cùng).

Xem hướng dẫn về Compose Navigation để biết thêm thông tin.

Phiên bản 2.3.5

Phiên bản 2.3.5

Ngày 7 tháng 4 năm 2021

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

Tính năng mới

  • Khi điều hướng bằng một NavDeepLinkRequest hoặc Uri, bạn hiện có thể truy cập Uri, 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 qua KEY_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ới NavBackStackEntry làm LifecycleOwner và hiện đã chặn đúng cách sau khi Activity Lifecycle là STOPPED, sau đó là STARTED (Iff94f, b/182284739)
  • Việc phân tích cú pháp miền liên kết sâu hiện không phân biệt chữ hoa chữ thường, đảm bảo rằng www.example.com khớp với cả www.example.comwww.Example.com. Xin lưu ý rằng các tên tham số truy vấn vẫn phân biệt chữ hoa chữ thường. (#144, b/153829033)
  • Đã khắc phục NullPointerException có thể xảy ra khi một đích có nhiều đối số mặc định không thể rỗng và bạn điều hướng đến đích đó trong khi chỉ ghi đè một tập hợp con các đối số đó. (aosp/1644827)

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

  • Trình bổ trợ Navigation Safe Args Gradle hiện phụ thuộc vào Trình bổ trợ Kotlin Gradle 1.4.31. (aosp/1661058, b/181156413)

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

  • Cảm ơn bentrengrove về yêu cầu làm cho sự phân tích cú pháp miền liên kết sâu không phân biệt chữ hoa chữ thường. (#144, b/153829033)

Phiên bản 2.3.4

Phiên bản 2.3.4

Ngày 10 tháng 3 năm 2021

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

Tính năng mới

  • Giờ đây, các đối số ReferenceType có thể được phân tích cú pháp đúng cách khi được gửi dưới dạng một phần của URI đường liên kết sâu. Việc phân tích cú pháp này hỗ trợ cả giá trị số nguyên thô và giá trị thập lục phân có tiền tố 0x. (#127, b/179166693)
  • android:defaultValue cho đối số có app:argType="float" hiện hỗ trợ giá trị số nguyên mặc định, cho phép bạn sử dụng android:defaultValue="0" thay vì yêu cầu sử dụng 0.0. (#117, b/173766247)

Sửa lỗi

  • Khắc phục sự cố cài đặt bị gián đoạn khi sử dụng khả năng hỗ trợ của Navigation cho các tính năng động. (Ib27a7, b/169636207)
  • Việc gọi setViewModelStore hoặc setLifecycleOwner với cùng một đối tượng đã được đặt hiện sẽ không hoạt động (Idf491, b/177825470)
  • Giờ đây, Safe Args thêm các chú thích chặn trên các phương thức thích hợp khi sử dụng java. (I8fbc5, b/179463137)

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

  • Cảm ơn JvmName về yêu cầu để đảm bảo rằng giờ đây ReferenceType có thể được phân tích cú pháp một cách chính xác khi gửi trong URI của đường liên kết sâu. (#127, b/179166693)
  • Cảm ơn tatocaster về yêu cầu để cho phép defaultValue cho một đối số có app:argType=”float” hiện hỗ trợ giá trị số nguyên mặc định. (#117, b/173766247)

Phiên bản 2.3.3

Phiên bản 2.3.3

Ngày 27 tháng 1 năm 2021

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

Sửa lỗi

  • Sẽ không còn sự cố nữa khi bật NavBackStackEntry trước khi Lifecycle được chuyển sang CREATED. (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 ra ResourceNotFoundException. (I7aedb, b/176819931)

Phiên bản 2.3.2

Phiên bản 2.3.2

Ngày 2 tháng 12 năm 2020

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

Sửa lỗi

  • Đã khắc phục vấn đề hồi quy trong NavigationUI mà trong đó việc sử dụng đích <activity> với onNavDestinationSelected sẽ không điều hướng được đến Activity. (I22e34, b/171364502)
  • Đã khắc phục vấn đề trong đó navigation-dynamic-features-fragment dẫn đến việc điều hướng đến đích mới cài đặt nhiều lần. (aosp/1486056, b/169636207)
  • Đã khắc phục vấn đề không gửi được đối số mặc định đến các bản sao OnDestinationChangedListener khi sử dụng launchSingleTop. (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ới popUpTo đã 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ới FragmentScenarioNavigation.setViewNavController(). (I69e0d)

Phiên bản 2.3.1

Phiên bản 2.3.1

Ngày 14 tháng 10 năm 2020

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

Tính năng mới

  • Chúng tôi đã thêm các tài nguyên Trình tạo động mặc định vào Giao diện người dùng Navigation để khuyến khích sử dụng thay cho tài nguyên ảnh động mặc định. (b/167430145)
  • NavOptions hiện ghi đè mã băm và phương thức bằng (b/161586466)
  • Navigation hiện bao gồm đích hiện tại trong lỗi "Không có đích có mã" IllegalArgumentException, thông tin này sẽ giúp cải thiện trải nghiệm gỡ lỗi dành cho nhà phát triển. (b/168311416)

Sửa lỗi

  • Safe Args sẽ không còn ngắt dòng trả về, ngay cả khi tên lớp đối số được tạo dài hơn 100 ký tự. (b/168584987)

Thay đổi về phần phụ thuộc

  • navigation-ui bây giờ phụ thuộc vào DrawerLayout 1.1.1, đảm bảo rằng NavigationUI có thể mở ngăn ngay cả khi sử dụng LOCK_MODE_LOCKED_CLOSED hoặc LOCK_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-runtimenavigation-dynamic-features-fragment cho phép bạn điều hướng đến các đích được xác định trong các mô-đun tính năng, tự động xử lý việc cài đặt các mô-đun tính năng khi cần. Xem phần điều hướng với các mô-đun tính năng để biết thêm thông tin.
  • Thử nghiệm Navigation: Cấu phần mềm navigation-testing cung cấp TestNavHostController cho phép bạn đặt đích hiện tại và xác minh ngăn xếp lui sau thao tác điều hướng. Xem phần Thử nghiệm Navigation để biết thêm thông tin.
  • Trả về kết quả: NavBackStackEntry liên kết với mỗi đích trên ngăn xếp lui Navigation hiện cho phép bạn truy cập vào SavedStateHandle phù hợp để lưu trữ trạng thái lưu trữ nhỏ cần liên kết với một mục cụ thể trong ngăn xếp lui. Xem phần Trả lại kết quả về đích trước đó để biết thêm thông tin.
  • Hỗ trợ NavigationUI cho Openable: Tất cả trường hợp sử dụng DrawerLayout trong NavigationUI đã được thay thế bằng giao diện Openable tổng quát hơn trong CustomView 1.1.0 và được DrawerLayout triển khai trong DrawerLayout 1.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:actionapp:mimeType ngoài app:uri hiện có. NavController hiện hỗ trợ việc điều hướng theo bất kỳ tổ hợp nào của các trường này thông qua lớp NavDeepLinkRequest mới. Xem phần điều hướng bằng NavDeepLinkRequest để biết thêm thông tin.

Vấn đề đã biết

  • Manifest Merger chưa hỗ trợ các thao tác liên kết sâu và loại MIME. Cho đến khi hoàn tất tính năng này, mọi phần tử <intent-filter> được tạo từ phần tử <nav-graph> trong tệp kê khai sẽ không bao gồm loại MIME trong phần tử <data> hoặc <action> tuỳ chỉnh. Bạn phải tự thêm <intent-filter> thích hợp vào tệp kê khai.

Phiên bản 2.3.0-rc01

Ngày 10 tháng 6 năm 2020

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

Sửa lỗi

  • Đã sửa NullPointerException khi thay thế một bản sao của một đích không có đối số nào bằng một bản sao khác đối số bằng singleTop. (b/158006669)
  • Tất cả trường hợp ngoại lệ destination is unknown do NavController gửi đều có thông tin gỡ lỗi bổ sung để giúp xác định trạng thái của NavController. (b/157764916)

Phiên bản 2.3.0-beta01

Ngày 20 tháng 5 năm 2020

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

Sửa lỗi

  • Đã khắc phục sự cố trong đó Lifecycle của NavBackStackEntry không được cập nhật đúng cách sau khi quá trình bị gián đoạn. (b/155218371)
  • Giờ đây, bản sao OnDestinationChangedListener đã đăng ký trước khi gọi setGraph() sẽ được gửi đúng cách đến đích sau khi quá trình bị gián đoạn. (b/155218371)
  • Khi sử dụng singleTop, NavBackStackEntry hiện đã cập nhật chính xác các đối số và các đối số cập nhật đã được gửi đến tất cả bản sao OnDestinationChangeListener. (b/156545508)

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

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:actionapp:mimeType ngoài app:uri hiện có. NavController hiện hỗ trợ điều hướng bằng bất kỳ sự kết hợp nào của các trường này thông qua lớp NavDeepLinkRequest mới. (b/136573074, b/135334841)

Thay đổi về API

  • Đã mở rộng đáng kể phạm vi hỗ trợ Kotlin DSL cho các đích Navigation động. (b/148969800)

Sửa lỗi

  • Khắc phục vấn đề trong đó Ý định liên kết sâu sẽ bị bỏ qua khi sử dụng đích đến bắt đầu lồng nhau. (b/154532067)

Phiên bản 2.3.0-alpha05

Ngày 15 tháng 4 năm 2020

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

Tính năng mới

  • Đối với biểu đồ động bao gồm <include-dynamic>, bạn không cần chỉ định app:graphPackage nữa và chỉ số mặc định sẽ được sử dụng bằng cách thêm hậu tố moduleName vào applicationId sau dấu chấm. Nếu bạn cần tuỳ chỉnh graphPackage, thì trình giữ chỗ ${applicationId} hiện đã được hỗ trợ. (b/152696768)
  • Navigation Graph Kotlin DSL hiện đã hiển thị defaultArguments Map cho các hành động, phản ánh khả năng đặt giá trị mặc định trên các phần tử <action> trong các tệp XML điều hướng. (b/150345605)

Sửa lỗi

  • Trong phiên bản Navigation 2.2.2: Khắc phục IllegalStateException khi liên kết sâu đến đích bắt đầu của biểu đồ khi bạn có nhiều thực thể NavHostFragment trong Activity. (b/147378752)

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

Phiên bản 2.3.0-alpha04

Ngày 18 tháng 3 năm 2020

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

Tính năng mới

  • Thêm tuỳ chọn hỗ trợ cho hoạt động của mô-đun tính năng và đích mảnh trong Navigation Kotlin DSL. (b/148969800)

Thay đổi về API

  • Lớp DynamicExtras không còn sử dụng mẫu trình tạo và hiện có thể tạo trực tiếp. (aosp/1253671)
  • DynamicActivityNavigator hiện sẽ lấy Context trong hàm khởi tạo của nó thay vì Activity. (aosp/1250252)

Sửa lỗi

  • NavigationUI không bỏ qua các nhãn trống (tức là đích có android:label=””) và hiện đặt chính xác tiêu đề thành một chuỗi trống. (b/148679860)

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

  • Các cấu phần mềm Tính năng động Navigation hiện phụ thuộc vào Play Core 1.6.5. (b/149556401)

Phiên bản 2.3.0-alpha03

Ngày 4 tháng 3 năm 2020

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

Thay đổi về API

  • Thay vì dựa vào lớp DrawerLayout cụ thể, AppBarConfiguration hiện sử dụng giao diện Openable được nêu trong CustomView 1.1.0-alpha02 (DrawerLayout triển khai kể từ DrawerLayout 1.1.0-alpha04), cho phép bạn sử dụng các biện pháp triển khai tuỳ chỉnh của Openable với NavigationUI. (b/129030452)

Sửa lỗi

  • Hiện tại, các quy tắc navigation-common-ktx ProGuard chỉ giữ lại các lớp NavArgs được dùng thay vì tất cả bản sao NavArgs. (b/150213558)

Thay đổi về phần phụ thuộc

  • Navigation đã huỷ bỏ phần phụ thuộc trên Core 1.2.0 và giờ đây phụ thuộc vào Core 1.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 Core 1.2.0.

Phiên bản 2.3.0-alpha02

Ngày 19 tháng 2 năm 2020

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

Tính năng mới

  • NavBackStackEntry hiện cho phép bạn truy cập SavedStateHandle phù hợp để lưu trữ một lượng nhỏ trạng thái đã lưu cần liên kết với một mục trong ngăn xếp lui cụ thể. Hãy xem phần Trả lại kết quả để biết ví dụ về một trường hợp sử dụng. (b/79672220)

Thay đổi về API

  • Đã thêm các phương thức tiện lợi của getCurrentBackStackEntry()getPreviousBackStackEntry() để giúp bạn truy xuất NavBackStackEntry cho các đích hiện tại và trước đó dễ dàng hơn. (b/79672220)

Sửa lỗi

  • navigateUp() hiện sẽ chuyển đối số đích hiện tại và KEY_DEEP_LINK_INTENT đến đích trước đó khi chạy ứng dụng trên ngăn xếp nhiệm vụ của riêng bạn. (b/147456890)

Thay đổi về phần phụ thuộc

  • Hiện tại, Navigation phụ thuộc vào Core 1.2.0.

Phiên bản 2.3.0-alpha01

Ngày 5 tháng 2 năm 2020

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

Tính năng mới

  • Cấu phần mềm navigation-testing mới cung cấp một lớp TestNavHostController. Lớp này cung cấp một phương án thay thế cho việc sử dụng NavController mô phỏng khi thử nghiệm Navigation. Việc này cho phép bạn đặt đích hiện tại và xác minh ngăn xếp lui sau thao tác điều hướng. (b/140884273)
  • navigation-dynamic-features-fragment mới (và phần phụ thuộc chuyển đổi navigation-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ắc navigation-ui ProGuard cho DrawerArrowDrawable để đảm bảo rằng android.enableJetifier=true là không bắt buộc. (b/147610424)
  • Từ Navigation 2.2.1: Mô-đun navigation-common-ktx hiện có tên gói tệp kê khai duy nhất thay vì dùng chung tên gói tệp kê khai như navigation-runtime-ktx. (aosp/1141947)

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

Phiên bản 2.2.2

Phiên bản 2.2.2

Ngày 15 tháng 4 năm 2020

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

Sửa lỗi

  • Khắc phục IllegalStateException khi liên kết sâu đến đích bắt đầu của biểu đồ khi bạn có nhiều thực thể NavHostFragment trong Activity (Hoạt động). (b/147378752)
  • NavigationUI không bỏ qua các nhãn trống (tức là đích có android:label=””) và hiện đặt chính xác tiêu đề thành một chuỗi trống. Tính năng này đã được phát hành trước đó trong phiên bản Navigation 2.3.0-alpha04. (b/148679860)
  • Hiện tại, các quy tắc navigation-common-ktx ProGuard chỉ giữ lại các lớp NavArgs được dùng thay vì tất cả bản sao NavArgs. 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

Phiên bản 2.2.1

Phiên bản 2.2.1

Ngày 5 tháng 2 năm 2020

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

Sửa lỗi

  • Những đường liên kết sâu không có tham số truy vấn hiện sẽ bỏ qua mọi tham số truy vấn thay vì thêm các tham số đó vào phần tử {argument} cuối hoặc không khớp với đường liên kết sâu. (b/147447512)
  • Chúng tôi đã cập nhật các quy tắc navigation-ui ProGuard cho DrawerArrowDrawable để đảm bảo rằng android.enableJetifier=true là không bắt buộc. (b/147610424)
  • Mô-đun navigation-common-ktx hiện có tên gói tệp kê khai duy nhất thay vì dùng chung tên gói tệp kê khai như navigation-runtime-ktx. (aosp/1141947)

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

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ấp LifecycleOwner dựa trên Navigation, ViewModelStoreOwner (cùng giá trị được NavController.getViewModelStoreOwner() trả về) và SavedStateRegistryOwner, ngoài việc cung cấp các đối số dùng để bắt đầu đích đó.
  • Tích hợp Lifecycle ViewModel SavedState: SavedStateViewModelFactory hiện là nhà máy mặc định được sử dụng khi sử dụng by navGraphViewModels() hoặc hàm khởi tạo ViewModelProviderViewModelStoreOwner được NavController.getBackStackEntry() hoặc NavController.getViewModelStoreOwner() trả về.
  • Hỗ trợ tham số truy vấn cho đường liên kết sâu: Các đường liên kết sâu có tham số truy vấn hiện hỗ trợ các tham số truy vấn được sắp xếp lại; các đối số có giá trị mặc định hoặc không có giá trị giờ đây là không bắt buộc khi so khớp đường liên kết sâu.
  • Cải thiện tính năng hỗ trợ ảnh động: NavHostFragment hiện sử dụng FragmentContainerView từ Fragment 1.2.0, khắc phục các vấn đề thứ tự ảnh động z và các phần lồng ghép cửa sổ gửi đến Fragment.

Phiên bản 2.2.0-rc04

Ngày 18 tháng 12 năm 2019

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

Sửa lỗi

  • Đã điều chỉnh ảnh động mờ mặc định mà navigation-ui sử dụng để khớp với ảnh động làm mờ được điều chỉnh trong Fragment 1.2.0-rc04. (b/145769814)

Phiên bản 2.2.0-rc03

Ngày 4 tháng 12 năm 2019

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

Sửa lỗi

  • Khắc phục sự cố phân tích cú pháp đường liên kết sâu, trong đó việc sử dụng các tham số truy vấn và đối số làm phần cuối của đường dẫn ngăn không cho phân tích cú pháp nhiều ký tự của đối số đường dẫn cuối cùng. (b/144554689)
  • Khắc phục sự cố phân tích cú pháp đường liên kết sâu, trong đó các tham số không bắt buộc sẽ nhận "@null" thay vì null. (b/141613546)
  • NavHostFragment hiện khôi phục chính xác biểu đồ sau khi thay đổi chế độ cấu hình khi được sử dụng với FragmentContainerView. (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 SavedState 1.0.0-rc03, Activity 1.1.0-rc03 và Fragment 1.2.0-rc03 nếu thích hợp.

Phiên bản 2.2.0-rc02

Ngày 7 tháng 11 năm 2019

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

Thay đổi về phần phụ thuộc

  • Hiện Navigation phụ thuộc vào androidx.lifecycle 2.2.0-rc02.

Phiên bản 2.2.0-rc01

Ngày 23 tháng 10 năm 2019

androidx.navigation:navigation-*:2.2.0-rc01 được phát hành mà không có thay đổi nào kể từ 2.2.0-beta01. Phiên bản 2.2.0-rc01 bao gồm các thay đổi sau.

Phiên bản 2.2.0-beta01

Ngày 9 tháng 10 năm 2019

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

Tính năng mới

  • NavDestination và các lớp con của lớp này hiện ghi đè toString() để cung cấp nhiều thông tin hữu ích hơn khi gỡ lỗi. (b/141264986)

Thay đổi về hành vi

  • Giờ đây, các tham số truy vấn bổ sung sẽ bị bỏ qua khi so khớp đường liên kết sâu thay vì khiến quá trình so khớp không thành công. (b/141482822)

Sửa lỗi

  • Đã khắc phục vấn đề trong đó các đối số trong đường dẫn của đường liên kết sâu sẽ bị bỏ qua nếu bạn cũng chỉ định các tham số truy vấn. (b/141505755)
  • Phần mở rộng Kotlin của navArgs() trên Activity hiện có một thông báo lỗi hiệu quả hơn khi không có tiện ích nào khác. (b/141408999)
  • Lớp Java Directions do Safe Args tạo hiện chứa giá trị mặc định. (b/141099045)
  • Lớp Java Args do Safe Args tạo hiện chứa giá trị mặc định. (b/140123727)
  • Khi sử dụng Toolbar, NavigationUI không còn tạo ảnh động cho thay đổi văn bản khi điều hướng giữa hai đích cấp cao nhất. (b/140848160)

Phiên bản 2.2.0-alpha03

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

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

Thay đổi về hành vi

  • Nếu gọi setViewModelStore() sau khi gọi setGraph, thì bạn sẽ nhận được IllegalStateException. NavHost phải luôn đặt giá trị này trong quá trình thiết lập ban đầu để đảm bảo rằng tất cả bản sao NavBackStackEntry đều có chế độ lưu trữ nhất quán cho các bản sao ViewModel. (aosp/1111821)

Sửa lỗi

  • Khắc phục ConcurrentModificationException khi sử dụng thực thể ViewModel được đính kèm với nhiều thực thể ViewModelStore khác nhau trong phạm vi biểu đồ điều hướng. (aosp/1112257)

Phiên bản 2.2.0-alpha02

Ngày 5 tháng 9 năm 2019

Phát hành androidx.navigation:navigation-*:2.2.0-alpha02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Đường liên kết sâu với các tham số truy vấn hiện hỗ trợ các tham số truy vấn được sắp xếp lại; các đối số có giá trị mặc định hoặc không có giá trị giờ đây là không bắt buộc khi so khớp đường liên kết sâu. (b/133273839)
  • Bây giờ bạn có thể gọi NavController.getBackStackEntry(), chuyển mã đích hoặc biểu đồ điều hướng trên ngăn xếp lui. NavBackStackEntry được trả về cung cấp LifecycleOwner dựa trên Navigation, ViewModelStoreOwner (cùng giá trị được NavController.getViewModelStoreOwner() trả về) và SavedStateRegistryOwner, ngoài việc cung cấp các đối số còn dùng để bắt đầu đích đó. (aosp/1101691, aosp/1101710)

Sửa lỗi

  • Khắc phục vấn đề không thể thêm NavHostFragment vào ViewPager2 bằng IllegalArgumentException. (b/133640271)
  • Giờ đây, NavInflater tránh gọi getResourceName() không cần thiết, đẩy nhanh thời gian tăng cường lên tới 40%. (b/139213740)

Phiên bản 2.2.0-alpha01

Ngày 7 tháng 8 năm 2019

Phát hành androidx.navigation:navigation-*:2.2.0-alpha01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • SavedStateViewModelFactory hiện là nhà máy mặc định được sử dụng khi sử dụng by navGraphViewModels() hoặc hàm khởi tạo ViewModelProviderViewModelStoreOwner được NavController.getViewModelStoreOwner() trả về. (b/135716331)

Thay đổi về API

  • Từ phiên bản Navigation2.1.0-rc01: API getViewModelStore() không dùng nữa trên NavController (được đưa vào 2.1.0-alpha02) đã bị xoá. (aosp/1091021)

Sửa lỗi

  • NavHostFragment hiện sử dụng FragmentContainerView, khắc phục các vấn đề thứ tự ảnh động z và tổng hợp các phần lồng ghép cửa sổ gửi đến các Fragment. (b/137310379)

Phiên bản 2.1.0

Phiên bản 2.1.0

Ngày 5 tháng 9 năm 2019

Phát hành androidx.navigation:navigation-*:2.1.0. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi quan trọng kể từ phiên bản 2.0.0

  • Chuyển ViewModel thành biểu đồ điều hướng: Giờ đây, bạn có thể tạo ViewModel trong phạm vi ở cấp biểu đồ điều hướng bằng cách uỷ quyền thuộc tính by navGraphViewModels() cho người dùng Kotlin sử dụng thư viện -ktx hoặc bằng cách sử dụng API getViewModelStoreOwner() đã thêm vào NavController. Hãy xem phần Chia sẻ dữ liệu liên quan đến giao diện người dùng giữa các đích để biết thêm thông tin.
  • Đích của hộp thoại: Giờ đây, bạn có thể tạo <dialog> đích sẽ hiển thị DialogFragment khi bạn navigate cho chúng. Theo mặc định, NavHostFragment sẽ hỗ trợ các đích của hộp thoại. Hãy xem phần Tạo đích từ DialogFragment để biết thêm thông tin.
  • điều hướng bằng URI: Bạn hiện có thể navigate bằng Uri, vốn sử dụng <deepLink> mà bạn đã thêm vào một đích để điều hướng đến đó. Hãy xem phần điều hướng bằng URI để biết thêm thông tin.
  • NavHostController: API dùng riêng để khởi tạo NavHost tuỳ chỉnh đã được chuyển sang NavHostController, cho phép các phương thức triển khai kết nối NavController với dịch vụ lưu trữ LifecycleOwner, OnBackPressedDispatcherViewModelStore.

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ên NavController được giới thiệu trong 2.1.0-alpha02 đã bị xoá. (aosp/1091021)

Phiên bản 2.1.0-beta02

Ngày 19 tháng 7 năm 2019

Phát hành androidx.navigation:*:2.1.0-beta02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Xoá phần phụ thuộc jacoco ngoài ý muốn đã được giới thiệu trong 2.1.0-beta01. (b/137782950)

Phiên bản 2.1.0-beta01

Ngày 17 tháng 7 năm 2019

Phát hành androidx.navigation:*:2.1.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Giờ đây, NavigationUI sẽ thể hiện ảnh động xoá nút Mũi tên lên khi sử dụng setupWithNavController() với Toolbar hoặc CollapsingToolbarLayout. (b/131403621)

Sửa lỗi

  • Đã khắc phục vấn đề về thời gian khi sử dụng nhiều NavHostFragments với cùng một vùng chứa có findNavController(). (b/136021571)

Phiên bản 2.1.0-alpha06

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

Phát hành androidx.navigation:*:2.1.0-alpha06. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Thuộc tính app:navGraph mà NavHostFragment sử dụng hiện đã được chuyển sang cấu phần mềm navigation-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ên NavController đã ngừng hoạt động, thay vào đó là phương thức getViewModelStoreOwner() 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ấu FloatingWindow, 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 đích FloatingWindow. (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ủa NavController, NavHostController. (aosp/966091)
  • Phương thức NavController setHostOnBackPressedDispatcherOwner() đã được thay thế bằng phương thức setOnBackPressedDispatcher() của NavHostController và hiện yêu cầu bạn gọi setLifecycleOwner() trước khi gọi phương thức này. (aosp/965409)
  • NavHostController hiện chứa một phương thức enableOnBackPressed(boolean) thay thế lớp NavHostOnBackPressedManagersetHostOnBackPressedDispatcherOwner() đã trả về trước đó. (aosp/966091)

Sửa lỗi

  • Khắc phục sự cố trong đó ngăn xếp lui không chính xác sau khi điều hướng theo URI. (b/132509387)
  • Các đường liên kết sâu do NavController xử lý tự động hiện chỉ được kích hoạt một lần. (b/132754763)

Phiên bản 2.1.0-alpha04

Ngày 16 tháng 5 năm 2019

Phát hành androidx.navigation:*:2.1.0-alpha04. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • NavHostFragment tuân thủ đúng app:defaultNavHost khi chặn các sự kiện của nút Quay lại trên hệ thống, khắc phục sự hồi quy trong Navigation 2.1.0-alpha03. b/132077777
  • DialogFragmentNavigator hiện đã xử lý chính xác các thao tác popBackStack()navigateUp(). b/132576764
  • Khắc phục sự cố IllegalStateException: unknown destination during restore khi điều hướng liên tục giữa các biểu đồ lồng nhau. b/131733658

Phiên bản 2.1.0-alpha03

Ngày 7 tháng 5 năm 2019

Phát hành androidx.navigation:*:2.1.0-alpha03. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Vấn đề đã biết

  • NavHostFragment tiếp tục chặn nút Quay lại của hệ thống mặc dù có sử dụng app:defaultNavHost="false" b/132077777

Tính năng mới

  • Giờ đây, bạn có thể tạo đích đến <dialog> sẽ hiển thị DialogFragment khi bạn navigate vào các đích đến đó. Theo mặc định, NavHostFragment sẽ hỗ trợ các đích của hộp thoại. b/80267254
  • Ngoài việc gọi navigate bằng mã tài nguyên hoặc bản sao NavDirections, giờ đây, bạn có thể điều hướng thông qua Uri. Công cụ này sử dụng <deepLink> mà bạn đã thêm vào một đích để điều hướng đến đúng đích. b/110412864

Thay đổi về hành vi

  • Các ảnh động mặc định do NavigationUI cung cấp đã được tăng tốc từ 400 mili giây lên 220 mili giây nhằm phù hợp với tốc độ hoạt ảnh mặc định của các hoạt động và mảnh. b/130055522

Thay đổi về API

  • Phương thức NavHostFragment của createFragmentNavigator() 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ức onCreateNavController() 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ớp NavHostFragment. b/122802849
  • Phương pháp hasDeepLink() đã được thêm vào NavDestination để cho phép bạn kiểm tra xem một Uri cụ thể có thể được đích đó xử lý hay không hoặc trong trường hợp của NavGraph là bất kỳ đích nào trong biểu đồ điều hướng. b/117437718

Sửa lỗi

  • Các đối số mặc định hiện được chuyển đến bản sao OnDestinationChangedListener một cách chính xác. b/130630686
  • NavHostFragment hiện đã chặn sự kiện Quay lại của hệ thống bằng OnBackPressedDispatcher, 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”app:argType không xác định giờ đây sẽ được suy luận chính xác dưới dạng đối số string. b/129629192

Phiên bản 2.1.0-alpha02

Ngày 3 tháng 4 năm 2019

Phát hành androidx.navigation:*:2.1.0-alpha02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Bạn hiện có thể tạo ViewModels trong phạm vi ở cấp biểu đồ điều hướng bằng cách sử dụng sự uỷ quyền thuộc tính by navGraphViewModels() cho người dùng Kotlin hoặc bằng cách sử dụng API getViewModelStore() đã thêm vào NavController. b/111614463

Thay đổi về API

  • Giờ đây, bạn có thể thêm app:targetPackage vào đích <activity> để giới hạn tên gói trùng khớp. Cách này hỗ trợ app:targetPackage="${applicationId}" hạn chế gói trong mã ứng dụng của riêng bạn. b/110975456

Sửa lỗi

  • android:name cho đích <activity> không còn được phân tích cú pháp thành Class tại thời điểm tăng cường, ngăn ClassNot FoundExceptions khi sử dụng các tính năng động. b/124538597

Phiên bản 2.1.0-alpha01

Ngày 19 tháng 3 năm 2019

Đây là bản phát hành alpha đầu tiên của Navigation 2.1.0.

Thay đổi về phần phụ thuộc

  • Hiện tại, Navigation phụ thuộc vào androidx.core:core:1.0.1androidx.fragment:fragment:1.1.0-alpha05. Bản phát hành này cũng xoá phần phụ thuộc vào androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

Thay đổi về API

  • Phương thức Navigation.createNavigateOnClickListener(NavDirections) mới đã được thêm vào để thay thế cho việc tạo trình nghe lượt nhấp với Mã tài nguyên và Gói. b/127631752
  • FragmentNavigator.instantiateFragment hiện không dùng nữa. Bây giờ, việc triển khai mặc định sử dụng FragmentFactory để tạo bản sao Fragment. b/119054429

Sửa lỗi

  • Navigation sẽ không còn gửi Bundle rỗng nữa khi có các đối số đính kèm đến một đích, khắc phục sự cố khi sử dụng android:defaultValue="@null". b/128531879
  • Giờ đây, các giá trị Safe Args hiện phụ thuộc vào KotlinPoet 1.1.0, khắc phục vấn đề về tên gói cực kỳ dài. b/123654948

Phiên bản 2.0.0

Phiên bản 2.0.0

Ngày 14 tháng 3 năm 2019

Navigation 2.0.0 được phát hành mà không có thay đổi nào từ 2.0.0-rc02.

Phiên bản 2.0.0-rc02

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

Navigation 2.0.0-rc02 cung cấp cấu phần mềm mới có mã nhóm androidx.navigation và thay đổi các phần phụ thuộc thành các phần tử tương đương của AndroidX.

Hành vi của 2.0.0-rc02 giống với hành vi của Navigation 1.0.0-rc02 và không cần thay đổi mã để cập nhật từ 1.0.0-rc02, ngoài việc cập nhật các phần phụ thuộc để khớp với các phần phụ thuộc mới.

Dự án phải chuyển sang AndroidX để sử dụng bản phát hành 2.X của Navigation. Phiên bản Navigation 1.0 ổn định sẽ là bản phát hành cuối cùng sử dụng các phần phụ thuộc Thư viện hỗ trợ; mọi quy trình phát triển trong tương lai sau 1.0 sẽ dựa trên AndroidX và được xây dựng dựa trên bản phát hành ổn định 2.0.

Phần phụ thuộc trước AndroidX

Đối với các phiên bản Navigation trước AndroidX, hãy thêm các phần phụ thuộc sau:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

Đối với Safe Args, hãy thêm đường dẫn lớp sau vào tệp cấp cao nhất build.gradle

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

Phiên bản 1.0.0

Phiên bản 1.0.0

Ngày 14 tháng 3 năm 2019

Navigation 1.0.0 được phát hành mà không có thay đổi nào từ 1.0.0-rc02.

Phiên bản 1.0.0-rc02

Ngày 26 tháng 2 năm 2019

Đây là bản phát hành dùng thử thứ hai dành cho bản phát hành ổn định 1.0.0 của Navigation. Bản phát hành này đã sửa nhiều lỗi.

Sửa lỗi

  • Khắc phục sự cố popBackStack() bị bỏ qua nếu biểu đồ gốc không có mã nhận dạng b/126251695
  • navigateUp() hiện sẽ xử lý đúng cách để quay lại việc cần làm của ứng dụng khi được gọi sau khi xử lý đường liên kết sâu mà không có FLAG_ACTIVITY_NEW_TASK b/126082008
  • Đã khắc phục vấn đề với ActivityNavigator.applyPopAnimationsToPendingTransition không áp dụng đúng ảnh động thoát khỏi cửa sổ bật lên b/126237567
  • Mã Kotlin do Safe Args tạo hiện đã thoát các từ khoá Kotlin đúng cách chẳng hạn như infun trong tên gói liên kết với lớp R. b/126020455

Phiên bản 1.0.0-rc01

Ngày 21 tháng 2 năm 2019

Đây là bản phát hành dùng thử dành cho bản phát hành ổn định 1.0.0 của Navigation. Bản phát hành này có 1 bản sửa lỗi.

Sửa lỗi

  • Khắc phục vấn đề khi sử dụng Fragment và thao tác điều hướng singleTop b/124294805

Phiên bản 1.0.0-beta02

Ngày 12 tháng 2 năm 2019

Bản phát hành này bao gồm một số điểm cải tiến nhỏ và một số bản sửa lỗi quan trọng.

Tính năng mới

  • Bây giờ, bạn có thể sử dụng 0 làm android:defaultValue cho đối số reference. b/124248602

Thay đổi về hành vi

  • Hiện tại, các đường liên kết sâu chính xác sẽ được ưu tiên hơn đường liên kết sâu với .* hoặc đối số phù hợp. b/123969518

Sửa lỗi

  • popBackStack()navigateUp hiện sẽ trả về chính xác false khi hiển thị đích cuối cùng trong ngăn xếp lui, khắc phục lỗi hồi quy được nêu trong 1.0.0-beta01. b/123933201
  • Bây giờ, Navigation sẽ đặt ClassLoader một cách chính xác trong quá trình khôi phục trạng thái của bản sao đã lưu, để tránh các vấn đề khi sử dụng các lớp tuỳ chỉnh ở trạng thái đã lưu Navigator hoặc trong các đối số được gửi tới NavDestination. 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ột app:argType khác sẽ dẫn đến trường hợp ngoại lệ khi phân tích cú pháp XML điều hướng. b/123551990
  • Giờ đây, Safe Args phụ thuộc vào Trình bổ trợ Android cho Gradle 3.3.0 aosp/888413
  • Giờ đây, Safe Args phụ thuộc vào Kotlin 1.3.20 aosp/888414

Sửa lỗi

  • Giờ đây, bạn có thể sử dụng Safe Args trong thư viện và các mô-đun tính năng trên tất cả phiên bản của Trình bổ trợ Android cho Gradle. b/121304903
  • Đã khắc phục sự hồi quy gây ra một hành động popBackStack() để hiển thị tất cả bản sao của một đích xuất hiện ở đầu ngăn xếp lui, thay vì chỉ một đích tại một thời điểm. b/123552990
  • Khắc phục sự cố trong đó trạng thái FragmentNavigator sẽ huỷ đồng bộ hoá với trạng thái của NavController, gây ra IllegalStateException khi tìm cách khôi phục ngăn xếp lui. b/123803044
  • Khắc phục sự cố trong đó mũi tên quay lại NavigationUI đã xử lý sẽ không xuất hiện khi sử dụng ProGuard có sự làm rối mã nguồn. b/123449431
  • Giờ đây, mã do Safe Args tạo sẽ xử lý đúng cách bằng cách sử dụng app:argType trỏ đến một lớp tĩnh bên trong theo định dạng .OuterClass$InnerClass. b/123736741
  • Mã Java do Safe Args tạo ra hiện xử lý đúng cách các hành động chung và các đích được lồng sâu. b/123347762

Phiên bản 1.0.0-alpha11

Ngày 23 tháng 1 năm 2019

Đây là bản phát hành sửa lỗi nóng của 1.0.0-alpha10 khắc phục một sự cố với Safe Args.

Sửa lỗi

  • Khắc phục sự cố Safe Args không nhập được lớp Chỉ dẫn liên quan đến hành động chung. b/123307342

Phiên bản 1.0.0-alpha10

Ngày 23 tháng 1 năm 2019

Vấn đề đã biết

  • Safe Args không thể nhập lớp Chỉ dẫn liên quan đến hành động chung. b/123307342

Bản phát hành này chứa một số thay đổi có thể gây lỗi API; vui lòng xem phần Thay đổi có thể gây lỗi bên dưới.

Tính năng mới

  • Giờ đây, người dùng Kotlin có thể sử dụng sự uỷ quyền thuộc tính by navArgs() để tham chiếu từng phần đến một lớp NavArgs được tạo bằng Safe Args trong Activity hoặc Fragment. b/122603367
  • Giờ đây, Safe Args cho phép bạn tạo mã Kotlin bằng cách áp dụng trình bổ trợ androidx.navigation.safeargs.kotlin. Mã Kotlin được xây dựng dành riêng cho các mô-đun Kotlin, sử dụng các đối số mặc định và các lớp không thể thay đổi được qua mẫu trình tạo mà vẫn có sẵn thông qua trình bổ trợ androidx.navigation.safeargs trước đó. b/110263087

Các thay đổi về hành vi

  • Hiện các đường liên kết sâu phù hợp có xu hướng là đường liên kết sâu có các đối số phù hợp nhất. b/118393029
  • Giờ đây, khi gọi setGraph() trên NavController, bạn sẽ đặt lại ngăn xếp lui. b/111450672
  • Đường liên kết sâu không xác định không còn gửi IllegalStateException nữa, mà sẽ bỏ qua, khắc phục các vấn đề có nhiều NavHostFragment hoặc bị lồng. b/121340440

Thay đổi có thể gây lỗi

  • Phương thức NavOptions.applyPopAnimationsToPendingTransition() để áp dụng ảnh động bật lên cho một Hoạt động đã được chuyển sang ActivityNavigator. b/122413117
  • Giờ đây, Safe Args sẽ tránh sao chép các lớp tương tự cho các hành động mà không có đối số. Loại trả về cho các phương thức không bao gồm đối số trong lớp NavDirection đã tạo hiện là NavDirections. b/123233147
  • Các lớp Directions (Chỉ dẫn) do Safe Args tạo không còn có hàm khởi tạo công khai nữa. Bạn chỉ nên tương tác với các phương thức tĩnh được tạo. b/123031660
  • Các lớp NavDirections do Safe Args tạo sẽ không còn có hàm khởi tạo công khai nữa. Bạn chỉ nên tạo các lớp này bằng các phương thức tĩnh trong các lớp Directions đã tạo. b/122963206
  • Bundle được trả về từ getArguments() của NavDirections hiện được đánh dấu là @NonNull thay vì @Nullable. b/123243957

Sửa lỗi

  • NavDeepLinkBuilder hiện xử lý chính xác nhiều PendingIntent đồ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/120042732
  • NavController hiện xử lý chính xác các thao tác popBackStack() khi sử dụng NavHostFragment lồng nhau hoặc các Fragment khác có ngăn xếp lui. b/122770335
  • NavigationUI hiện đã đặt chính xác nội dung mô tả nội dung của nút Mũi tên lên. b/120395362
  • Giờ đây, các lớp Chỉ dẫn do Safe Args tạo đã tạo sẽ xử lý chính xác các thao tác chung có cùng mã với thao tác trên một đích. b/122962504
  • Giờ đây, các lớp NavDirections do Safe Args có đúng giá trị hashCode() bằng nhau khi equals() trả về giá trị true. b/123043662
  • FragmentNavigator hiện sẽ gửi một thông báo lỗi hiệu quả hơn nếu bạn cố gắng tuỳ chỉnh FragmentTransactions trên FragmentManager của NavHostFragment. Bạn phải luôn sử dụng getChildFragmentManager(). 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

  • MenuItemmenuCategory="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ức NavigationUI. b/120104424
  • AppBarConfiguration nay cho phép bạn đặt một thực thể OnNavigateUpListener dự phòng sẽ được gọi khi navController.navigateUp() trả về false. b/79993862 b/120690961

Thay đổi có thể gây lỗi

  • Khi bạn sử dụng <argument> với argType="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ức setup. Thêm menuCategory="secondary" vào MenuItem để tránh làm bật ra ngăn xếp lui. aosp/852869
  • Phương thức fromBundle() của các lớp Args được tạo hiện giờ sẽ lấy Bundle không rỗng thay vì Bundle rỗng aosp/845616

Sửa lỗi

  • Các đối số nay được phân tích cú pháp chính xác từ các đường liên kết sâu dưới dạng argType chính xác thay vì luôn là các chuỗi b/110273284
  • Bây giờ, Navigation sẽ xuất đúng tài nguyên công khai b/121059552
  • Safe Args hiện tương thích với trình bổ trợ Android cho Gradle 3.4 Canary 4 trở lên b/119662045

Phiên bản 1.0.0-alpha08

Ngày 6 tháng 12 năm 2018

Bản phát hành này chứa một số thay đổi có thể gây lỗi API; vui lòng xem phần Thay đổi có thể gây lỗi bên dưới.

Tính năng mới

  • Nhãn đích, khi được dùng với các phương thức NavigationUI, giờ đây sẽ tự động thay thế các thực thể {argName} trong android:label bằng đối số chính xác b/80267266
  • Hiện tại, cách điều hướng tuỳ thuộc vào Thư viện hỗ trợ 28.0.0 b/120293333

Thay đổi có thể gây lỗi

  • OnNavigatedListener đổi tên thành OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener hiện cũng truyền đối số Bundle aosp/837142
  • Các thuộc tính app:clearTaskapp:launchDocument cùng các phương thức liên kết với những thuộc tính này đã bị xoá. Sử dụng app:popUpTo với thư mục gốc của biểu đồ để xoá tất cả đích khỏi ngăn xếp lui. b/119628354
  • ActivityNavigator.Extras hiện sử dụng mẫu Builder và thêm khả năng đặt bất kỳ cờ Intent.FLAG_ACTIVITY_ nào aosp/828140
  • NavController.onHandleDeepLink đổi tên thành handleDeepLink aosp/836063
  • Nhiều lớp và phương thức không dùng để phân lớp, chẳng hạn như NavOptions, NavInflater, NavDeepLinkBuilderAppBarConfiguration, đã được tạo final aosp/835681
  • Phương thức NavHostFragment.setGraph() không dùng nữa đã bị xoá aosp/835684
  • Phương thức NavigationUI.navigateUp(DrawerLayout, NavController) không dùng nữa đã bị xoá. aosp/835684
  • Chúng tôi đã chuyển tính năng tạo Mảnh (Fragment) sang FragmentNavigator, qua đó giúp bạn uỷ quyền việc tạo Fragment cho FragmentFactory dễ dàng hơn. b/119054429
  • Hàm khởi tạo cho NavGraphNavigator không còn lấy Context aosp/835340
  • NavigatorProvider hiện là một lớp, chứ không phải là một giao diện. NavigatorProvider do getNavigatorProvider() trả về không thay đổi chức năng của chế độ này. aosp/830660
  • Xoá NavDestination.navigate(). Gọi navigate() trên Navigator. aosp/830663
  • Việc tái cấu trúc đáng kể Navigator, giúp bạn không cần phải có OnNavigatorNavigatedListener mà thay vào đó, hãy yêu cầu navigate trả về NavDestination trong đó.
  • Các thực thể Navigator không gửi được các sự kiện bật lên cho NavController nữa. Hãy cân nhắc sử dụng OnBackPressedCallback để chặn hoạt động nhấn nút quay lại và gọi navController.popBackStack(). aosp/833716

Sửa lỗi

  • popUpTo hiện đang hoạt động nhất quán khi đích đến là phần tử <navigation> b/116831650
  • Khắc phục một số lỗi dẫn đến lỗi IllegalArgumentException khi sử dụng biểu đồ lồng nhau b/118713731 b/113611083 b/113346925 b/113305559
  • Thuộc tính dataPattern của <activity> đích hiện sẽ điền các đối số từ đối số không phải Chuỗi bằng cách gọi toString() b/120161365

Safe Args

  • Safe Args hỗ trợ các đối tượng nối tiếp, bao gồm cả giá trị Enum. Các loại Enum có thể đặt giá trị mặc định bằng cách sử dụng cách liệt kê enum mà không có tên lớp (ví dụ: app:defaultValue="READ") b/111316353
  • Safe Args hỗ trợ các mảng thuộc mọi loại được hỗ trợ b/111487504
  • Giờ đây, tất cả thư mục tài nguyên sẽ chứa các thư mục tài nguyên. b/117893516
  • Safe Args sẽ thêm chú thích @Override nếu cần thiết b/117145301

Phiên bản 1.0.0-alpha07

Ngày 29 tháng 10 năm 2018

Tính năng mới

  • Lớp AppBarConfiguration mới cho phép bạn tuỳ chỉnh các đích được coi là đích đến cấp cao nhất. Hãy xem tài liệu cập nhật để biết thông tin chi tiết. b/117333663
  • Bây giờ, bạn có thể chuyển đối số đích bắt đầu của biểu đồ b/110300470
  • Đường liên kết sâu nay hỗ trợ lược đồ tuỳ chỉnh có dấu chấm, dấu gạch nối và dấu cộng. b/112806402

Thay đổi có thể gây lỗi

  • Mô-đun navigation-testing-ktx đã được đóng thành navigation-testing artifact và sẽ không xuất bản nữa.
  • Cấu phần mềm navigation-testing hiện có một phần phụ thuộc trong thư viện chuẩn Kotlin. API đã được thay đổi để nhất quán hơn với các quy ước Kotlin, nhưng bạn có thể tiếp tục sử dụng API này cho các thử nghiệm viết bằng Java.
  • Biểu đồ điều hướng đã đăng ký cho tệp kê khai siêu dữ liệu không còn được hỗ trợ nữa. b/118355937
  • Hành động không còn được đính kèm vào đích đến <activity>.aosp/785539

Sửa lỗi

  • Giờ đây, các đường liên kết sâu có thể phân tích cú pháp các tham số truy vấn một cách chính xác. b/110057514
  • Đích đến Activity (Hoạt động) hiện áp dụng chính xác tất cả ảnh động nhập và thoát. b/117145284
  • Khắc phục sự cố xảy ra sau khi thay đổi cấu hình khi sử dụng Trình điều hướng tuỳ chỉnh. b/110763345

Safe Args

  • Safe Args nay có phần phụ thuộc cố định trên Trình bổ trợ Android cho Gradle 3.2.1. b/113167627
  • Bạn hiện có thể tạo Chỉ dẫn cho các lớp bên trong. b/117407555
  • Khắc phục sự cố khi tạo Chỉ dẫn đến biểu đồ <include>. b/116542123

Phiên bản 1.0.0-alpha06

Ngày 20 tháng 9 năm 2018

Tính năng mới

Thay đổi về API

  • Sự thay đổi có thể gây lỗi: Phương thức navigate() của Trình điều hướng hiện sẽ nhận tham số Navigator.Extras.
  • Phương thức getGraph() của NavController hiện là NonNull b/112243286

Sửa lỗi

  • NavigationUI.setupWithNavController() không còn rò rỉ khung hiển thị nếu sử dụng cùng với khung hiển thị từ các đích đến riêng lẻ b/111961977
  • Trình điều hướng onSaveState() hiện chỉ được gọi một lần b/112627079

Safe Args

  • Các lớp Directions (Chỉ dẫn) đích của Navigation hiện mở rộng lớp Directions của phần tử mẹ nếu có sẵn b/79871405
  • Giờ đây, các lớp Directions và Args rất hữu ích khi toString() triển khai b/111843389

Phiên bản 1.0.0-alpha05

Ngày 10 tháng 8 năm 2018

Sửa lỗi

  • Khắc phục lỗi gây ra hành vi chèn lấp không chính xác. b/111907708
  • Sửa lỗi trong equals() lớp Args đã tạo. b/111450897
  • Sửa lỗi trong phiên bản Safe Args. b/109409713
  • Khắc phục vấn đề về lượt chuyển đổi từ giá trị nhận dạng tài nguyên thành tên java b/111602491
  • Khắc phục thông báo lỗi về tính chất rỗng trong trình bổ trợ Safe Args.
  • Thêm chú thích về tính chất rỗng bị thiếu.

Phiên bản 1.0.0-alpha04

Ngày 19 tháng 7 năm 2018

Navigation 1.0.0-alpha04 và trình bổ trợ gradle của Safe Args liên kết chứa một số thay đổi về API, các thay đổi về hành vi và các bản sửa lỗi.

Thay đổi về API/Hành vi

  • NavHostFragment sẽ luôn đặt Fragment hiện tại làm mảnh điều hướng chính, đảm bảo rằng trình quản lý mảnh con được bật lên trước khi NavController bên ngoài được kích hoạt b/111345778

Safe Args

  • Thay đổi có thể gây lỗi: app:type đã được thay đổi thành app:argType để tránh xung đột với các thư viện khác như ConstraintLayout 2.0.0-alpha1b/111110548
  • Bây giờ, bạn có thể nhấp vào các thông báo lỗi trong Safe Args b/111534438
  • Lớp Args hiện xác nhận rằng các thuộc tính NonNull thực tế không phải là giá trị rỗng b/111451769
  • Thêm các chú thích NonNull bổ sung vào NavDirections và các lớp được tạo bằng Arg b/111455455 b/111455456

Sửa lỗi

  • Khắc phục vấn đề về nút quay lại của hệ thống sau khi liên kết sâu với đích của mảnh b/111515685

Phiên bản 1.0.0-alpha03

Ngày 12 tháng 7 năm 2018

Navigation 1.0.0-alpha03 và trình bổ trợ gradle của Safe Args liên kết chứa một số thay đổi về API, các thay đổi về hành vi và các bản sửa lỗi.

Thay đổi về API/Hành vi

  • Thêm phương thức NavigationUI.setupWithNavController cho Thanh công cụ b/109868820
  • Thêm phương thức NavigationUI.setupWithNavController cho CollapsingToolbarLayout b/110887183
  • popBackStack() hiện trả về false khi ngăn xếp lui trống hoặc khi mã nhận dạng đích đã cho không nằm trong ngăn xếp lui b/110893637
  • FragmentNavigator hiện bỏ qua các thao tác điều hướng sau khi FragmentManager lưu trạng thái, tránh trường hợp ngoại lệ “Không thể thực hiện hành động này sau onSaveInstanceState” b/110987825

Safe Args

  • Thay đổi có thể gây lỗi: Các ký tự không phải chữ và số trong tên hành động và đối số sẽ được thay thế bằng cách viết hoa camel trong tên phương thức NavDirections tương ứng
    • Ví dụ: DemoController.index sẽ trở thành setDemoControllerIndex b/79995048
    • Ví dụ: action_show_settings sẽ trở thành actionShowSettings b/79642240
  • 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()hashCode() b/79642246
  • Hiện tại, bạn có thể sử dụng trình bổ trợ Safe Args cho các dự án thư viện b/80036553
  • Bạn hiện có thể áp dụng trình bổ trợ Safe Args cho các dự án tính năng b/110011752

Sửa lỗi

  • Đã khắc phục vấn đề khi điều hướng trong phương thức trong vòng đời của Fragment b/109916080
  • Khắc phục sự cố điều hướng nhiều lần qua các biểu đồ lồng nhau b/110178671
  • Đã khắc phục vấn đề khi sử dụng setPopUpTo với đích đầu tiên trong biểu đồ b/109909461
  • Khắc phục sự cố khi chuyển tất cả giá trị app:defaultValue dưới dạng Chuỗi b/110710788
  • aapt2 đi kèm với Trình bổ trợ Android cho Gradle 3.2 Beta 01 hiện thêm các quy tắc giữ cho mỗi thuộc tính android:name trong các tệp XML điều hướng b/79874119
  • Khắc phục sự cố rò rỉ bộ nhớ khi thay thế FragmentNavigator mặc định b/110900142

Phiên bản 1.0.0-alpha02

Ngày 7 tháng 6 năm 2018

Các thay đổi về hành vi

  • FragmentNavigator hiện đang sử dụng setReorderingAllowed(true). b/109826220

  • Navigation giờ đây URLDecodes các đối số được phân tích cú pháp từ các URL đường liên kết sâu. b/79982454

Sửa lỗi

  • Đã sửa IllegalStateException khi gọi điều hướng từ các phương thức trong vòng đời của Fragment. b/79632233

  • Hiện tại, Navigation phụ thuộc vào Thư viện hỗ trợ 27.1.1 để khắc phục việc nhấp nháy khi sử dụng ảnh động. b/80160903

  • Khắc phục IllegalArgumentException khi sử dụng defaultNavHost="true" làm mảnh con. b/79656847

  • Sửa lỗi StackOverflowError khi sử dụng NavDeepLinkBuilder. b/109653065

  • Sửa lỗi IllegalArgumentException khi quay lại biểu đồ lồng. b/80453447

  • Khắc phục sự cố các mảnh bị trùng lặp khi sử dụng launchSingleTop. b/79407969

  • Bây giờ, Navigation sẽ xây dựng ngăn xếp lui tổng hợp chính xác cho các biểu đồ lồng nhau. b/79734195

  • Bây giờ, NavigationUI sẽ làm nổi bật mục chính xác khi sử dụng biểu đồ lồng nhau dưới dạng MenuItem. b/109675998

Thay đổi về API

  • Thuộc tính clearTask cho các hành động và API liên kết trong NavOptions không được dùng nữa. b/80338878

  • Ngừng sử dụng thuộc tính launchDocument cho các hành động và API liên kết trong NavOptions. 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.