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:
- Quando utilizzi il sovraccarico appropriato di
setupWithNavController()
per associare un'istanza diNavigationView
oBottomNavigationView
a unNavController
, come descritto in Aggiungere una navigazione riquadro a scomparsa o In basso navigazione. - Quando utilizzi
onNavDestinationSelected()
per creare un menu di navigazione personalizzato UI associata alle destinazioni ospitate da un'istanzaNavController
.
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.
XML di 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” />
Opzioni di navigazione
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
- Competenze nell'ambito del MAD: esplorare vari gruppi arretrati su Medium
- Navigazione: Approfondimento su più stack posteriori su Medium
Campioni
- Ora su Android app su GitHub
- Jetnews su GitHub
- Jetsnack su GitHub