Unterstützung mehrerer Back-Stacks

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:

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.

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” />

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

Produktproben