Crea un controller di navigazione

Il controller di navigazione è uno dei concetti chiave della navigazione. Contiene il grafico di navigazione ed espone metodi che consentono all'app di spostarsi tra le destinazioni nel grafico.

Quando utilizzi il componente Navigation, crei un controller di navigazione utilizzando la classe NavController. NavController è l'API di navigazione centrale. Tiene traccia delle destinazioni visitate dall'utente e consente all'utente di spostarsi tra le destinazioni. Questa guida mostra come creare un NavController nella tua app.

Per informazioni su come aggiungere un grafico di navigazione al tuo NavController, vedi Progettare il grafico di navigazione. NavController offre diversi modi per navigare verso le destinazioni nel suo grafico. Per saperne di più, vedi Navigare verso una destinazione.

Compose

Per creare un NavController quando utilizzi Jetpack Compose, chiama rememberNavController():

val navController = rememberNavController()

Devi creare NavController in alto nella gerarchia dei componenti componibili. Deve essere abbastanza in alto da consentire a tutti i componenti componibili che devono farvi riferimento di farlo.

In questo modo, puoi utilizzare NavController come unica fonte di verità per l'aggiornamento dei componenti componibili al di fuori delle schermate. Questo segue i principi dell' innalzamento dello stato.

Visualizzazioni

Se utilizzi il framework UI Views, puoi recuperare il tuo NavController utilizzando uno dei seguenti metodi a seconda del contesto:

Kotlin:

Java:

In genere, prima ottieni un NavHostFragment, quindi recuperi NavController dal fragment. Il seguente snippet mostra questa procedura:

Kotlin

val navHostFragment =
    supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

Java

NavHostFragment navHostFragment =
    (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();

Per approfondire