Hỗ trợ nhiều ngăn xếp lui

Thành phần điều hướng hoạt động trên hệ điều hành Android để duy trì ngăn xếp lui khi người dùng di chuyển trong ứng dụng của bạn. Trong một vài trường hợp, việc duy trì nhiều ngăn xếp lui cùng lúc có thể sẽ tạo điều kiện cho người dùng di chuyển qua lại giữa chúng. Ví dụ: nếu ứng dụng của bạn bao gồm thanh điều hướng dưới cùng hoặc ngăn điều hướng, thì tính năng hỗ trợ nhiều ngăn xếp lui cho phép người dùng tự do chuyển đổi giữa các luồng trong ứng dụng của bạn mà không bị mất chỗ.

Thành phần điều hướng cung cấp các API hỗ trợ nhiều ngăn xếp lui bằng cách lưu và khôi phục trạng thái của đích đến trong biểu đồ điều hướng của bạn. Lớp NavigationUI bao gồm các phương thức tự động xử lý việc này, nhưng bạn cũng có thể sử dụng các API cơ bản theo cách thủ công để triển khai theo cách riêng.

Tự động triển khai dịch vụ hỗ trợ bằng NavigationUI

Lớp NavigationUI bao gồm các API tự động lưu và khôi phục trạng thái của các mục trong trình đơn khi người dùng di chuyển giữa các mục đó. Theo mặc định, các API này triển khai chức năng hỗ trợ nhiều ngăn xếp lui trong các trường hợp sau:

Các API này không yêu cầu thay đổi thêm mã để triển khai hỗ trợ nhiều ngăn xếp lui, đây cũng là phương cách được đề xuất để hỗ trợ nhiều ngăn xếp lui trong ứng dụng của bạn.

Triển khai dịch vụ hỗ trợ theo cách thủ công với các API cơ bản

Nếu các phần tử do NavigationUI cung cấp không đáp ứng yêu cầu của bạn, thì bạn có thể sử dụng các API cơ bản để lưu và khôi phục ngăn xếp lui thông qua một trong các nền tảng API khác do Thành phần điều hướng cung cấp.

Trong XML điều hướng, các phần tử <action> trong biểu đồ điều hướng có thể sử dụng thuộc tính app:popUpToSaveState để lưu trạng thái của bất kỳ đích đến nào có hành động bật lên bằng app:popUpTo. Chúng cũng có thể sử dụng thuộc tính app:restoreState để khôi phục mọi trạng thái đã lưu trước đó cho đích đến đã xác định trong thuộc tính app:destination.

Bạn có thể dùng các thuộc tính này để hỗ trợ nhiều ngăn xếp lui. Khi một thao tác điều hướng cần di chuyển người dùng từ ngăn xếp lui này sang một ngăn xếp lui khác, hãy đặt cả app:popUpToSaveStateapp:restoreState thành true trong phần tử <action> tương ứng. Bằng cách đó, hành động này sẽ lưu trạng thái của ngăn xếp lui hiện tại đồng thời khôi phục trạng thái đã lưu trước đó của đích đến trong ngăn xếp lui nếu có.

Ví dụ sau đây cho thấy một hành động sử dụng cả hai thuộc tính này:

<action
  android:id=”@+id/swap_stack”
  app:destination=”@id/second_stack”
  app:restoreState=”true”
  app:popUpTo=”@id/first_stack_start_destination”
  app:popUpToSaveState=”true” />

Lớp NavOptions cho phép bạn chuyển các tuỳ chọn điều hướng đặc biệt để lưu và khôi phục ngăn xếp lui khi đang di chuyển bằng NavController. Điều này luôn đúng cho dù bạn dùng Kotlin DSL hay NavOptions.Builder để tạo bản sao của NavOptions:

Kotlin

// Use the navigate() method that takes a navOptions DSL Builder
navController.navigate(selectedBottomNavRoute) {
  launchSingleTop = true
  restoreState = true
  popUpTo(navController.graph.findStartDestination().id) {
    saveState = true
  }
}

Java

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);

Để tìm hiểu thêm về cách chuyển các tuỳ chọn điều hướng, vui lòng xem phần Áp dụng NavOptions theo phương thức lập trình.

Tài nguyên khác

Để tìm hiểu thêm về chức năng hỗ trợ nhiều ngăn xếp lui bằng Thành phần điều hướng, vui lòng xem các tài nguyên bổ sung sau đây:

Bài đăng trên blog

Mẫu