Obsługa wielu wstecznych stosów

Komponent Nawigacja współpracuje z systemem operacyjnym Android, by utrzymywać stos wsteczny, gdy użytkownik porusza się po aplikacji. W niektórych przypadkach warto mieć kilka stosów wstecznych, aby użytkownicy mogli przełączać się między nimi. Jeśli np. aplikacja zawiera nawigację dolną lub szufladę nawigacji, obsługa wielu tylnych stosunków pozwala użytkownikom swobodnie przełączać się między przepływami w aplikacji bez utraty miejsca w żadnym z nich.

Komponent Nawigacja udostępnia interfejsy API, które obsługują wiele stosów wstecznych przez zapisywanie i przywracanie stanu miejsc docelowych na wykresie nawigacyjnym. Klasa NavigationUI zawiera metody, które obsługują ten proces automatycznie, ale możesz też użyć bazowych interfejsów API ręcznie, aby uzyskać bardziej niestandardową implementację.

Automatyczne wdrażanie pomocy w interfejsie NavigationUI

Klasa NavigationUI zawiera interfejsy API, które automatycznie zapisują i przywracają stan pozycji menu podczas przechodzenia między nimi. Te interfejsy API implementują domyślnie obsługę wielu stosów wstecznych w tych przypadkach:

Te interfejsy API nie wymagają dalszych zmian w kodzie w celu wdrożenia obsługi wielu stosów wstecznych i są zalecanym sposobem obsługi wielu stosów wstecznych w aplikacji.

Ręczne wdrażanie pomocy za pomocą bazowych interfejsów API

Jeśli elementy dostarczane przez NavigationUI nie spełniają Twoich wymagań, możesz zapisać i przywrócić stosy za pomocą bazowych interfejsów API za pomocą jednej z innych platform API dostępnych w komponencie Nawigacja.

W pliku XML nawigacji elementy <action> na wykresie nawigacyjnym mogą korzystać z atrybutu app:popUpToSaveState, aby zapisywać stan miejsc docelowych wyświetlonych przez działanie za pomocą metody app:popUpTo. Mogą też użyć atrybutu app:restoreState, aby przywrócić wcześniej zapisany stan miejsca docelowego określonego w atrybucie app:destination.

Tych atrybutów możesz używać do obsługi wielu stosów wstecznych. Jeśli działanie nawigacyjne musi przenieść użytkownika z jednego stosu z powrotem do innego, ustaw wartości app:popUpToSaveState i app:restoreState na true w odpowiednim elemencie <action>. Dzięki temu działanie zapisze stan bieżącego stosu wstecznego, a jednocześnie przywróci zapisany wcześniej stan docelowego stosu backendu, jeśli taki istnieje.

Poniższy przykład przedstawia działanie wykorzystujące oba te atrybuty:

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

Klasa NavOptions umożliwia przekazywanie specjalnych opcji nawigacji umożliwiających zapisywanie i przywracanie stosów podczas nawigowania za pomocą NavController. Dzieje się tak niezależnie od tego, czy tworzysz instancję NavOptions za pomocą języka Kotlin, czy za pomocą NavOptions.Builder:

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

Więcej informacji o przekazywaniu opcji nawigacji znajdziesz w artykule o automatycznym stosowaniu NavOptions.

Dodatkowe materiały

Więcej informacji o obsłudze wielu stosów wstecznych w komponencie Nawigacja znajdziesz w tych dodatkowych materiałach:

Posty na blogu

Próbki