Sử dụng các thao tác Điều hướng và Mảnh

Bạn có thể tạo dựng sự kết nối giữa các mảnh bằng thao tác điều hướng. Khi gọi một thao tác điều hướng, người dùng sẽ chuyển từ đích đến này tới đích đến khác. Đây là hướng dẫn giải thích về các thao tác, đồng thời trình bày cách tạo và sử dụng những thao tác đó.

Tổng quan

Mỗi thao tác đều có một mã nhận dạng duy nhất và có thể chứa các thuộc tính khác, chẳng hạn như một đích đến. Đích đến xác định màn hình mà ứng dụng đưa người dùng đến khi kích hoạt thao tác. Thao tác cũng có thể sử dụng các đối số để truyền dữ liệu từ đích đến này tới đích đến khác.

Ví dụ

Bạn có thể dùng thẻ <action> để xác định các thao tác trong tệp XML của biểu đồ điều hướng. Đoạn mã sau đây triển khai một thao tác biểu thị hiệu ứng chuyển đổi từ FragmentA sang FragmentB.

<fragment
    android:id="@+id/fragmentA"
    android:name="com.example.FragmentA">
    <action
        android:id="@+id/action_fragmentA_to_fragmentB"
        app:destination="@id/fragmentB" />
</fragment>

Để điều hướng bằng thao tác này, hãy gọi hàm NavController.navigate() và truyền id sau đây của thao tác vào đó:

navController.navigate(R.id.action_fragmentA_to_fragmentB)

Thao tác chung

Bạn có thể dùng thao tác chung để điều hướng tới một đích đến từ bất kỳ đâu.

Đối với bất kỳ đích đến nào trong ứng dụng có thể truy cập được thông qua nhiều đường dẫn, hãy xác định một thao tác chung tương ứng giúp điều hướng tới đích đến đó.

Hãy xem ví dụ sau đây. Cả đích đến results_winnergame_over đều cần phải bật lên đích đến trang chủ. Thao tác action_pop_out_of_game giúp làm điều đó; action_pop_out_of_game là thao tác chung bên ngoài bất kỳ mảnh cụ thể nào. Điều đó có nghĩa là bạn có thể tham chiếu và gọi nó ở bất cứ đâu trong in_game_nav_graph.

<?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>