Supporta più stack posteriori

Il componente Navigazione funziona con il sistema operativo Android per mantenere lo stack back mentre l'utente naviga nell'app. In alcuni casi, potrebbe essere utile gestire più stack back contemporaneamente, con l'utente che si sposta avanti e indietro tra i due. Ad esempio, se la tua app include la navigazione in basso o un cassetto di navigazione, il supporto di più back stack consente agli utenti di passare liberamente da un flusso all'altro nell'app senza perdere il proprio posto in nessuno di essi.

Il componente Navigazione fornisce API che supportano più back stack mediante il salvataggio e il ripristino dello stato delle destinazioni nel grafico di navigazione. La classe NavigationUI include metodi che gestiscono questo problema automaticamente, ma puoi anche utilizzare manualmente le API sottostanti per un'implementazione più personalizzata.

Implementa automaticamente il supporto con NavigationUI

La classe NavigationUI include API che salvano e ripristinano automaticamente lo stato delle voci di menu quando l'utente si sposta da una all'altra. Queste API implementano per impostazione predefinita il supporto di più back stack nei seguenti casi:

Queste API non richiedono ulteriori modifiche al codice per implementare il supporto di più back stack e sono il metodo consigliato per supportare più back stack nell'app.

Implementa manualmente il supporto con le API sottostanti

Se gli elementi forniti da NavigationUI non soddisfano i tuoi requisiti, puoi utilizzare le API sottostanti per salvare e ripristinare gli stack esistenti tramite una delle altre piattaforme API fornite dal componente Navigazione.

Nel file XML di navigazione, gli elementi <action> nel grafico di navigazione possono utilizzare l'attributo app:popUpToSaveState per salvare lo stato di qualsiasi destinazione selezionata dall'azione utilizzando app:popUpTo. Possono inoltre utilizzare l'attributo app:restoreState per ripristinare qualsiasi stato salvato in precedenza per la destinazione definita nell'attributo app:destination.

Puoi utilizzare questi attributi per supportare più back stack. Quando un'azione di navigazione deve spostare l'utente da uno stack posteriore a un altro, imposta app:popUpToSaveState e app:restoreState su true nell'elemento <action> corrispondente. In questo modo, l'azione salva lo stato del back stack attuale, ripristinando anche lo stato salvato in precedenza del back stack di destinazione, se esistente.

L'esempio seguente mostra un'azione che utilizza entrambi gli attributi:

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

Il corso NavOptions consente di passare opzioni di navigazione speciali per salvare e ripristinare gli stack di riserva quando navighi utilizzando un NavController. Questo vale se crei la tua istanza di NavOptions utilizzando la DSL Kotlin o 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);

Per scoprire di più su come trasmettere le opzioni di navigazione, vedi Applicare NavOptions in modo programmatico.

Risorse aggiuntive

Per scoprire di più sul supporto di più back stack con il componente di navigazione, consulta le seguenti risorse aggiuntive:

Post del blog

Samples