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:
- Gdy używasz odpowiedniego przeciążenia
setupWithNavController()
, aby powiązać instancjęNavigationView
lubBottomNavigationView
z instancjąNavController
, zgodnie z opisem w sekcji Dodawanie szuflady nawigacyjnej lub Nawigacja u dołu. - gdy za pomocą
onNavDestinationSelected()
tworzysz niestandardowy interfejs menu nawigacyjnego powiązany z miejscami docelowymi hostowanymi przez instancjęNavController
.
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.
Plik XML do nawigacji
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” />
Opcje nawigacji
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
- Umiejętności MAD: poruszanie się po wielu stosach wstecznych w medium Medium
- Nawigacja: Szczegółowe informacje o różnych stosach wstecznych w Medium
Próbki
- Teraz w aplikacji na Androida na GitHubie
- Jetnews w GitHubie
- Jetsnack na GitHubie