Thiết kế biểu đồ điều hướng

Thành phần điều hướng sử dụng biểu đồ điều hướng để quản lý tính năng điều hướng trong ứng dụng của bạn. Biểu đồ điều hướng là tệp tài nguyên chứa tất cả các đích đến của ứng dụng cùng với kết nối logic, hoặc thao tác mà người dùng có thể thực hiện để di chuyển từ đích đến này tới đích đến khác. Bạn có thể quản lý biểu đồ điều hướng của ứng dụng bằng Trình chỉnh sửa điều hướng trong Android Studio.

Chủ đề này bao gồm các phương pháp và đề xuất hay nhất để thiết kế biểu đồ điều hướng của ứng dụng.

Biểu đồ điều hướng cấp cao

Biểu đồ điều hướng cấp cao (top-level) của ứng dụng phải bắt đầu với đích đến đầu tiên mà người dùng nhìn thấy khi khởi chạy ứng dụng và phải bao gồm các đích đến mà chúng gặp khi chuyển động trong ứng dụng của bạn.

Hình 1: Biểu đồ điều hướng cấp cao.

Biểu đồ lồng nhau

Các luồng đăng nhập, trình hướng dẫn, hoặc luồng phụ khác trong ứng dụng của bạn thường được gọi là biểu đồ điều hướng lồng nhau. Bằng cách lồng những luồng điều hướng phụ độc lập theo cách này, luồng chính của giao diện người dùng trong ứng dụng của bạn sẽ dễ hiểu và dễ quản lý hơn. Ngoài ra, các biểu đồ lồng nhau có thể sử dụng lại được. Các bảng này cũng cho một cấp độ đóng gói - các đích đến nằm ngoài biểu đồ lồng nhau không có quyền truy cập trực tiếp vào bất kỳ đích nào bên trong biểu đồ lồng nhau đó. Thay vào đó, các đích đến này phải navigate() đến chính biểu đồ lồng nhau, trong đó logic bên trong có thể thay đổi mà không ảnh hưởng đến phần còn lại của biểu đồ.

Sử dụng biểu đồ điều hướng tổng quát trong hình 1 làm ví dụ, giả sử bạn muốn yêu cầu người dùng xem màn hình title_screenregister chỉ khi ứng dụng khởi chạy lần đầu tiên. Sau đó, thông tin người dùng được lưu trữ, và trong các lần chạy ứng dụng tiếp theo, bạn nên đưa chúng thẳng đến màn hình khớp. Cách tốt nhất là bạn nên đặt màn hình match làm điểm đích khởi đầu của biểu đồ điều hướng tổng quát đồng thời chuyển màn hình tiêu đề và màn hình đăng ký vào trong một biểu đồ lồng nhau, như minh họa trong hình 2:

Hình 2: Biểu đồ điều hướng tổng quát hiện chứa một biểu đồ lồng nhau.

Khi màn hình so khớp chạy, bạn có thể kiểm tra xem có người dùng đã đăng ký hay không. Nếu người dùng chưa đăng ký, bạn có thể điều hướng đến màn hình đăng ký. Để biết thêm thông tin về tình huống điều hướng có điều kiện, vui lòng xem nội dung phần Điều hướng có điều kiện.

Một cách khác để mô-đun hóa cấu trúc biểu đồ của bạn là chèn một biểu đồ trong một biểu đồ khác thông qua phần tử <include> trong biểu đồ điều hướng chính. Điều này cho phép xác định biểu đồ đi kèm trong một mô-đun hoặc dự án riêng biệt nói chung, giúp tối đa hóa khả năng sử dụng lại.

Điều hướng qua các mô-đun thư viện

Nếu ứng dụng của bạn phụ thuộc vào các mô-đun thư viện có biểu đồ điều hướng chứa trong đó, bạn có thể tham chiếu đến các biểu đồ điều hướng này bằng cách sử dụng phần tử <include>.

Để biết thêm thông tin, xem Phương thức điều hướng hay nhất cho các dự án nhiều mô-đun.

Thao tác toàn cục

Bất kỳ đích đến nào trong ứng dụng có thể đến được thông qua nhiều đường dẫn đều phải có một thao tác chung tương ứng được xác định để điều hướng tới đích đến đó. Bạn có thể sử dụng các thao tác tổng quát để điều hướng tới một đích đến từ bất kỳ đâu.

Hãy áp dụng phương thức này cho mẫu mô-đun thư viện của chúng tôi, mẫu mô-đun này có cùng thao tác được xác định trong cả đích thắng và kết thúc trò chơi. Bạn nên tách những thao tác chung này ra thành một thao tác toàn cục và tham chiếu chúng từ cả hai đích đến như trong ví dụ sau:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/in_game_nav_graph"
   app:startDestination="@id/in_game">

   <!-- Action back to destination which launched into this in_game_nav_graph-->
   <action android:id="@+id/action_pop_out_of_game"
                       app:popUpTo="@id/in_game_nav_graph"
                       app:popUpToInclusive="true" />

   <fragment
       android:id="@+id/in_game"
       android:name="com.example.android.gamemodule.InGame"
       android:label="Game">
       <action
           android:id="@+id/action_in_game_to_resultsWinner"
           app:destination="@id/results_winner" />
       <action
           android:id="@+id/action_in_game_to_gameOver"
           app:destination="@id/game_over" />
   </fragment>

   <fragment
       android:id="@+id/results_winner"
       android:name="com.example.android.gamemodule.ResultsWinner" />

   <fragment
       android:id="@+id/game_over"
       android:name="com.example.android.gamemodule.GameOver"
       android:label="fragment_game_over"
       tools:layout="@layout/fragment_game_over" />

</navigation>

Hãy xem Thao tác chung trong tài liệu điều hướng để tìm hiểu thêm và xem các ví dụ về cách sử dụng thao tác chung trong mảnh của bạn.