Navigation

Per navigazione si intendono le interazioni che consentono agli utenti di spostarsi tra i diversi contenuti all'interno dell'app, di accedervi e di uscire.

Il componente Navigation di Android Jetpack include la libreria Navigation, il plug-in Safe Args Gradle e strumenti per aiutarti a implementare la navigazione nell'app. Il componente Navigation gestisce diversi casi d'uso di navigazione, dai semplici clic sui pulsanti a pattern più complessi, come le barre delle app e il riquadro di navigazione a scomparsa.

Concetti fondamentali

La tabella seguente fornisce una panoramica dei concetti chiave della navigazione e dei tipi principali che utilizzi per implementarli.

Concetto

Finalità

Tipo

Host

Un elemento UI che contiene la destinazione di navigazione corrente. ovvero, quando un utente naviga in un'app, questa scambia le destinazioni all'interno e all'esterno dell'host di navigazione.

Grafico

Una struttura di dati che definisce tutte le destinazioni di navigazione all'interno dell'app e il modo in cui sono collegate tra loro.

NavGraph

Controller

Il coordinatore centrale per la gestione della navigazione tra le destinazioni. Il controller offre metodi per spostarsi tra le destinazioni, gestire i deep link, gestire il back stack e altro ancora.

NavController

Destinazione

Un nodo nel grafico di navigazione. Quando l'utente passa a questo nodo, l'host mostra i suoi contenuti.

NavDestination

In genere viene creato durante la costruzione del grafico di navigazione.

Route

Identifica in modo univoco una destinazione e tutti i dati richiesti.

Puoi navigare utilizzando i percorsi. I percorsi ti portano a destinazione.

Qualsiasi tipo di dati serializzabile.

Vantaggi e funzionalità

Il componente Navigazione offre una serie di altri vantaggi e funzionalità, tra cui:

  • Animazioni e transizioni: fornisce risorse standardizzate per animazioni e transizioni.
  • Link diretti:implementa e gestisce i link diretti che indirizzano l'utente direttamente a una destinazione.
  • Pattern UI: supporta pattern come i riquadri di navigazione e la navigazione in basso con un lavoro aggiuntivo minimo.
  • Sicurezza dei tipi:include il supporto per il trasferimento di dati tra destinazioni con sicurezza dei tipi.
  • Supporto di ViewModel:consente di definire l'ambito di un ViewModel in un grafico di navigazione per condividere i dati correlati all'UI tra le destinazioni del grafico.
  • Transazioni di frammenti:supporta e gestisce completamente le transazioni di frammenti.
  • Indietro e su:gestisce correttamente le azioni Indietro e Su per impostazione predefinita.

Opzioni del framework

Il componente Navigazione supporta due framework principali per l'implementazione del grafico di navigazione, a seconda dell'architettura dell'interfaccia utente della tua app:

  • Compose: se la tua app è creata interamente con Jetpack Compose, utilizza Navigation Compose. Le destinazioni nel grafico sono componibili.
  • Frammenti: se la tua app utilizza View o un mix di View e Compose, utilizza il componente di navigazione basato su frammenti. Le destinazioni nel grafico sono frammenti che possono ospitare visualizzazioni standard, comporre contenuti o una combinazione di entrambi.

Per le applicazioni che eseguono la migrazione da View a Compose, la strategia consigliata è continuare a utilizzare il componente di navigazione basato su frammenti durante la conversione delle singole schermate in Compose. Una volta sostituiti tutti i fragment con i composable, puoi eseguire la migrazione del grafico di navigazione a Navigation Compose.

Configura l'ambiente

Per includere il supporto della navigazione nel progetto, aggiungi le seguenti dipendenze al file build.gradle dell'app:

Groovy

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.9.8"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.9.8"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

Per informazioni sull'aggiunta di altri componenti dell'architettura al tuo progetto, consulta Aggiungere componenti al tuo progetto.

Passaggi successivi

Per ulteriori documentazione e risorse relative al componente Navigation, consulta le seguenti risorse.

Guide dettagliate

Per saperne di più su come implementare un host di navigazione e NavController, nonché sui dettagli della loro interazione con Compose e altri framework UI, consulta le seguenti guide:

Codelab

Video

Esempi