Die Navigationskomponente arbeitet mit dem Android-Betriebssystem, um die Back-Stack als Nutzer in Ihrer App navigieren. In einigen Fällen kann es hilfreich sein, mehrere Gruppen von Back Stacks, wobei der Nutzer zwischen ihnen hin- und herwechseln kann. Enthält Ihre App beispielsweise unten eingeblendete Navigation oder Navigation Schublade, mehrere Rücken Dank Stack-Unterstützung können Nutzer beliebig zwischen Abläufen in Ihrer App wechseln. ohne ihren Platz zu verlieren.
Die Navigationskomponente bietet APIs, die mehrere Back-Stacks unterstützen, indem sie Speichern und Wiederherstellen des Status von Zielen in Ihrer Navigation Diagramm. Die NavigationUI
Kurs enthält die dies automatisch verarbeiten. Sie können aber auch die zugrunde liegenden APIs verwenden, um eine individuellere Implementierung zu erhalten.
Unterstützung automatisch mit NavigationUI implementieren
Klasse NavigationUI
enthält APIs, die den Status von Menüpunkten automatisch wie Nutzende zwischen ihnen wechseln. Diese APIs implementieren mehrere Back-Stacks, indem sie in den folgenden Fällen als Standardeinstellung festgelegt:
- Wenn Sie die entsprechende Überlastung
setupWithNavController()
um eine Instanz vonNavigationView
oderBottomNavigationView
mit einemNavController
-Instanz, als wie unter Navigationselemente hinzufügen Drawer oder Unten Navigation. - Wenn Sie
onNavDestinationSelected()
um ein benutzerdefiniertes Navigationsmenü Benutzeroberfläche, die mit gehosteten Zielen verknüpft ist durch eineNavController
-Instanz.
Diese APIs erfordern keine weiteren Codeänderungen, um mehrere Back-Stacks zu implementieren unterstützen. Diese sind die empfohlene Methode zur Unterstützung mehrerer Back-Stacks in Ihrem
Support manuell mit zugrunde liegenden APIs implementieren
Wenn die von NavigationUI
bereitgestellten Elemente nicht deinen Anforderungen entsprechen, die zugrunde liegenden APIs zum Speichern und Wiederherstellen von Back-Stacks über eine der mit den anderen API-Oberflächen, die von der Komponente „Navigation“ bereitgestellt werden.
Navigations-XML
In Navigations-XML können <action>
-Elemente in Ihrer Navigationsgrafik das app:popUpToSaveState
, um den Status aller Ziele zu speichern, die der Aktion per app:popUpTo
ausgeführt. Sie können auch die app:restoreState
können Sie jeden zuvor gespeicherten Status für das in Das Attribut app:destination
Sie können diese Attribute verwenden, um mehrere Back Stacks zu unterstützen. Wenn eine Navigation Nutzende von einem Back Stack in einen anderen verschieben müssen. app:popUpToSaveState
und app:restoreState
auf true
im entsprechenden <action>
-Element. Auf diese Weise speichert die Aktion den Status der aktuellen und den zuvor gespeicherten Status des Ziels wiederherstellen. Stacks, falls vorhanden.
Das folgende Beispiel zeigt eine Aktion, bei der diese beiden Attribute verwendet werden:
<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
NavOptions
Klasse NavOptions
ermöglicht es Ihnen, spezielle Navigationsoptionen zu übergeben, um Stapel zu speichern und wiederherzustellen. wenn Sie mit NavController
navigieren. Dies gilt unabhängig davon, ob Sie Ihre Instanz von NavOptions
mit Kotlin DSL oder die 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);
Weitere Informationen zum Übergeben von Navigationsoptionen finden Sie unter NavOptions anwenden Programmatisch garantiert.
Weitere Informationen
Wenn Sie mehr über die Unterstützung mehrerer Back-Stacks mit der Navigationskomponente erfahren möchten, finden Sie in den folgenden zusätzlichen Ressourcen:
Blogposts
- MAD Skills: Navigation durch mehrere Back Stacks auf Medium
- Navigation: Multiple Back Stacks im Detail auf Medium
Produktproben
- Jetzt für Android App auf GitHub
- JetNews auf GitHub
- Jetsnack auf GitHub