Thao tác

Điều hướng (navigation) là các tương tác cho phép người dùng di chuyển qua lại, vào và ra khỏi các phần nội dung khác nhau trong ứng dụng.

Thành phần Điều hướng (Navigation) của Android Jetpack gồm có Thư viện điều hướng, trình bổ trợ Safe Args Gradle và công cụ giúp bạn triển khai quy trình điều hướng trong ứng dụng. Thành phần Điều hướng xử lý nhiều trường hợp sử dụng điều hướng, từ nhấp nút đơn giản đến các loại hình phức tạp hơn, chẳng hạn như thanh ứng dụng và ngăn điều hướng.

Khái niệm chính

Bảng sau đây đưa ra thông tin tổng quan về các khái niệm quan trọng trong thành phần điều hướng, cũng như các kiểu dữ liệu chính mà bạn dùng để triển khai các khái niệm đó.

Khái niệm

Mục đích

Kiểu

Thành phần lưu trữ

Một phần tử trên giao diện người dùng chứa đích đến điều hướng hiện tại. Tức là khi người dùng di chuyển trong một ứng dụng, về cơ bản, ứng dụng đó sẽ hoán đổi đích đến trong và ngoài thành phần lưu trữ điều hướng đó.

Biểu đồ

Một cấu trúc dữ liệu xác định tất cả đích đến điều hướng trong ứng dụng và cách kết nối các đích đến này với nhau.

NavGraph

Trình điều khiển

Trình điều phối trung tâm để quản lý việc điều hướng giữa các đích đến. Trình điều khiển này cung cấp các phương thức để điều hướng giữa các đích đến, xử lý đường liên kết sâu, quản lý ngăn xếp lui, v.v.

NavController

Đích đến

Một nút trong biểu đồ điều hướng. Khi người dùng di chuyển đến nút này, thành phần lưu trữ sẽ hiển thị nội dung của nút đó.

NavDestination

Thường được tạo khi xây dựng biểu đồ điều hướng.

Hành trình

Xác định duy nhất một đích đến và mọi dữ liệu mà đích đến đó yêu cầu.

Bạn có thể điều hướng bằng cách sử dụng hành trình. Hành trình sẽ đưa bạn đến các đích đến.

Mọi loại dữ liệu có thể tuần tự hoá.

Lợi ích và tính năng

Thành phần Điều hướng mang lại một số lợi ích và tính năng khác như:

  • Ảnh động và hiệu ứng chuyển đổi: Cung cấp tài nguyên chuẩn hoá để tạo ảnh động và hiệu ứng chuyển đổi.
  • Đường liên kết sâu: Triển khai và xử lý các đường liên kết sâu đưa người dùng đến thẳng một đích đến.
  • Mẫu giao diện người dùng: Hỗ trợ các mẫu như ngăn điều hướng và thành phần điều hướng ở dưới cùng giúp giảm thiểu công việc cần làm.
  • An toàn về kiểu: Hỗ trợ truyền dữ liệu giữa các đích đến đảm bảo an toàn về kiểu.
  • Hỗ trợ ViewModel: Bật tính năng xác định phạm vi ViewModel cho một biểu đồ điều hướng để chia sẻ dữ liệu liên quan đến giao diện người dùng giữa các đích đến trong biểu đồ.
  • Giao dịch mảnh (Fragment transactions): Hỗ trợ và xử lý đầy đủ các giao dịch mảnh.
  • Quay lại và di chuyển lên: Xử lý chính xác các thao tác quay lại và di chuyển lên theo mặc định.

Các lựa chọn về khung

Thành phần Điều hướng hỗ trợ 2 khung chính để triển khai biểu đồ điều hướng, tuỳ thuộc vào cấu trúc giao diện người dùng của ứng dụng:

  • Compose: Nếu ứng dụng của bạn được xây dựng hoàn toàn bằng Jetpack Compose, hãy sử dụng thành phần Điều hướng trong Compose. Các đích đến trong biểu đồ là thành phần kết hợp.
  • Mảnh: Nếu ứng dụng của bạn sử dụng Khung hiển thị hoặc kết hợp Khung hiển thị và Compose, hãy sử dụng thành phần Điều hướng dựa trên mảnh. Các đích đến trong biểu đồ là các mảnh có thể lưu trữ Khung hiển thị tiêu chuẩn, nội dung Compose hoặc kết hợp cả hai.

Đối với các ứng dụng di chuyển từ Khung hiển thị sang Compose, chiến lược được đề xuất là tiếp tục sử dụng thành phần Điều hướng dựa trên mảnh trong khi chuyển đổi từng màn hình sang Compose. Sau khi thay thế tất cả các mảnh bằng thành phần kết hợp, bạn có thể di chuyển biểu đồ điều hướng sang thành phần Điều hướng trong Compose.

Thiết lập môi trường

Để đưa tính năng hỗ trợ điều hướng vào dự án của bạn, hãy thêm các phần phụ thuộc sau vào tệp build.gradle trong ứng dụng:

Groovy

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.9.8"

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

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

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

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

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.9.8"

  // 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")
}

Để biết thông tin về việc thêm các thành phần cấu trúc khác vào dự án, hãy xem nội dung Thêm các thành phần vào dự án.

Các bước tiếp theo

Để tìm hiểu thêm tài liệu và tài nguyên tham khảo liên quan đến thành phần điều hướng, hãy xem các tài nguyên sau.

Hướng dẫn chi tiết

Để biết thêm thông tin về cách triển khai thành phần lưu trữ điều hướng và NavController, cũng như thông tin cụ thể về cách các thành phần này tương tác với Compose và những khung giao diện người dùng khác, hãy xem các hướng dẫn sau:

Lớp học lập trình

Video

Mẫu