Unterstützung mehrerer Back-Stacks

Die Navigationskomponente unterstützt das Android-Betriebssystem, um den Back-Stack zu verwalten, während der Nutzer in Ihrer App navigiert. In einigen Fällen kann es hilfreich sein, mehrere Back Stacks gleichzeitig zu verwalten, wobei der Nutzer zwischen ihnen hin- und herwechseln kann. Wenn Ihre App beispielsweise eine Navigation am unteren Rand oder eine Navigationsleiste umfasst, können Nutzer mithilfe mehrerer Backstacks in Ihrer App beliebig zwischen Abläufen wechseln, ohne dass sie an einer Stelle verloren gehen.

Die Navigationskomponente bietet APIs, die mehrere Back-Stacks unterstützen. Dazu wird der Status der Ziele in Ihrem Navigationsdiagramm gespeichert und wiederhergestellt. Die Klasse NavigationUI enthält Methoden, die dies automatisch verarbeiten. Sie können aber auch die zugrunde liegenden APIs manuell verwenden, um eine individuellere Implementierung zu erreichen.

Unterstützung automatisch mit NavigationUI implementieren

Die Klasse NavigationUI enthält APIs, mit denen der Status von Menüelementen automatisch gespeichert und wiederhergestellt wird, wenn der Nutzer zwischen ihnen wechselt. Diese APIs implementieren standardmäßig mehrere Back-Stack-Unterstützung in den folgenden Fällen:

Für diese APIs sind keine weiteren Codeänderungen erforderlich, um mehrere Back-Stacks zu implementieren. Wir empfehlen, mehrere Back-Stacks in Ihrer Anwendung zu unterstützen.

Unterstützung manuell mit zugrunde liegenden APIs implementieren

Wenn die von NavigationUI bereitgestellten Elemente Ihre Anforderungen nicht erfüllen, können Sie die zugrunde liegenden APIs zum Speichern und Wiederherstellen von Back-Stacks über eine der anderen API-Oberflächen verwenden, die von der Navigationskomponente bereitgestellt werden.

In der Navigations-XML-Datei können <action>-Elemente in Ihrem Navigationsdiagramm das Attribut app:popUpToSaveState verwenden, um den Status aller Ziele zu speichern, die bei der Aktion mit app:popUpTo ausgelöst wurden. Außerdem können sie mit dem Attribut app:restoreState jeden zuvor gespeicherten Status für das im Attribut app:destination definierte Ziel wiederherstellen.

Sie können diese Attribute verwenden, um mehrere Back-Stacks zu unterstützen. Wenn Nutzer mit einer Navigationsaktion von einem Back-Stack in einen anderen verschoben werden müssen, setzen Sie im entsprechenden <action>-Element sowohl app:popUpToSaveState als auch app:restoreState auf true. Auf diese Weise speichert die Aktion den Status des aktuellen Back-Stacks und stellt gleichzeitig den zuvor gespeicherten Status des Ziel-Back-Stacks wieder her, 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” />

Mit der Klasse NavOptions können Sie spezielle Navigationsoptionen zum Speichern und Wiederherstellen von Back-Stacks übergeben, wenn Sie mit einem NavController navigieren. Dies gilt unabhängig davon, ob Sie die Instanz von NavOptions mit Kotlin-DSL oder mit NavOptions.Builder erstellen:

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 Übertragen von Navigationsoptionen finden Sie unter NavOptions programmatisch anwenden.

Weitere Informationen

Weitere Informationen zur Unterstützung mehrerer Back-Stacks mit der Navigationskomponente finden Sie in den folgenden zusätzlichen Ressourcen:

Blogposts

Produktproben