Supporta più stack posteriori

Il componente Navigazione funziona con il sistema operativo Android per mantenere il back stack come utente naviga nella tua app. In alcuni casi, può essere utile mantenere più contemporaneamente, con l'utente che si sposta avanti e indietro. Ad esempio, se la tua app include navigazione o navigazione riquadro a scomparsa, schienale multiplo il supporto stack consente agli utenti di passare liberamente da un flusso all'altro nella tua app senza perdere il posto in nessuno di questi.

Il componente Navigazione fornisce API che supportano più back stack tramite Salvataggio e ripristino dello stato delle destinazioni nella navigazione grafico. La Il corso NavigationUI include che gestiscono questo processo automaticamente, ma puoi anche usare le API sottostanti manualmente per un'implementazione più personalizzata.

Implementare il supporto automaticamente con NavigationUI

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

Queste API non richiedono ulteriori modifiche al codice per implementare più back stack ed è il metodo consigliato per sostenere più pile posteriori nel tuo dell'app.

Implementare il supporto manualmente con le API sottostanti

Se gli elementi forniti da NavigationUI non soddisfano i tuoi requisiti, puoi usare le API sottostanti per salvare e ripristinare gli stack arretrati tramite uno dei alle altre piattaforme API fornite dal componente Navigazione.

Nel file XML di navigazione, gli elementi <action> del grafico di navigazione possono utilizzare il valore app:popUpToSaveState per salvare lo stato di tutte le destinazioni che è stata lanciata utilizzando app:popUpTo. Può anche usare app:restoreState per ripristinare qualsiasi stato salvato in precedenza per la destinazione definita in l'attributo app:destination.

Puoi usare questi attributi per supportare più back stack. Quando viene avviata una navigazione azione deve spostare l'utente da una serie precedente all'altra, imposta entrambe le opzioni app:popUpToSaveState e app:restoreState a true nel corrispondente Elemento <action>. In questo modo, l'azione salva lo stato della dello stack, ripristinando anche lo stato salvato in precedenza della destinazione stack, se esistente.

L'esempio seguente mostra un'azione che utilizza entrambi questi 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 ti consente di passare speciali opzioni di navigazione per salvare e ripristinare gli stack precedenti quando navighi con NavController. Ciò vale sia per la creazione istanza di NavOptions utilizzando Kotlin DSL o l'utilizzo 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ù sulle opzioni di navigazione per passare, vedi Applica opzioni di navigazione. in modo programmatico.

Risorse aggiuntive

Per ulteriori informazioni sul supporto di più back stack con il componente Navigazione, consulta le seguenti risorse aggiuntive:

Blog post

Campioni