Navigazione

Navigation è un framework per navigare tra le "destinazioni" all'interno di un'applicazione Android che fornisce un'API coerente indipendentemente dal fatto che le destinazioni siano implementate come fragment, attività o altri componenti.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Alpha Release
2 luglio 2025 2.9.1 - - -

Dichiarazione di dipendenze

Per aggiungere una dipendenza da Navigation, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle per la tua app o il tuo modulo:

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.1"

  // 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.1"

  // 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")
}

Safe Args

Per aggiungere Safe Args al progetto, includi il seguente classpath nel file build.gradle di primo livello:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.9.1"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.1"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

Devi anche applicare uno dei due plug-in disponibili.

Per generare codice in linguaggio Java adatto per moduli Java o misti Java e Kotlin, aggiungi questa riga al file build.gradle della tua app o del tuo modulo:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

In alternativa, per generare codice Kotlin adatto per i moduli solo Kotlin, aggiungi:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

Devi avere android.useAndroidX=true nel file gradle.properties come indicato in Migrazione ad AndroidX.

Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 2.9

Versione 2.9.1

2 luglio 2025

androidx.navigation:navigation-*:2.9.1 viene ritirata. La versione 2.9.1 contiene questi commit.

Correzioni di bug

  • Risolto un problema che impediva agli NavEntries istanziati utilizzando un singolo livello superiore di andare oltre CREATED nel relativo Lifecycle.State. (I043ba, b/421095236)

Versione 2.9.0

7 maggio 2025

androidx.navigation:navigation-*:2.9.0 viene ritirata. La versione 2.9.0 contiene questi commit.

Modifiche importanti dalla versione 2.8.0

  • Le azioni di Navigation Safe Args vengono ora generate con l'annotazione @CheckResult per garantire che vengano utilizzate.

Interfaccia del riquadro di supporto

  • Ora i navigatori personalizzati possono contrassegnare le loro destinazioni come implementanti l'interfaccia SupportingPane, che indica a NavController che queste destinazioni verranno mostrate insieme ad altre. Utilizzando questa interfaccia, è possibile RESUMED più destinazioni contemporaneamente, ad esempio.

Compose Kotlin Multiplatform

  • La navigazione ora offre una nuova funzione comune NavController.handleDeepLink() che accetta un NavDeepLinkRequest anziché un Intent. Ciò consente alle piattaforme diverse da Android di gestire correttamente i link diretti. Grazie Konstantin Tskhovrebov.
  • La navigazione ora offre NavUri, una nuova funzione di analisi comune che è un'API compatibile per l'URI di Android su altre piattaforme. In questo modo è possibile creare un URI in modo indipendente dalla piattaforma. Grazie Konstantin Tskhovrebov.

Funzioni type-safe

  • Le API type-safe che in precedenza erano accessibili solo tramite metodi reified, ad esempio composable<YourScreen> ora hanno versioni non concrete che accettano direttamente un'istanza KClass.
  • La sicurezza del tipo di navigazione ora supporta le classi di valori come percorso o come tipo di argomento di un percorso.

Versione 2.9.0-rc01

23 aprile 2025

androidx.navigation:navigation-*:2.9.0-rc01 viene ritirata. La versione 2.9.0-rc01 contiene questi commit.

Correzioni di bug

  • Sono stati rimossi tutti i target di piattaforme non Android da Jetpack Navigation, in quanto questi target non funzionano. Ora vengono forniti stub per piattaforme diverse.(I2877d)

Versione 2.9.0-beta01

9 aprile 2025

androidx.navigation:navigation-*:2.9.0-beta01 viene ritirata. La versione 2.9.0-beta01 contiene questi commit.

Modifiche alle API

  • L'API comune di parseStringAsNavUri è stata modificata in una funzione di fabbrica NavUri che accetta una stringa. (I4db6e, b/403616316)

Aggiornamenti delle dipendenze

  • Questa libreria ora ha come target il livello del linguaggio Kotlin 2.0 e richiede KGP 2.0.0 o versioni successive. (Idb6b5)

Versione 2.9.0-alpha09

26 marzo 2025

androidx.navigation:navigation-*:2.9.0-alpha09 viene ritirata. La versione 2.9.0-alpha09 contiene questi commit.

Nuove funzionalità

  • Il modulo navigation-testing ora supporta desktop, Linux, macOS e iOS, oltre ad Android. (I2b770, b/398265336)
  • NavType è ora supportato su computer, Linux, macOS e iOS, oltre che su Android. (I297d8)

Versione 2.9.0-alpha08

12 marzo 2025

androidx.navigation:navigation-*:2.9.0-alpha08 viene ritirata. La versione 2.9.0-alpha08 contiene questi commit.

Correzioni di bug

  • Da Navigazione 2.8.9: è stata corretta una regressione riscontrata in Navigazione 2.8.8 che richiedeva che un link diretto corrispondesse esattamente a tutti i campi di una richiesta o di un intent di link diretto per essere considerato una corrispondenza. Ciò ha causato la mancata funzionalità dei link diretti che contenevano corrispondenze parziali dei campi e non ne avevano altre. (Ie5e36, b/399826566)

Contributo esterno

  • Nuova funzione di analisi comune per creare un NavUri. Grazie Konstantin Tskhovrebov. (If0a6a)

Versione 2.9.0-alpha07

26 febbraio 2025

androidx.navigation:navigation-*:2.9.0-alpha07 viene ritirata. La versione 2.9.0-alpha07 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui il tentativo di saveState con un pop-up non inclusivo comportava un savedState nullo che poteva causare un arresto anomalo durante il ripristino. (I9f3e8, b/395091644)
  • A partire da Navigation 2.8.8: è stata corretta la corrispondenza NavDeepLink in cui un link diretto e una richiesta di link diretto devono corrispondere esattamente a URI, azione e MIME. La corrispondenza non è più consentita se corrispondono solo uno o due campi. (I3b029, b/395712033)
  • A partire da Navigation 2.8.8: è stato corretto un bug per cui le route con percorsi jolly non corrispondono a un link diretto aggiunto (I7ea92, b/389970341)

Contributo esterno

  • Estrai le API navigation-common, navigation-runtime e navigation-compose nella piattaforma comune. Grazie Konstantin Tskhovrebov. (I1e626, Ica76f, Idf479)

Problemi noti

  • A causa del lavoro per risolvere il problema b/395712033, i link diretti devono avere erroneamente tutti gli stessi campi della richiesta di link diretto e/o del Intent. I link diretti devono corrispondere solo ai campi che contengono e i campi non inclusi devono essere ignorati. Questo problema è stato risolto per una release successiva nell'ambito di b/399826566.

Versione 2.9.0-alpha06

12 febbraio 2025

androidx.navigation:navigation-*:2.9.0-alpha06 viene ritirata. La versione 2.9.0-alpha06 contiene questi commit.

Nuove funzionalità

  • Le azioni di Navigation Safe Args vengono ora generate con l'annotazione @CheckResult per garantire che vengano utilizzate. (I14d4c, b/356323084)

Correzioni di bug

  • È stato corretto un errore in NavController in cui si tentava erroneamente di ripristinare gli stati backStack in un array quando venivano salvati in un elenco. (Idfb9b)
  • Da Navigazione 2.8.7: Navigation Safe Args ora supporta le destinazioni componibili. (I35320, b/362791955)

Versione 2.9.0-alpha05

29 gennaio 2025

androidx.navigation:navigation-*:2.9.0-alpha05 viene ritirata. La versione 2.9.0-alpha05 contiene questi commit.

Correzioni di bug

  • Risolvi un problema che causava un'animazione di ridimensionamento imprevista quando utilizzavi Navigation Compose. (I480f4, b/353294030)
  • Da Navigazione 2.8.6: le etichette NavDestination fornite tramite XML verranno analizzate tramite NavType.get per garantire che la logica NavType personalizzata venga rispettata. (I7ec2f, b/388100796)
  • Da Navigazione 2.8.6: quando si passa a un'attività con dataPattern, ActivityNavigator ora tenta di codificare il valore dell'argomento con NavType. (I16376, b/383616432)
  • Da Navigation 2.8.5: è stato risolto un problema che causava un'animazione di ridimensionamento imprevista quando si utilizzava Navigation Compose e si chiamava navigate nello stesso frame in cui termina l'animazione corrente. (I26cb1, b/353294030)

Versione 2.9.0-alpha04

11 dicembre 2024

androidx.navigation:navigation-*:2.9.0-alpha04 viene ritirata. La versione 2.9.0-alpha04 contiene questi commit.

Nuove funzionalità

La tabella seguente fornisce le API reificate e KClass.

reified KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

Modifiche alle API

  • L'overload NavGraph.setStartDestination specifico per Kotlin per la sicurezza dei tipi è nascosto dalle origini Java. (Ic640c, b/364634035)

Correzioni di bug

  • Da Navigazione 2.8.5: è stato risolto un problema a causa del quale NavHost poteva generare un'eccezione all'interno di PredictiveBackHandler se lo stack precedente viene estratto fino a 1 voce e viene attivato un pulsante Indietro del sistema nello stesso frame. (I1a429, b/375343407)
  • Da Navigazione 2.8.5: è stato corretto NavDestination NullPointerException durante l'aggiornamento di startDestination di un grafico. (I99421, b/361560785)

Contributo esterno

Versione 2.9.0-alpha03

13 novembre 2024

androidx.navigation:navigation-*:2.9.0-alpha03 viene ritirata. La versione 2.9.0-alpha03 contiene questi commit.

Nuove funzionalità

  • La sicurezza del tipo di navigazione ora supporta le classi di valori come percorso o come tipo di argomento di un percorso. (I9344a, b/374347483)

Correzioni di bug

  • È stato risolto un ConcurrentModificationException che poteva verificarsi quando un LifecycleObserver collegato a un NavBackStackEntry attivava una modifica dello stack precedente quando l'LifecycleOwner host, ad esempio l'attività o il fragment contenitore, cambiava il proprio stato del ciclo di vita. (Ia9494)

Versione 2.9.0-alpha02

30 ottobre 2024

androidx.navigation:navigation-*:2.9.0-alpha02 viene ritirata. La versione 2.9.0-alpha02 contiene questi commit.

Contributo esterno

  • Nuovo metodo NavController.handleDeepLink(request: NavDeepLinkRequest) comune. Grazie Konstantin Tskhovrebov. (I3e228)

Versione 2.9.0-alpha01

16 ottobre 2024

androidx.navigation:navigation-*:2.9.0-alpha01 viene ritirata. La versione 2.9.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Ora i navigatori personalizzati possono contrassegnare le loro destinazioni come implementanti l'interfaccia SupportingPane, che indica a NavController che queste destinazioni verranno mostrate insieme ad altre. Utilizzando questa interfaccia, è possibile RESUMED più destinazioni contemporaneamente, ad esempio. (Id5559)
  • Da Navigazione 2.8.3: sono stati aggiunti nuovi controlli lint per i moduli navigation-common, navigation-runtime e navigation-compose per identificare eventuali route type-safe non annotate correttamente con @Serializable. Questo controllo viene applicato a tutte le funzioni di estensione NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Da Navigation 2.8.3: sono stati aggiunti nuovi controlli lint per i moduli navigation-common, navigation-runtime e navigation-compose per aiutare a identificare eventuali route type-safe con argomenti Enum che non sono annotati correttamente con @Keep. Questo controllo viene applicato a tutte le funzioni di estensione NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Modifiche al comportamento

  • Il tentativo di utilizzare un NavController che è stato precedentemente DESTROYED ora causerà un IllegalStateException. (I520da, b/369616172)

Correzioni di bug

  • Aggiorna l'eccezione Enum class not found per suggerire l'utilizzo dell'annotazione @Keep nel caso in cui la classe Enum venga cancellata nelle build ridotte. (I90e79, b/358137294)

Problemi noti

  • Si è verificato un problema con le nuove regole di lint aggiunte in Navigation 2.8.* che causano un errore Obsolete custom lint check quando si tenta di eseguire lint con il plug-in Android Gradle 8.4+. (b/368070326, b/371463741)

Versione 2.8

Versione 2.8.9

12 marzo 2025

androidx.navigation:navigation-*:2.8.9 viene ritirata. La versione 2.8.9 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema di regressione riscontrato in Navigation 2.8.8 che richiedeva che un link diretto corrispondesse esattamente a tutti i campi di una richiesta di link diretto o di un intent per essere considerato una corrispondenza. Ciò ha causato la mancata funzionalità dei link diretti che contenevano corrispondenze parziali dei campi e non ne avevano altre. (Ie5e36, b/399826566)

Versione 2.8.8

26 febbraio 2025

androidx.navigation:navigation-*:2.8.8 viene ritirata. La versione 2.8.8 contiene questi commit.

Correzioni di bug

  • Risolto un bug per cui le route con percorsi con caratteri jolly non corrispondono a un link diretto aggiunto. (I7ea92, b/389970341)
  • È stata corretta la corrispondenza NavDeepLink in cui un link diretto e una richiesta di link diretto devono corrispondere esattamente a URI, azione e MIME. La corrispondenza non è più consentita se corrispondono solo uno o due campi. (I3227f, b/395712033)

Problemi noti

  • A causa del lavoro per risolvere il problema b/395712033, i link diretti devono avere erroneamente tutti gli stessi campi della richiesta di link diretto e/o del Intent. I link diretti devono corrispondere solo ai campi che contengono e i campi non inclusi devono essere ignorati. Questo problema è stato risolto per una release successiva nell'ambito di b/399826566.

Versione 2.8.7

12 febbraio 2025

androidx.navigation:navigation-*:2.8.7 viene ritirata. La versione 2.8.7 contiene questi commit.

Correzioni di bug

  • Navigation Safe Args ora supporta le destinazioni componibili. (I35320, b/362791955)

Versione 2.8.6

29 gennaio 2025

androidx.navigation:navigation-*:2.8.6 viene ritirata. La versione 2.8.6 contiene questi commit.

Correzioni di bug

  • Le etichette NavDestination fornite tramite XML verranno analizzate tramite NavType.get per garantire il rispetto della logica NavType personalizzata. (Id366d, b/388100796)
  • Quando si passa all'attività con dataPattern, ActivityNavigator ora tenta di codificare il valore dell'argomento con NavType. (I1a71d, b/383616432)

Versione 2.8.5

11 dicembre 2024

androidx.navigation:navigation-*:2.8.5 viene ritirata. La versione 2.8.5 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui NavHost poteva generare un'eccezione all'interno di PredictiveBackHandler se lo stack precedente veniva ridotto a una voce e veniva attivato un pulsante Indietro del sistema nello stesso frame. (I1a429, b/375343407)
  • È stato corretto NavDestination NullPointerException durante l'aggiornamento di startDestination di un grafico. (I99421, b/361560785)
  • Risolto un problema che causava un'animazione di ridimensionamento imprevista quando si utilizzava Navigation Compose e si chiamava navigate nello stesso frame in cui termina l'animazione corrente. (I26cb1, b/353294030)
  • È stato risolto un ConcurrentModificationException che poteva verificarsi quando un LifecycleObserver collegato a un NavBackStackEntry attivava una modifica dello stack precedente quando l'LifecycleOwner host, ad esempio l'attività o il fragment contenitore, cambiava il proprio stato del ciclo di vita. (Ia9494)

Contributo esterno

  • La sicurezza del tipo di navigazione ora supporta List<Enum> come tipo di argomento di un percorso senza richiedere NavType personalizzati. Grazie Csaba Kozák. (GH-725, b/375559962)

Versione 2.8.4

13 novembre 2024

androidx.navigation:navigation-*:2.8.4 viene ritirata. La versione 2.8.4 contiene questi commit.

Nuove funzionalità

Correzioni di bug

Versione 2.8.3

16 ottobre 2024

androidx.navigation:navigation-*:2.8.3 viene ritirata. La versione 2.8.3 contiene questi commit.

Nuove funzionalità

  • Sono stati aggiunti nuovi controlli lint per i moduli navigation-common, navigation-runtime e navigation-compose per identificare eventuali route type-safe non annotate correttamente con @Serializable. Questo controllo viene applicato a tutte le funzioni di estensione NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Sono stati aggiunti nuovi controlli lint per i moduli navigation-common, navigation-runtime e navigation-compose per contribuire a identificare eventuali route type-safe con argomenti Enum che non sono annotati correttamente con @Keep. Questo controllo viene applicato a tutte le funzioni di estensione NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Correzioni di bug

  • È stato risolto un problema per cui le nuove regole lint aggiunte in Navigation 2.8.* causavano un errore Obsolete custom lint check quando si tentava di eseguire lint con il plug-in Android per Gradle 8.4 o versioni successive. (I1be3d, b/368070326, b/371463741)

Problemi noti

  • Lint di navigazione genererà un errore di controllo lint personalizzato obsoleto quando si tenta di eseguire lint con Lint 16 (AGP 8.7) o versioni successive. (b/371926651)

Versione 2.8.2

2 ottobre 2024

androidx.navigation:navigation-*:2.8.2 viene ritirata. La versione 2.8.2 contiene questi commit.

Nuove funzionalità

  • La sicurezza dei tipi di navigazione ora supporta le classi serializzabili che includono Double, Double?, DoubleArray, DoubleArray?, List<Double> e List<Double>? senza richiedere NavType personalizzati. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)

Correzioni di bug

  • È stato migliorato il messaggio di errore visualizzato quando la navigazione non riesce a mappare l'argomento di un percorso a un NavType. Il nuovo messaggio di errore conterrà il nome dell'argomento, il nome completo dell'argomento e il nome completo del percorso. (Id8416, b/346264232)

Versione 2.8.1

18 settembre 2024

androidx.navigation:navigation-*:2.8.1 viene ritirata. La versione 2.8.1 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova regola lint per garantire l'utilizzo della funzione popBackStack che accetta un tipo di classe reificato quando si tenta di popBackStack utilizzando API type-safe. (Ief161, b/358095343)

Correzioni di bug

  • Ora la navigazione richiede che la rotta passata all'NavGraph startDestination contenga i valori di tutti gli argomenti obbligatori, inclusi quelli non annullabili e senza valore predefinito. (I18e74, b/362594265)
  • Gli argomenti sicuri di navigazione hanno aggiunto il supporto per le stringhe non nullabili, in modo che i valori "null" vengano analizzati e archiviati nel bundle così come sono. Questo si discosta dal comportamento esistente in cui i valori "null" vengono analizzati in un oggetto null. Questa modifica si applica solo ai tipi di stringa non nullabili. Le stringhe Nullable rimangono invariate. (I08b4a, b/348936238)
  • Non è più possibile utilizzare un link diretto per accedere a un NavDestination, tranne che tramite un link diretto aggiunto esplicitamente alla destinazione. Ciò significa anche che puoi navigare verso l'itinerario di una destinazione solo con l'overload della funzione di navigazione che accetta un itinerario stringa. Questo aggiornamento corregge una vulnerabilità che consentiva di creare link diretti a una destinazione potenzialmente protetta. (Ie30e6)

Aggiornamento delle dipendenze

  • Navigation Safe Args ora dipende da Kotlin 1.9.24, anziché da Kotlin 2.X, garantendo che gli sviluppatori non siano costretti a eseguire l'aggiornamento. (a4129a)
  • La composizione della navigazione ora dipende da Composizione 1.7.2.

Versione 2.8.0

4 settembre 2024

androidx.navigation:navigation-*:2.8.0 viene ritirata. La versione 2.8.0 contiene questi commit.

Modifiche importanti dalla versione 2.7.0

Sicurezza dei tipi di Kotlin DSL per la navigazione

  • Ora la navigazione fornisce la sicurezza dei tipi per Kotlin DSL (utilizzato da Navigation Compose) utilizzando Kotlin Serialization per consentirti di definire le destinazioni nel grafico di navigazione tramite oggetti e classi di dati sicuri per i tipi:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

Per ulteriori informazioni, consulta il post del blog Navigazione Sicurezza dei tipi di composizione di Meet.

Navigazione indietro predittiva di Composizione

  • Navigation Compose ora supporta la funzionalità Indietro predittivo in-app tramite le nuove API SeekableTransitionState di compose-animation. In questo modo, puoi utilizzare il gesto Indietro per visualizzare la destinazione precedente con la transizione personalizzata prima di decidere se completare la transazione tramite il gesto completato o annullarla.

Composable Navigation Fragment

  • È stato aggiunto un nuovo artefatto navigation-fragment-compose che include un'alternativa ComposableNavHostFragment a NavHostFragment che ti consente di aggiungere destinazioni componibili ai tuoi file XML di navigazione. Ogni destinazione composable deve essere espressa come metodo @Composable di primo livello senza argomenti, il cui nome completo viene utilizzato come attributo android:name in ogni destinazione. Quando si passa a una di queste destinazioni, viene creato un frammento contenitore per visualizzare i contenuti componibili.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

Altre modifiche

  • Navigation Compose ora dipende da Compose 1.7.0.
  • La navigazione ora fornisce una nuova classe CollectionNavType<T>, una sottoclasse di NavType<T> per argomenti basati su raccolte come elenchi, array e mappe. Tutti gli array NavType predefiniti (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType e StringArrayType) ora ereditano da questa nuova classe.
  • NavType ora supporta di serie gli elenchi di numeri interi, stringhe, valori booleani, numeri in virgola mobile e numeri interi lunghi.

Versione 2.8.0-rc01

21 agosto 2024

androidx.navigation:navigation-*:2.8.0-rc01 viene ritirata. La versione 2.8.0-rc01 contiene questi commit.

Correzioni di bug

  • Correzione dell'arresto anomalo della navigazione durante il passaggio di classi Enum di primo livello come argomenti type-safe. (I0ba76, b/358137294)
  • Navigation 2.8 ora funziona correttamente con l'SDK 34 e non passerà all'SDK 35 fino alla release 2.9 insieme al resto delle librerie AndroidX. (b/358798728)

Versione 2.8.0-beta07

7 agosto 2024

androidx.navigation:navigation-*:2.8.0-beta07 viene ritirata. La versione 2.8.0-beta07 contiene questi commit.

Problemi noti

  • A causa di b/358137294, solo le enumerazioni nidificate in un'altra classe sono supportate immediatamente. Gli enum di primo livello saranno supportati nella prossima release.

Correzioni di bug

  • Quando si naviga verso destinazioni duplicate o condivise, la navigazione dà la priorità alla destinazione corrispondente più vicina alla posizione attuale nel grafico. (Ic89a4, b/352006850)
  • La navigazione in safe args ora ha aggiunto un nuovo NavType.EnumType. Ciò significa che i tipi Enum non richiedono più NavType personalizzati. Tieni presente che il Enum di SerialName deve essere il nome completo predefinito. (I66d22, b/346475493)
  • La navigazione in Safe Args ha aggiunto il supporto integrato per i tipi di argomenti Nullable,tra cui Int?, Long?, Float?, Boolean? e Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • L'startDestination di NavGraph ora utilizzerà i valori degli argomenti predefiniti se la route startDestination passata a NavGraph è esattamente uguale a startDestination.route. (I13762, b/354046047)

Versione 2.8.0-beta06

24 luglio 2024

androidx.navigation:navigation-*:2.8.0-beta06 viene ritirata. La versione 2.8.0-beta06 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui i controlli lint WrongStartDestinationType non verificavano la presenza di oggetti Companion nel tipo di classe passato, impedendo a lint di rilevare l'errore. (I92b09)

Versione 2.8.0-beta05

10 luglio 2024

androidx.navigation:navigation-*:2.8.0-beta05 viene ritirata. La versione 2.8.0-beta05 contiene questi commit.

Correzioni di bug

  • Correzione dell'arresto anomalo della navigazione singleTop quando NavGraphs nidificati condividono lo stesso percorso startDestination. (I17b94, b/294408596)

Versione 2.8.0-beta04

26 giugno 2024

androidx.navigation:navigation-*:2.8.0-beta04 viene ritirata. La versione 2.8.0-beta04 contiene questi commit.

Correzioni di bug

  • La navigazione ora supporta la navigazione con stringhe vuote negli argomenti del percorso. (Ic5dbd, b/339481310)
  • Migliora il messaggio di errore per i serializzatori personalizzati dichiarati direttamente nei campi della classe tramite @Serializable(with =...) per chiarire che al momento questa funzionalità non è supportata. (I052b0, b/341319151)
  • L'API di test SavedStateHandleFactory ora può essere utilizzata in test non Android, ma Robolectric dovrà supportare l'analisi degli argomenti con i bundle. (I76cdc, b/340966212)
  • È stato risolto il problema di arresto anomalo dovuto al ripristino dello stato durante la ripresa dell'app dopo l'interruzione del processo con l'utilizzo della navigazione type-safe in Compose. (Ia8f38, b/341801005)
  • È stato risolto un problema in Navigation Compose per cui, dopo aver annullato il gesto di indietro predittivo, l'NavBackStackEntry a cui torna l'utente non torna mai allo stato del ciclo di vita RESUMED. In questo modo, la destinazione di ritorno viene animata correttamente anziché tornare in posizione dopo uno scorrimento. (I97a0c, b/346608857)
  • Quando utilizzi la funzionalità Indietro predittivo con Navigation Compose, la destinazione che viene visualizzata ora avrà l'ordine Z corretto, con un'animazione corretta sopra la destinazione in arrivo. (I2077b, b/345993681)

Versione 2.8.0-beta03

12 giugno 2024

androidx.navigation:navigation-*:2.8.0-beta03 viene ritirata. La versione 2.8.0-beta03 contiene questi commit.

Modifiche alle API

  • CollectionNavType ha un nuovo metodo di riepilogo emptyCollection(). Esegui l'override per gestire una raccolta vuota passata come argomento. (Ie4d84, b/341723133)

Correzioni di bug

  • È stata aggiunta la documentazione su NavType.serializeAsValue e serializeAsValues per evidenziare che gli output finali devono essere codificati come URI. (Ida6bd, b/344943214)
  • È stato risolto l'arresto anomalo durante la chiamata di toRoute<T> con un argomento CollectionNavType null. Quando si naviga con un CollectionNavType null, l'argomento di output sarà il valore predefinito dichiarato nella classe Serializable o il valore restituito di emptyCollection() se non è presente alcun valore predefinito. (I84158, Id630f, b/342672856)

Versione 2.8.0-beta02

29 maggio 2024

androidx.navigation:navigation-*:2.8.0-beta02 viene ritirata. La versione 2.8.0-beta02 contiene questi commit.

Correzioni di bug

  • È stato corretto l'arresto anomalo di ClassCastException quando si utilizza NavBackStackEntry.toRoute con un NavType personalizzato che ammette valori nulli. (I1c29b, b/342239473)
  • Risolti i problemi di ripristino dello stato dello stack indietro di navigazione causati dal tentativo di ripristinare una voce dello stack indietro non raggiungibile tramite ID dalla destinazione corrente. Poiché le route sono supportate dagli ID, anche le destinazioni create con le route sono state interessate. Inoltre, è stato corretto un arresto anomalo causato dalla chiamata di clearBackStack() che presentava lo stesso problema di base. (I423c3, b/339908057)

Versione 2.8.0-beta01

14 maggio 2024

androidx.navigation:navigation-*:2.8.0-beta01 viene ritirata. La versione 2.8.0-beta01 contiene questi commit.

Modifiche alle API

  • SavedStateHandle.toRoute() ora accetta un parametro typeMap per i tipi di argomenti personalizzati. (Ie39fb, b/339026523)
  • È stata aggiunta un'API di test a navigation-testing per creare un SavedStateHandle da un oggetto serializzabile Kotlin. (Id4867, b/339080702)

Correzioni di bug

  • Sono state aggiunte le documentazioni dei parametri mancanti per le funzioni DSL Kotlin di Navigation. (I26a36)

Versione 2.8.0-alpha08

1° maggio 2024

androidx.navigation:navigation-*:2.8.0-alpha08 viene ritirata. La versione 2.8.0-alpha08 contiene questi commit.

Safe Args in Navigation Compose

Questa funzionalità utilizza Kotlin Serialization per consentirti di definire le destinazioni nel grafico di navigazione tramite oggetti e classi di dati type-safe:

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

Per ulteriori informazioni, consulta il post del blog Navigazione Sicurezza dei tipi di composizione di Meet.

Nuove funzionalità

  • L'artefatto navigation-fragment-compose ora fornisce una composizione LocalFragment locale per i metodi componibili all'interno di un ComposableFragment. (If35e5)
  • NavType ora supporta di serie gli elenchi di numeri interi, stringhe, valori booleani, numeri in virgola mobile e numeri interi lunghi. (I4b6dd, Ia914c, b/188693139)

Versione 2.8.0-alpha07

17 aprile 2024

androidx.navigation:navigation-*:2.8.0-alpha07 viene ritirata. La versione 2.8.0-alpha07 contiene questi commit.

Nuove funzionalità

  • Aggiunge un nuovo artefatto navigation-fragment-compose che include un'alternativa ComposableNavHostFragment a NavHostFragment che ti consente di aggiungere destinazioni composable ai tuoi file XML di navigazione. Ogni destinazione composable deve essere espressa come metodo @Composable di primo livello senza argomenti, il cui nome completo viene utilizzato come attributo android:name in ogni destinazione. Quando si passa a una di queste destinazioni, viene creato un frammento contenitore per visualizzare i contenuti componibili. (I0ef2e, b/265480755)

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

Modifiche alle API

  • È proseguito il supporto di Safe Args in Navigation Compose utilizzando un approccio basato su Kotlin Serialization. Queste API non sono state completate e sono contrassegnate con l'annotazione ExperimentalSafeArgsApi. Questa annotazione verrà rimossa quando l'intera superficie API sarà completata in una release futura. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)

Versione 2.8.0-alpha06

3 aprile 2024

androidx.navigation:navigation-*:2.8.0-alpha06 viene ritirata. La versione 2.8.0-alpha06 contiene questi commit.

Modifiche alle API

Correzioni di bug

  • NavHost ora viene utilizzato Alignment.TopStart come argomento contentAlignment predefinito. In questo modo, l'impostazione è in linea con quella predefinita per AnimatedContent e vengono corretti alcuni casi di transizione di scala imprevista dal centro. (I09e72, b/330111602)
  • Quando scorri con il gesto di indietro predittivo mentre utilizzi Navigation Compose, l'NavHost ora completa correttamente la transizione personalizzata anziché terminarla immediatamente. (I99017, b/327292110)

Versione 2.8.0-alpha05

20 marzo 2024

androidx.navigation:navigation-*:2.8.0-alpha05 viene ritirata. La versione 2.8.0-alpha05 contiene questi commit.

Nuove funzionalità

  • Ora puoi passare argomenti a NavGraph's startDestination direttamente nella route startDestination senza fare affidamento a defaultValue. Ciò vale anche per NavGraph startDestinations nidificati. (I0e0b5, b/109505019, b/188693139)

Modifiche alle API

  • È stata aggiunta una nuova classe astratta CollectionNavType<T>, una sottoclasse di NavType<T> per gli argomenti basati su raccolte come elenchi, array e mappe. (Ic6d63, b/188693139)
  • Tutti gli array NavType predefiniti (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType e StringArrayType) ora sono di tipo CollectionNavType (Idcf79, b/188693139)
  • NavType ora fornisce una nuova API valueEquals aperta che determina se due valori dello stesso tipo sono uguali tra loro. (I6cb97, b/327229511)

Correzioni di bug

  • I parametri di query nei link diretti ora consentono valori sotto forma di parentesi graffe intorno al nome dell'argomento (ad es. {argName}) come valori validi per NavTypes basati su stringhe. In questo modo viene risolto un problema per cui un valore di questo tipo veniva considerato non valido (o assente) per tutti i tipi. (I18302, b/327274038)
  • Le funzioni NavController che supportano le route, come navigate o popBackStack, ora possono corrispondere correttamente alle route compilate con argomenti di Array NavTypes. (Iea805, b/327229511)

Versione 2.8.0-alpha04

6 marzo 2024

androidx.navigation:navigation-*:2.8.0-alpha04 viene ritirata. La versione 2.8.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Ora puoi specificare SizeTranform per le transizioni in Navigation Compose definendole come parte dell'inizializzazione delle funzioni composable e/o navigation. (I91062, b/296912651)

Correzioni di bug

  • È stato risolto un problema per cui NavHost in Navigazione composizione non mostrava correttamente la transizione quando si utilizzava il pulsante Indietro del sistema senza un gesto. (Iceeae, b/325998468)

Versione 2.8.0-alpha03

21 febbraio 2024

androidx.navigation:navigation-*:2.8.0-alpha03 viene ritirata. La versione 2.8.0-alpha03 contiene questi commit.

Modifiche alle API

  • NavBackStackEntry.savedStateHandle ora è contrassegnato come @MainThread perché utilizza codice che deve comunque trovarsi nel thread principale. (Ibb988, b/299523245)

Correzioni di bug

  • È stato risolto un problema in Navigation che causava la creazione di NavGraph ViewModel DESTROYED troppo presto perché ViewModel della voce associata non faceva parte dello stato salvato. (Ib6bb7, b/317581849)

Aggiornamento delle dipendenze

Versione 2.8.0-alpha02

7 febbraio 2024

androidx.navigation:navigation-*:2.8.0-alpha02 viene ritirata. La versione 2.8.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Navigation Compose ora supporta la funzionalità Indietro predittivo in-app tramite le nuove API SeekableTransitionState di compose-animation. In questo modo, puoi utilizzare il gesto Indietro per visualizzare la destinazione precedente con la transizione personalizzata prima di decidere se completare la transazione tramite il gesto completato o annullarla. (I8b8e9)

Versione 2.8.0-alpha01

24 gennaio 2024

androidx.navigation:navigation-*:2.8.0-alpha01 viene ritirata. La versione 2.8.0-alpha01 contiene questi commit.

Correzioni di bug

  • È stata corretta la perdita di BackStackState in cui più chiamate saveState a una destinazione comportavano il salvataggio di più stati, ma solo il primo poteva essere ripristinato. (I598b0, b/309559751)
  • Risolto un problema per cui gli argomenti non stringa non venivano visualizzati correttamente quando si utilizzavano gli helper NavigationUI per compilare il titolo delle barre delle app. (#636, b/316676794)

Aggiornamento delle dipendenze

Contributo esterno

  • Grazie a SimonMarquis per aver risolto il problema di visualizzazione per gli argomenti non stringa quando si utilizzano gli helper NavigationUI per compilare il titolo delle barre delle app.

Versione 2.7.7

Versione 2.7.7

7 febbraio 2024

androidx.navigation:navigation-*:2.7.7 viene ritirata. La versione 2.7.7 contiene questi commit.

Correzioni di bug

  • Portato da Navigation 2.8.0-alpha01: è stata corretta la perdita di BackStackState in cui più chiamate saveState() su un singolo NavBackStackEntry comportavano il salvataggio di più stati, ma solo il primo stato salvato poteva essere ripristinato. (I598b0, b/309559751)
  • Portato da Navigazione 2.8.0-alpha01: è stato risolto un problema per cui gli argomenti non stringa non venivano visualizzati correttamente quando si utilizzavano gli helper NavigationUI per compilare il titolo delle barre delle app. (#636, b/316676794)

Contributo esterno

  • Grazie a SimonMarquis per aver risolto il problema di visualizzazione per gli argomenti non stringa quando si utilizzano gli helper NavigationUI per compilare il titolo delle barre delle app.

Versione 2.7.6

Versione 2.7.6

13 dicembre 2023

androidx.navigation:navigation-*:2.7.6 viene ritirata. La versione 2.7.6 contiene questi commit.

Correzioni di bug

  • La funzione NavGraph equals() ora considera correttamente i nodi dell'altro grafico anziché solo quello chiamante. In questo modo, i grafici con nodi con ID diversi non verranno più considerati uguali (I401cb, b/311414915).

Versione 2.7.5

Versione 2.7.5

1° novembre 2023

androidx.navigation:navigation-*:2.7.5 viene ritirata. La versione 2.7.5 contiene questi commit.

Miglioramenti delle prestazioni

  • È stato migliorato notevolmente il rendimento (in termini di tempo e numero di allocazioni) del confronto tra due grafici. Ciò significa che chiamate come setGraph, che confrontano internamente il nuovo grafico con quello esistente, sono molto più veloci e comportano un numero inferiore di frame saltati. Grazie a Michał Z per l'analisi approfondita che ha portato a questo miglioramento. (I6ad62)
  • NavHost ora eseguirà il rendering della destinazione iniziale al primo passaggio di composizione, senza dover attendere il secondo passaggio per leggere lo stato aggiornato. (I439a7, b/304852206)

Correzioni di bug

  • È stato risolto un problema per cui lo stack precedente veniva rimosso se chiamavi setGraph più di una volta con lo stesso identico grafico solo se nel grafico era presente una destinazione che conteneva un'azione che collegava due destinazioni. (Ieaed7)
  • Le finestre di dialogo a cui è stato eseguito l'accesso e che sono state chiuse in rapida successione non verranno più visualizzate nell'elenco di NavController.visibleEntries. (I67586, b/287969970)
  • Quando una voce viene visualizzata in primo piano e viene seguita da una modifica della configurazione, il ViewModel della voce ora viene cancellato correttamente se saveState è false. (Idf242, b/298164648)
  • È stato risolto un problema per cui NavController poteva gestire lo stesso link diretto più di una volta se lo stack precedente era completamente vuoto prima di una modifica alla configurazione o di una chiamata a setGraph solo quando l'intent in entrata aveva impostato il flag FLAG_ACTIVITY_NEW_TASK. (I73c7f)

Aggiornamenti delle dipendenze

  • La navigazione con i frammenti ora dipende da Fragment 1.6.2, che risolve un problema per cui le istanze ViewModel dei frammenti nidificati non venivano cancellate quando veniva chiamato clearBackStack.

Versione 2.7.4

Versione 2.7.4

4 ottobre 2023

androidx.navigation:navigation-*:2.7.4 viene ritirata. La versione 2.7.4 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto il supporto di popUpTo per utilizzare le route con argomenti per tornare a una voce specifica che utilizza esattamente questi argomenti, in linea con il supporto disponibile in popBackStack. (I731f4, b/299255572)

Correzioni di bug

  • È stato risolto il problema a causa del quale l'interruzione di una navigazione con un'altra navigazione con popUpTo causava l'arresto anomalo di FragmentNavigator. (I3c848, b/301887045)
  • È stato risolto il problema per cui la pressione del pulsante Indietro del sistema non aggiornava correttamente currentDestination in modo che corrispondesse al fragment visualizzato. (Id0d6c, b/289877514)
  • Il ciclo di vita di DialogFragment ora passerà correttamente allo stato RESUMED quando la finestra di dialogo sopra di esso verrà chiusa. (I88f0d, b/301811387)

Versione 2.7.3

Versione 2.7.3

20 settembre 2023

androidx.navigation:navigation-*:2.7.3 viene ritirata. La versione 2.7.3 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema in Navigazione con frammenti che causava la presenza di voci errate nell'elenco visibleEntries. (I5caa9, b/288520638)
  • È stato risolto un problema che impediva alla destinazione della finestra mobile (ad es. Dialogs, Bottomsheets e così via) di ricevere un callback del ciclo di vita RESUMED. (I3b866, b/287505132)

Versione 2.7.2

Versione 2.7.2

6 settembre 2023

androidx.navigation:navigation-*:2.7.2 viene ritirata. La versione 2.7.2 contiene questi commit.

Correzioni di bug

  • La navigazione ora dipende da Lifecycle 2.6.2, correggendo un'interazione tra rememberSaveable e NavHost di Navigation Compose che causava il mancato ripristino corretto dello stato rememberSaveable delle destinazioni e di qualsiasi istanza SavedStateHandle di ViewModel di proprietà dopo l'interruzione e la ricreazione del processo. (b/298059596, b/289436035)
  • È stato risolto un problema che si verificava quando venivano visualizzate più finestre di dialogo in Navigation Compose contemporaneamente, per cui le finestre di dialogo parzialmente oscurate (ad esempio, non la finestra di dialogo in primo piano) si trovavano nello stato del ciclo di vita CREATED anziché nello stato STARTED. (aosp/2728520, b/289257213)
  • È stato risolto un problema che si verificava quando venivano mostrate più finestre di dialogo in Navigation Compose contemporaneamente, per cui la chiusura della finestra di dialogo in primo piano causava il blocco della nuova finestra di dialogo in primo piano nello stato del ciclo di vita STARTED anziché il passaggio corretto a RESUMED. (aosp/2629401, b/286371387)
  • Navigation Safe Args non istanzia più il suo task in modo eager se non viene effettivamente eseguito. (I0e385, b/260322841)

Aggiornamento delle dipendenze

  • La composizione della navigazione ora dipende da Compose 1.5.1.

Versione 2.7.1

Versione 2.7.1

23 agosto 2023

androidx.navigation:navigation-*:2.7.1 viene ritirata. La versione 2.7.1 contiene questi commit.

Correzioni di bug

  • Risolti problemi di navigazione con la composizione in cui, utilizzando un Scaffold, era possibile ricevere un errore per il tentativo di accesso a un Lifecycle.State.DESTROYED ViewModel. (I1dc11, b/268422136)

Versione 2.7.0

Versione 2.7.0

9 agosto 2023

androidx.navigation:navigation-*:2.7.0 viene ritirata. La versione 2.7.0 contiene questi commit.

Modifiche importanti dalla versione 2.6.0

Animazioni di Accompanist

Ora che AnimatedContent è stabile, abbiamo potuto spostare il codice da Animazione di navigazione di accompagnamento di nuovo in Navigation Compose.

Ciò significa che tutto il supporto per l'impostazione di transizioni personalizzate esistente in AnimatedNavHost è supportato direttamente in NavHost.

Non verranno apportate ulteriori modifiche all'animazione di navigazione di Accompanist e verrà ritirata a breve, insieme alle indicazioni su come eseguire la migrazione di nuovo a Navigation Compose. Tuttavia, sarà l'inverso della guida alla migrazione e non saranno necessarie altre modifiche all'API se utilizzi già l'ultima versione alpha di Accompanist (0.31.2-alpha). (b/197140101)

Correzioni di bug

  • NavHost in Navigation Compose ora intercetta correttamente le chiamate di sistema anche dopo che l'attività è stata INTERROTTA e RIPRESA. (Icb6de, b/279118447)

Aggiornamenti delle dipendenze

  • La navigazione ora dipende da Compose 1.5.0 anziché da 1.1.0.

Versione 2.7.0-rc01

26 luglio 2023

androidx.navigation:navigation-*:2.7.0-rc01 viene ritirata. La versione 2.7.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui le espressioni lambda EnterTransition e ExitTransition create nell'ambito di NavHost potrebbero rimanere in memoria anche dopo la rimozione di NavHost dalla composizione. (I893d0)

Problemi noti

  • Esiste un problema con Navigation 2.6.x che, durante la navigazione con popUpTo, può causare un IllegalArgumentException. È possibile che questa eccezione possa essere evitata ristrutturando il grafico, in modo simile al consiglio suggerito qui. (b/287133013)

Versione 2.7.0-beta02

28 giugno 2023

androidx.navigation:navigation-*:2.7.0-beta02 viene ritirata. La versione 2.7.0-beta02 contiene questi commit.

Correzioni di bug

  • Navigation Compose ora ha l'ordine Z corretto per le transizioni personalizzate che utilizzano la navigazione con l'opzione popUpTo.(/Ib1c3a, b/285153947)

Versione 2.7.0-beta01

7 giugno 2023

androidx.navigation:navigation-*:2.7.0-beta01 viene ritirata. La versione 2.7.0-beta01 contiene questi commit.

Correzioni di bug

  • NavHost in Navigazione Scrivi ora intercetta correttamente le chiamate di sistema anche dopo che Activity è stato STOPPED e RESUMED. (Icb6de, b/279118447)

Versione 2.7.0-alpha01

24 maggio 2023

androidx.navigation:navigation-*:2.7.0-alpha01 viene ritirata. La versione 2.7.0-alpha01 contiene questi commit.

Animazioni di Accompanist

Ora che AnimatedContent è stabile, abbiamo potuto spostare il codice da Animazione di navigazione di accompagnamento di nuovo in Navigation Compose.

Ciò significa che tutto il supporto per l'impostazione di transizioni personalizzate esistente in AnimatedNavHost è supportato direttamente in NavHost.

Non verranno apportate ulteriori modifiche all'animazione di navigazione di Accompanist e verrà ritirata a breve, insieme alle indicazioni su come eseguire la migrazione di nuovo a Navigation Compose. Tuttavia, sarà l'inverso della guida alla migrazione e non saranno necessarie altre modifiche all'API se utilizzi già l'ultima versione alpha di Accompanist (0.31.2-alpha). (b/197140101)

Correzioni di bug

  • Da Navigazione 2.6.0-rc02: è stato risolto un problema relativo alla navigazione nei fragment in cui la navigazione con popUpTo e l'eliminazione di un fragment dallo stack precedente senza ricreare la relativa visualizzazione causava l'interruzione del funzionamento del pulsante Indietro del sistema. (Ieb8d4, b/281726455)

Aggiornamenti delle dipendenze

  • La navigazione ora dipende da Compose 1.5.0-beta01.

Versione 2.6.0

Versione 2.6.0

7 giugno 2023

androidx.navigation:navigation-*:2.6.0 viene ritirata. La versione 2.6.0 contiene questi commit.

Modifiche importanti alla navigazione dalla versione 2.5.0

  • NavBackStackEntry's arguments e arguments passati a un OnDestinationChangedListener ora sono solo una copia degli argomenti immutabili creati quando hai raggiunto la destinazione. Ciò significa che le modifiche apportate a questi bundle non verranno applicate agli accessi successivi a arguments o ad altre istanze di OnDestinationChangedListener.
  • NavDeepLink ora supporta i valori predefiniti per gli array, il che consente il supporto di parametri di query ripetuti che verranno mappati al tipo di array dell'argomento. NavType ora include anche un metodo predefinito che può essere sottoposto a override per combinare due valori analizzati.
  • Ora le sottoclassi personalizzate di NavType possono eseguire l'override di serializeAsValue per serializzare un valore in una stringa, consentendo la serializzazione e la deserializzazione (tramite parseValue) di essere completamente incapsulate nella classe NavType. StringType ora esegue l'override di questo metodo per chiamare Uri.encode sul String specificato.

Modifiche importanti a Navigation Compose dalla versione 2.5.0

  • Quando visualizzi l'anteprima di un elemento componibile con NavHost, ora viene mostrato startDestination di NavGraph per impostazione predefinita.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) ora supportano tutti i percorsi con argomenti compilati parzialmente o completamente. Tieni presente che gli argomenti devono corrispondere esattamente a quelli della voce.
  • Il tentativo di creare un NavDeepLink vuoto utilizzando il DSL Kotlin navDeepLink ora genera un avviso lint che indica che un link diretto deve avere un URI, un'azione e/o un tipo MIME per essere valido.

Modifiche importanti alla navigazione con i fragment dalla versione 2.5.0

  • NavHostFragment non intercetta più il pulsante Indietro del sistema. In questo modo, l'FragmentManager sottostante può gestire il pulsante Indietro del sistema. Ciò consente a Fragment 1.7.0-alpha01 e versioni successive di fornire un'animazione di indietro predittivo in-app sui dispositivi Android U.
  • Quando utilizzi Navigation con i fragment, il tentativo di eseguire manualmente un FragmentTransaction che aggiunge un fragment allo stack di attività di FragmentManager ora genererà un IllegalArgumentException. Devi sempre aggiungere i frammenti tramite l'API navigate().
  • Quando utilizzi la stringa esatta ${applicationId} come segnaposto negli attributi app:data e app:dataPattern nell'elemento activity di un file XML di navigazione, il segnaposto viene compilato automaticamente con packageName del contesto al momento dell'inflazione.
  • FragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di NavBackStackEntries. Ciò significa che l'NavBackStackEntry Lifecycle ora attenderà il completamento degli effetti speciali di entrata e uscita del frammento prima di spostare il Lifecycle.State finale.
  • DialogFragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di NavBackStackEntries. Ciò significa che NavBackStackEntry Lifecycle ora attenderà che DialogFragment Lifecycle passi a DESTROYED prima di passare a DESTROYED.
  • NavHostFragment ora ti consente di recuperare NavController non appena NavHostFragment viene allegato a FragmentManager, anziché solo dopo onCreate().
  • Il supporto della navigazione per i moduli delle funzionalità dinamiche ora dipende dalla libreria granulare Play Feature Delivery.
  • Ora Navigation Safe Args dipende dal plug-in Android per Gradle versione 7.3.0. Ciò significa che ora è compatibile solo con le versioni 7.3.0 e successive.

Modifiche importanti a NavigationUI dalla versione 2.5.0

  • Quando passi l'ID di un grafico di navigazione a AppBarConfiguration (ad esempio tramite un Menu), NavigationUI ora considera solo la destinazione iniziale del grafico di navigazione come destinazione di primo livello, anziché contrassegnare erroneamente ogni destinazione all'interno del grafico come destinazione di primo livello. Il comportamento di trasmissione dell'ID di una singola destinazione non è cambiato. Questa stessa funzionalità è disponibile per il tuo codice tramite la nuova funzione isTopLevelDestination su AppBarConfiguration.
  • Le integrazioni setupWithNavController in NavigationUI per l'utilizzo della barra delle app superiore ora analizzano i valori R.string per gli argomenti ReferenceType trovati in android:label nei relativi valori stringa anziché restituire l'intero risorsa generato automaticamente.
  • NavigationUI ora fornisce log quando non riesce a navigare tramite un MenuItem selezionato.

Versione 2.6.0-rc02

24 maggio 2023

androidx.navigation:navigation-*:2.6.0-rc02 viene ritirata. La versione 2.6.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo alla navigazione nei frammenti per cui la navigazione con popUpTo e l'estrazione di un frammento dallo stack precedente senza ricreare la relativa visualizzazione causava l'interruzione del funzionamento del pulsante Indietro del sistema. (Ieb8d4, b/281726455)

Versione 2.6.0-rc01

10 maggio 2023

androidx.navigation:navigation-*:2.6.0-rc01 viene ritirata. La versione 2.6.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema in Navigation con i fragment in cui la rimozione di un fragment tramite navigate con popUpTo nel callback del ciclo di vita onResume() causava un IllegalStateException. (I21884, b/279644470)

Versione 2.6.0-beta01

19 aprile 2023

androidx.navigation:navigation-*:2.6.0-beta01 viene ritirata. La versione 2.6.0-beta01 contiene questi commit.

Nuove funzionalità

  • NavBackStackEntry ora fornisce un'implementazione personalizzata di toString. (Iff00b)

Correzioni di bug

  • Quando utilizzi Navigation con i fragment, il tentativo di eseguire manualmente un FragmentTransaction che aggiunge un fragment allo stack di attività di FragmentManager ora genererà un IllegalArgumentException. Devi sempre aggiungere i frammenti tramite l'API navigate(). (I6d38e)
  • Quando nello stesso frame è presente un navigate che aggiunge una voce e un popBackStack che la rimuove, la prima voce risultante nello stack precedente tornerà sempre a RESUMED Lifecycle.State. (Id8067, b/276495952)

Versione 2.6.0-alpha09

5 aprile 2023

androidx.navigation:navigation-*:2.6.0-alpha09 viene ritirata. La versione 2.6.0-alpha09 contiene questi commit.

Correzioni di bug

  • Sono stati corretti i controlli per il percorso non valido in modo che, se un NavDestination contiene NavArgument non annullabili, il percorso di questa destinazione deve contenere segnaposto per gli argomenti con lo stesso nome di NavArgument non annullabili. (Ic62bf, b/274697949)
  • Le navigazioni di deep link basate su Action/MimeType ora non riusciranno se l'operazione di navigazione non include un NavArgument non nullabile richiesto da NavDestination a cui corrisponde Action/MimeType. (Ibfa17, b/271777424)
  • Quando NavController imposta un grafico con lo stesso percorso e le stesse destinazioni del grafico precedente, ora sostituisce correttamente i nodi del grafico corrente e le destinazioni dello stack precedente con nuove istanze. Questo problema viene risolto quando si utilizza onLaunchSingleTop senza salvare lo stato in Navigation Compose. Viene inoltre corretto un errore per cui la navigazione verso le destinazioni associate al grafico radice crea uno stack di cronologia errato. (I5bc58, b/275258161, b/275407804)

Versione 2.6.0-alpha08

22 marzo 2023

androidx.navigation:navigation-*:2.6.0-alpha08 viene ritirata. La versione 2.6.0-alpha08 contiene questi commit.

Nuove funzionalità

  • NavHostFragment ora ti consente di recuperare NavController non appena NavHostFragment viene allegato a FragmentManager, anziché solo dopo onCreate(). (Ic6382, b/220186282)

Correzioni di bug

  • È stato corretto un NullPointerException quando si estrae un grafico nidificato che include un argomento non annullabile. (6b3581, b/249988437)
  • Quando utilizzi il pulsante Indietro del sistema dopo aver eseguito una navigazione con popUpTo, lo stato di NavController viene visualizzato nella voce corretta. (I3a8ec, b/270447657)
  • FragmentNavigator ora visualizzerà correttamente le voci quando lo stack precedente viene estratto tramite il pulsante Indietro del sistema o popBackStack() e se la transazione utilizza o meno effetti per il frammento. (I81bdf)
  • L'aggiunta di frammenti a FragmentNavigator di FragmentManager senza utilizzare la navigazione non causerà più un arresto anomalo. (b17204, b/274167493)

Aggiornamenti delle dipendenze

Versione 2.6.0-alpha07

8 marzo 2023

androidx.navigation:navigation-*:2.6.0-alpha07 viene ritirata. La versione 2.6.0-alpha07 contiene questi commit.

Correzioni di bug

  • Le varianti delle API getBackStackEntry, popBackStack e clearBackStack che accettano itinerari ora accettano pattern di itinerari con argomenti e parametri di query annullabili (I22294, b/269302500)
  • È stato risolto un problema per cui la chiamata di clearBackStack() da NavController non cancellava lo stato salvato nel gestore dei fragment associato allo stack precedente cancellato. (Ic1cce, b/271190202)
  • È stata corretta una regressione nella versione 2.6.0-alpha06 che causava l'evidenziazione del MenuItem errato in BottomNavigationView quando si utilizzava il pulsante Indietro del sistema tra le schede. (I634f6, b/270447657)
  • È stata corretta la regressione nella versione 2.6.0-alpha06 che impediva lo spostamento degli NavBackStackEntry nello stato RESUMED quando venivano utilizzati gli Animation. (Ib3589, b/269646882)

Versione 2.6.0-alpha06

22 febbraio 2023

androidx.navigation:navigation-*:2.6.0-alpha06 viene ritirata. La versione 2.6.0-alpha06 contiene questi commit.

Nuove funzionalità

  • Quando visualizzi l'anteprima di un elemento componibile con NavHost, ora viene mostrato startDestination di NavGraph per impostazione predefinita. (I2b89f)

Modifiche alle API

  • Tutti gli overload di NavController navigate ora sono annotati con @MainThread per garantire che vengano chiamati sul thread principale. (I2c0b0, b/263427111)

Correzioni di bug

  • È stato corretto un arresto anomalo che si verificava durante il tentativo di navigazione durante l'utilizzo della navigazione dinamica dei fragmenti. (I3ee29, b/268360479)
  • È stato corretto un bug a causa del quale il passaggio a un altro frammento tramite il pulsante Indietro del sistema non aggiorna la barra inferiore con l'elemento selezionato corretto (If559f, b/269044426)

Problemi noti

  • Quando si utilizza Navigation con i fragment, il ciclo di vita di NavBackStackEntry non raggiunge RESUMED quando si utilizzano le API Animation. (b/269646882)
  • Quando utilizzi Navigation con i frammenti e navighi con BottomNavigation, se tenti di ripristinare uno stack precedente con più voci, BottomMenuItem non viene aggiornato correttamente. (b/270447657)
  • Quando utilizzi Navigation with Fragments, dopo il ripristino dello stato NavBackStackEntry Lifecycle non viene DESTROYED quando il relativo frammento è DESTROYED . (b/270610768)

Versione 2.6.0-alpha05

8 febbraio 2023

androidx.navigation:navigation-*:2.6.0-alpha05 viene ritirata. La versione 2.6.0-alpha05 contiene questi commit.

Nuove funzionalità

  • NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) ora supportano tutti i percorsi con argomenti compilati parzialmente o completamente. Tieni presente che gli argomenti devono corrispondere esattamente a quelli della voce. (Iebd28, Ic678c, I3b37b, b/257514373)
  • FragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di NavBackStackEntries. Ciò significa che l'NavBackStackEntry Lifecycle ora attenderà il completamento degli effetti speciali di entrata e uscita del frammento prima di spostare il Lifecycle.State finale. (I3cb19, b/238686802)
  • DialogFragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di NavBackStackEntries. Ciò significa che NavBackStackEntry Lifecycle ora attenderà che DialogFragment Lifecycle passi a DESTROYED prima di passare a DESTROYED. (I53ee5, b/261213893)

Modifiche alle API

  • NavigatorState ora fornisce l'API prepareForTransition per consentire agli Navigator di spostare gli NavBackStackEntries negli Lifecycle.State intermedi. (I42c21, b/238686802)
  • Ora puoi accedere allo stack precedente associato a un NavGraphNavigator o a un ComposeNavigator tramite una proprietà backstack. Ora ComposeNavigator espone anche il callback onTransitionComplete() per contrassegnare un NavBackStackEntry che ha eseguito un'operazione di navigazione o popBackStack come completata. (I02062, I718db, b/257519195)

Correzioni di bug

  • Lo stato del navigatore ora non esegue alcuna operazione quando vengono utilizzate le API push/popWithTransition e la voce è già in fase di gestione. (Iadbfa, b/261213893)
  • Quando utilizzi launchSingleTop con un NavGraph nidificato, tutte le destinazioni a partire dalla destinazione originale fino al relativo startDestination verranno aggiunte correttamente solo alla parte superiore dello stack indietro. (Id4bea, b/253256629)
  • La navigazione ora sostituirà correttamente l'istanza DialogFragment quando si naviga verso la stessa destinazione con il flag launchSingleTop impostato su true. (I45b5a, b/149572817)
  • Navigation SafeArgs non causerà più un errore di compilazione quando si utilizzano argomenti di esattamente 19 caratteri. (Id60bc, b/257110095)

Versione 2.6.0-alpha04

9 novembre 2022

androidx.navigation:navigation-*:2.6.0-alpha04 viene ritirata. La versione 2.6.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Ora le sottoclassi personalizzate di NavType possono eseguire l'override di serializeAsValue per serializzare un valore in una stringa, consentendo la serializzazione e la deserializzazione (tramite parseValue) di essere completamente incapsulate nella classe NavType. StringType ora esegue l'override di questo metodo per chiamare Uri.encode sul String specificato. (Ie5213, b/247637434)
  • NavigationUI ora fornisce log quando non riesce a navigare tramite un MenuItem selezionato. (I2af5a, b/247730357)

Correzioni di bug

  • I link diretti di navigazione ora vengono analizzati in modo differito anziché durante l'inizializzazione del grafico, il che potrebbe migliorare il rendimento dell'app all'avvio. (Iab0ab)
  • È stato corretto un arresto anomalo causato dalla navigazione verso l'alto dopo il collegamento diretto a una destinazione con argomenti predefiniti nulli. (I51c24, b/243183636)

Aggiornamento delle dipendenze

  • Il supporto della navigazione per i moduli delle funzionalità dinamiche ora dipende dalla libreria granulare Play Feature Delivery. (Ib4ddc)
  • Ora Navigation Safe Args dipende dal plug-in Android per Gradle versione 7.3.0. Ciò significa che ora è compatibile solo con le versioni 7.3.0 e successive. (I47e49)

Versione 2.6.0-alpha03

24 ottobre 2022

androidx.navigation:navigation-*:2.6.0-alpha03 viene ritirata. La versione 2.6.0-alpha03 contiene questi commit.

Correzioni di bug

  • Da Navigazione 2.5.3: NavHost non causerà più un NoSuchElementException quando non è disponibile alcuna destinazione per la composizione di Crossfade. Ora la composizione verrà semplicemente ignorata. (Ieb46e, b/253299416)
  • Da Navigazione 2.5.3: è stato risolto un problema per cui lo stato di composizione salvato (ad es. gli utilizzi di rememberSaveable) non veniva dimenticato e rimosso quando una destinazione veniva estratta dallo stack precedente. (I64949)

Aggiornamenti delle dipendenze

Versione 2.6.0-alpha02

5 ottobre 2022

androidx.navigation:navigation-*:2.6.0-alpha02 viene ritirata. La versione 2.6.0-alpha02 contiene questi commit.

Modifiche al comportamento

  • Quando passi l'ID di un grafico di navigazione a AppBarConfiguration (ad esempio tramite un Menu), NavigationUI ora considera solo la destinazione iniziale del grafico di navigazione come destinazione di primo livello, anziché contrassegnare erroneamente ogni destinazione all'interno del grafico come destinazione di primo livello. Il comportamento di trasmissione dell'ID di una singola destinazione non è cambiato. Questa stessa funzionalità è disponibile per il tuo codice tramite la nuova funzione isTopLevelDestination su AppBarConfiguration. (Ie936e, b/238496771)

Correzioni di bug

  • Il componente navigation:navigation-fragment ora dipende dalla versione 1.5.2 di Fragment. (I00ba4)
  • La voce di menu selezionata non verrà più aggiornata quando si passa a una destinazione FloatingWindow, ad esempio una finestra di dialogo. (I4cde8, b/240308330)

Versione 2.6.0-alpha01

7 settembre 2022

androidx.navigation:navigation-*:2.6.0-alpha01 viene ritirata. La versione 2.6.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Le integrazioni setupWithNavController in NavigationUI per l'utilizzo della barra delle app superiore ora analizzano i valori R.string per gli argomenti ReferenceType trovati in android:label nei relativi valori stringa anziché restituire l'intero risorsa generato automaticamente. (I5f803, b/167959935)
  • NavDeepLink ora supporta i valori predefiniti per gli array, il che consente il supporto di parametri di query ripetuti che verranno mappati al tipo di array dell'argomento. NavType ora include anche un metodo predefinito che può essere sottoposto a override per combinare due valori analizzati. (Id68c3, b/209977108)
  • Quando utilizzi la stringa esatta ${applicationId} come segnaposto negli attributi app:data e app:dataPattern nell'elemento activity di un file XML di navigazione, il segnaposto viene compilato automaticamente con packageName del contesto al momento dell'inflazione. (Iaabde, b/234223561)
  • Il tentativo di creare un NavDeepLink vuoto utilizzando il DSL Kotlin navDeepLink ora genera un avviso lint che indica che un link diretto deve avere un URI, un'azione e/o un tipo MIME per essere valido. (I08d2f, b/154038883)

Modifiche alle API

  • Aggiunta una nuova funzione di estensione NavDestination per analizzare le etichette dinamiche con argomenti nel formato android:label="{arg}" in String. Supporta gli argomenti ReferenceType analizzando i valori R.string nei relativi valori String. (I07d89, b/236269380)

Modifiche al comportamento

  • arguments di NavBackStackEntry e arguments passato a un OnDestinationChangedListener ora sono solo una copia degli argomenti immutabili creati quando hai raggiunto la destinazione. Ciò significa che le modifiche apportate a questi bundle non verranno applicate agli accessi successivi a arguments o ad altre istanze di OnDestinationChangedListener. (I676f5)

Correzioni di bug

  • Da Navigazione 2.5.2: la navigazione dinamica ora tenta correttamente di installare le destinazioni di attività da altri moduli prima di accedervi. (Ia2c16, b/240292838)
  • Da Navigazione 2.5.2: la navigazione ora sostituirà correttamente l'istanza Fragment quando si passa alla stessa destinazione e si imposta il flag launchSingleTop su true. (I5a2f1, b/237374580)
  • Da Navigazione 2.5.2: è stato corretto un IllegalStateException causato dalla navigazione in un grafico a doppia nidificazione che condivide un elemento principale con una nuova destinazione iniziale visualizzata. (I9f7cb, b/243778589)

Versione 2.5

Versione 2.5.3

24 ottobre 2022

androidx.navigation:navigation-*:2.5.3 viene ritirata. La versione 2.5.3 contiene questi commit.

Correzioni di bug

  • NavHost non causerà più un NoSuchElementException quando non è disponibile alcuna destinazione per la composizione di Crossfade. Ora la composizione verrà semplicemente ignorata. (Ieb46e, b/253299416)
  • Risolto un problema per cui lo stato di composizione salvato (ad es. gli utilizzi di rememberSaveable) non veniva dimenticato e rimosso quando una destinazione veniva estratta dallo stack precedente. (I64949)

Versione 2.5.2

7 settembre 2022

androidx.navigation:navigation-*:2.5.2 viene ritirata. La versione 2.5.2 contiene questi commit.

Correzioni di bug

  • La navigazione dinamica ora tenta correttamente di installare le destinazioni Attività da altri moduli prima di accedervi. (Ia2c16, b/240292838)
  • Ora la navigazione sostituirà correttamente l'istanza Fragment quando si passa alla stessa destinazione e si imposta il flag launchSingleTop su true. (I5a2f1, b/237374580)
  • Risolto il problema IllegalStateException causato dalla navigazione in un grafico con doppio livello di nidificazione che condivide un elemento principale con una nuova destinazione iniziale visualizzata. (I9f7cb, b/243778589)

Aggiornamento delle dipendenze

Versione 2.5.1

27 luglio 2022

androidx.navigation:navigation-*:2.5.1 viene ritirata. La versione 2.5.1 contiene questi commit.

Correzioni di bug

  • Navigation Safe Args non causerà più avvisi di ritiro nelle classi generate quando si utilizzano tipi di argomenti personalizzati salvati in un Bundle. (Id86ed, b/237725966)

Aggiornamenti delle dipendenze

Versione 2.5.0

29 giugno 2022

androidx.navigation:navigation-*:2.5.0 viene ritirata. La versione 2.5.0 contiene questi commit.

Modifiche importanti dalla versione 2.4.0

  • Integrazione di CreationExtras: Navigation ora può fornire un ViewModelProvider.Factory stateless tramite Lifecycle 2.5.0 di CreationExtras.

SafeArgs di Navigation

  • Navigation Safe Args ha eseguito l'upgrade della dipendenza Android Gradle Plugin per fare affidamento su 7.0.4, eliminando la compatibilità per le versioni di AGP precedenti a 7.0.
  • È stato aggiunto il supporto per l'attributo build.gradle dello spazio dei nomi da utilizzare al posto di applicationId.

Altre modifiche

  • L'API visibleEntries non è più sperimentale e fornisce una funzione per recuperare tutte le voci la cui destinazione è attualmente visibile in base a NavController.

Versione 2.5.0-rc02

15 giugno 2022

androidx.navigation:navigation-*:2.5.0-rc02 viene ritirata. La versione 2.5.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato corretto un arresto anomalo causato dal passaggio rapido tra le destinazioni in basso quando si utilizza Navigation Compose NavHost. (I3979a, b/234054916)
  • Navigation SafeArgs non andrà più in crash quando si utilizza un applicationIdSuffix e uno spazio dei nomi senza applicationId o quando applicationId e lo spazio dei nomi sono diversi. (I754b1, b/233119646)
  • NavArgument ora ha una funzione toString() personalizzata per mostrare i valori interni dell'argomento. (I900a8)

Versione 2.5.0-rc01

11 maggio 2022

androidx.navigation:navigation-*:2.5.0-rc01 viene ritirata. La versione 2.5.0-rc01 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova regola di lint per avvisare in caso di inserimento di elementi <deeplink> all'interno di elementi <activity> nel file navigation.xml.(Ic15a5, b/178403185)

Correzioni di bug

  • Gli ambiti componibili in NavHost e DialogHost ora vengono eliminati nell'ordine previsto, ovvero i componibili interni vengono eliminati prima di quelli esterni. (I157e6)
  • Navigation SafeArgs ora utilizza PathSensitivity.RELATIVE in ArgumentsGenerationTask per consentire la ricollocazione della cache. Ciò significa che la voce della cache può ora essere riutilizzata da una build CI a una build locale. (I5f67c, b/173420454)
  • La regola di lint UnrememberedGetBackStackEntryDetector è stata aggiornata per garantire che la chiamata remember che circonda la chiamata a getBackStackEntry() passi anche in un oggetto NavBackStackEntry come chiave.(Ib7081, b/227382831)

Versione 2.5.0-beta01

20 aprile 2022

androidx.navigation:navigation-*:2.5.0-beta01 viene ritirata. La versione 2.5.0-beta01 contiene questi commit.

Correzioni di bug

  • DialogNavigator ora utilizza popWithTransition quando esegue una chiamata dismiss(). Questo problema risolve una condizione di competizione quando si utilizza un ViewModel all'interno della destinazione dialog che causava un IllegalStateException quando si chiudeva la finestra di dialogo utilizzando il pulsante Indietro del sistema o toccando al di fuori della finestra di dialogo per uscire. (Id7376, b/226552301)

Aggiornamenti delle dipendenze

  • La navigazione ora dipende dal ciclo di vita 2.5.0-beta01, correggendo un IllegalStateException quando si annida un NavHost all'interno di un altro NavHost in una scheda di navigazione inferiore non principale quando si utilizzano più back stack.

Versione 2.5.0-alpha04

6 aprile 2022

androidx.navigation:navigation-*:2.5.0-alpha04 viene ritirata. La versione 2.5.0-alpha04 contiene questi commit.

Modifiche alle API

Correzioni di bug

  • NavHost ora dipende da visibleEntries di NavController per determinare quali voci comporre. Ciò significa che quando si utilizza NavHost nidificato, l'NavHost interno ora dovrebbe animarsi correttamente. (I4ba2b, b/225394514)
  • visibleEntries StateFlow fornito da NavController ora si basa sullo stato del ciclo di vita massimo della voce anziché sullo stato del ciclo di vita corrente. Ciò significa che anche se il ciclo di vita dell'host di navController scende al di sotto di STARTED, l'elenco delle voci visibili rimane invariato. (I9e2a8, b/225394514)
  • SavedStateViewFactory ora supporta l'utilizzo di CreationExtras anche se è stato inizializzato con un SavedStateRegistryOwner. Se vengono forniti extra, gli argomenti inizializzati vengono ignorati. (I6c43b, b/224844583)
  • NavDeepLink ora può analizzare gli URI con un singolo parametro di query senza valore. (I0efe8, b/148905489)
  • Le stringhe vuote ora sono considerate argomenti validi nei link diretti. (I70a0d, b/217399862)
  • Navigation Safe Args non andrà più in crash quando si utilizzano spazi dei nomi e non è presente alcun AndroidManifest.xml. (I17ccf, b/227229815)

Versione 2.5.0-alpha03

23 febbraio 2022

androidx.navigation:navigation-*:2.5.0-alpha03 viene ritirata. La versione 2.5.0-alpha03 contiene questi commit.

Modifiche alle API

  • Ora puoi passare CreationExtras a by navGraphViewModels per creare un ViewModel. (I29217, b/217618359)

Correzioni di bug

  • NavDeepLinks ora supporta correttamente i caratteri di nuova riga codificati incorporati negli URI di route/link diretti. (I513d1, b/217815060)
  • CreationExtras ora funzionerà correttamente se utilizzato con NavBackStackEntries per creare ViewModels. (I69161, b/217617710)
  • Navigation Safe Args ora supporta l'utilizzo dello spazio dei nomi definito in build.gradle al posto del pacchetto in AndroidManifest. (I659ef, b/217414933)

Versione 2.5.0-alpha02

9 febbraio 2022

androidx.navigation:navigation-*:2.5.0-alpha02 viene ritirata. La versione 2.5.0-alpha02 contiene questi commit.

Correzioni di bug

  • Da Navigazione 2.4.1: ora NavHostFragment imposta correttamente OnBackPressedDispatcher quando si utilizza viewbinding con grafici nidificati. (Ifbb51, b/214577959)
  • Da Navigazione 2.4.1: quando il deep linking avviene tramite più NavGraph nidificati, lo stack indietro ora include correttamente le destinazioni di partenza intermedie. (I504c0, b/214383060)

Versione 2.5.0-alpha01

26 gennaio 2022

androidx.navigation:navigation-*:2.5.0-alpha01 viene ritirata. La versione 2.5.0-alpha01 contiene questi commit.

Nuove funzionalità

Correzioni di bug

  • Risolto un problema per cui l'accesso a un ViewModel creato tramite by navGraphViewModels() da onCreate() di un fragment non andava a buon fine e veniva visualizzato un IllegalStateException. (I8a14d)
  • NavDeepLinks non decodificherà più inutilmente gli argomenti due volte, il che significa che ora gli argomenti corretti vengono passati alla destinazione finale. (I31b0a, b/210711399)

Safe Args

  • Safe Args ora dipende dal plug-in Android per Gradle versione 7.0.4. Ciò significa che Navigation Safe Args non sarà più compatibile con le versioni di Android Studio precedenti alla 7.0, ma ora è compatibile con il plug-in Android per Gradle 7.1.0 e versioni successive. (I41c88, b/213086135, b/207670704)

Versione 2.4.2

Versione 2.4.2

6 aprile 2022

androidx.navigation:navigation-*:2.4.2 viene ritirata. La versione 2.4.2 contiene questi commit.

Correzioni di bug

Versione 2.4.1

Versione 2.4.1

9 febbraio 2022

androidx.navigation:navigation-*:2.4.1 viene ritirata. La versione 2.4.1 contiene questi commit.

Correzioni di bug

  • Ora NavHostFragment imposterà correttamente OnBackPressedDispatcher quando si utilizza viewbinding con grafici nidificati. (Ifbb51, b/214577959)
  • Quando il deep linking avviene tramite più NavGraph nidificati, lo stack precedente ora include correttamente le destinazioni di partenza intermedie. (I504c0, b/214383060)
  • Portato da Navigation 2.5.0-alpha01: è stato risolto un problema per cui l'accesso a un ViewModel creato tramite by navGraphViewModels() dal onCreate() di un Fragment non riusciva e veniva visualizzato un errore IllegalStateException. (I8a14d)
  • Portato da Navigazione 2.5.0-alpha01: NavDeepLinknon decodifica più inutilmente gli argomenti due volte, il che significa che gli argomenti decodificati correttamente vengono ora passati alla destinazione finale. (I31b0a, b/210711399)
  • Portato da Navigation 2.5.0-alpha01: Safe Args ora dipende dal plug-in Android per Gradle versione 7.0.4. Ciò significa che Navigation Safe Args non sarà più compatibile con le versioni di Android Studio precedenti alla 7.0, ma ora è compatibile con il plug-in Android per Gradle 7.1.0 e versioni successive. (I41c88, b/213086135, b/207670704)

Versione 2.4.0

Versione 2.4.0

26 gennaio 2022

androidx.navigation:navigation-*:2.4.0 viene ritirata. La versione 2.4.0 contiene questi commit.

Modifiche importanti dalla versione 2.3.0

  • Tutti gli artefatti di navigazione sono stati riscritti in Kotlin. Ciò ha migliorato l'annullabilità delle classi che utilizzano i generici (come le sottoclassi NavType). Tutte le funzioni di estensione Kotlin che facevano parte degli artefatti -ktx sono state spostate nei rispettivi artefatti principali. Gli artefatti -ktx continueranno a essere pubblicati, ma sono completamente vuoti.
  • L'artefatto navigation-fragment ora contiene un'implementazione predefinita di un layout a due riquadri tramite il nuovo AbstractListDetailFragment. Questo frammento utilizza un SlidingPaneLayout per gestire un riquadro elenco (fornito dalla sottoclasse) e un riquadro dei dettagli, che utilizza un NavHostFragment come implementazione, come mostrato nella nostra implementazione di esempio.
  • Il metodo currentBackStackEntryAsFlow() su NavController fornisce un Flow che viene emesso ogni volta che cambia l'NavBackStackEntry corrente. Questo flusso può essere utilizzato in alternativa alla gestione manuale di un OnDestinationChangedListener.
  • NavController ora offre la possibilità di recuperare un elenco di tutte le istanze NavBackStackEntry visibili come StateFlow tramite la proprietà sperimentale visibleEntries.
  • Ora è possibile estendere la classe NavType per creare NavType personalizzati. I tipi personalizzati sono supportati solo quando crei il grafico di navigazione in modo programmatico, ad esempio tramite Navigation Graph Kotlin DSL.
  • La navigazione ora fornisce le APIfindStartDestination() e getHierarchy() che possono essere utilizzate per implementare NavigationUI personalizzata. findStartDestination() è una funzione di estensione su NavGraph che individua la destinazione di partenza effettiva che verrà visualizzata quando navighi nel grafico, anche se startDestination è a sua volta un NavGraph nidificato. getHierarchy() è una funzione di NavDestination che può essere utilizzata per verificare se una determinata destinazione si trova all'interno della gerarchia di un'altra.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • I metodi NavigationUI che accettavano un BottomNavigationView sono stati aggiornati per accettare invece la relativa superclasse introdotta in Material 1.4.0, NavigationBarView. In questo modo, questi metodi possono essere utilizzati con NavigationRailView.

  • Quando aumenti le dimensioni di un elemento <action> tramite XML, gli attributi di animazione possono utilizzare gli attributi estratti dal tema utilizzando la sintassi app:enterAnim="?attr/transitionEnter".

  • Safe Args ora genera un metodo fromSavedStateHandle() per ogni classe NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

Itinerari di navigazione e Kotlin DSL

Le versioni precedenti di Navigazione si basavano sul fatto che ogni destinazione avesse un ID intero costante che la identificasse in modo univoco dalle destinazioni correlate e consentisse di navigate() a quella destinazione direttamente o tramite un'azione. Sebbene questo sistema continui a essere valido e utile, in particolare nei casi in cui definisci il grafico di navigazione in XML e puoi utilizzare costanti R.id generate automaticamente o Safe Args (che utilizza queste costanti per generare codice in fase di compilazione), questo sistema di numeri interi univoci non acquisisce il significato semantico e l'espressività necessari per supportare grafici completamente dinamici creati in modo programmatico in fase di runtime tramite il DSL Kotlin di Navigation.

Questa release introduce una nuova opzione per identificare in modo univoco una destinazione in un grafico di navigazione in base al suo percorso. Una route è un String che definisce il percorso univoco verso una destinazione. Tutti i metodi Kotlin DSL che accettavano un ID destinazione sono ora obsoleti e sostituiti da un'API equivalente che accetta una route.

Ogni percorso deve essere trattato come la parte "path" di un Uri che definisce la destinazione, ad esempio: home, profile/{userId}, profile/{userId}/friends e così via. Quando l'identità di una destinazione è associata a un contenuto specifico, questi argomenti dinamici devono far parte della route, seguendo le stesse regole dei link diretti impliciti.

Tutte le API NavController che prima accettavano solo un ID ora hanno un overload che accetta un percorso String. Sono inclusi navigate(), popBackStack(), popUpTo() e getBackStackEntry().

Ciò ha avuto alcune implicazioni per le API:

  • La proprietà Kotlin popUpTo in Kotlin DSL è stata ritirata a favore di popUpToId.
  • L'API getStartDestination() è stata ritirata a favore di getStartDestinationId().

A differenza della navigazione per ID, la navigazione per percorso segue le stesse regole dei link diretti impliciti, in quanto puoi navigare direttamente verso qualsiasi destinazione in qualsiasi grafico nidificato, assicurandoti che questi percorsi siano utilizzabili in progetti multimodulo senza aggiungere esplicitamente un link diretto visibile esternamente a ogni destinazione.

Composizione della navigazione

L'artefatto navigation-compose fornisce l'integrazione tra il componente Navigation e Jetpack Compose. Utilizza le funzioni @Composable come destinazioni nella tua applicazione.

Questa release fornisce:

  • Un composable NavHost che ti consente di costruire il grafico di navigazione tramite un DSL Kotlin, utilizzando le destinazioni composable e dialog, oltre al supporto per Navigatori opzionali come quelli di Accompanist Navigation Material.
  • Supporto obbligatorio per il crossfade tra le destinazioni. L'animazione di navigazione dell'accompagnatore può essere utilizzata per controllare le transizioni di entrata e uscita utilizzando le API Compose sperimentali.
  • Definizione dell'ambito di un Lifecycle per ogni destinazione componibile. Ogni destinazione raggiunge lo stato RESUMED solo al termine di tutte le transizioni di ingresso e passa immediatamente a STARTED all'inizio di tutte le transizioni di uscita, consentendoti così di evitare tutti i problemi di IllegalStateException e multitocco attivando una chiamata navigate solo quando Lifecycle è RESUMED.
  • Definizione dell'ambito di ViewModel (tramite l'API viewModel() di Lifecycle ViewModel Compose 2.4.0 o hiltViewModel() di Hilt Navigation Compose 1.0.0 a livello di destinazione, fornendo un ambito che sopravvive alle modifiche alla configurazione e alla presenza nello stack precedente (quando i contenuti di Compose vengono eliminati) e un segnale in onCleared() di ViewModel che indica l'eliminazione permanente e la pulizia dello stato associato a NavBackStackEntry.
  • Definizione dell'ambito dello stato rememberSaveable a livello di destinazione, garantendo che tutto lo stato componibile venga salvato e ripristinato automaticamente quando torni a una destinazione.
  • Supporto completo per il salvataggio e il ripristino dello stato di NavController e dello stato della destinazione dopo l'interruzione e la ricreazione del processo.
  • Integrazione automatica con il pulsante Indietro del sistema.
  • Supporto per il passaggio di argomenti, l'allegato di link diretti alle destinazioni e il ritorno di un risultato alle destinazioni precedenti.

  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire l'innalzamento dello stato e il collegamento di NavController ai componenti componibili al di fuori di NavHost (ad esempio una barra di navigazione in basso).

val navController = rememberNavController()
Scaffold { innerPadding ->
    NavHost(navController, "home", Modifier.padding(innerPadding)) {
        composable("home") {
            // This content fills the area provided to the NavHost
            HomeScreen()
        }
        dialog("detail_dialog") {
            // This content will be automatically added to a Dialog() composable
            // and appear above the HomeScreen or other composable destinations
            DetailDialogContent()
        }
    }
}

Per ulteriori informazioni, consulta la guida alla navigazione di Compose.

Più pile di schede indietro

NavController è responsabile della gestione dello stack indietro delle destinazioni, dell'aggiunta di destinazioni allo stack indietro quando navigate() e della rimozione quando chiami popBackStack() o attivi il pulsante Indietro del sistema. La classe NavOptions esistente e l'integrazione negli elementi <action> nel file XML del grafico di navigazione sono state ampliate per supportare il salvataggio e il ripristino dello stack indietro.

Nell'ambito di questa modifica, i metodi NavigationUI di onNavDestinationSelected(), BottomNavigationView.setupWithNavController() e NavigationView.setupWithNavController() ora salvano e ripristinano automaticamente lo stato delle destinazioni estratte, consentendo il supporto di più back stack senza modifiche al codice. Quando utilizzi Navigation con i fragment, questo è il modo consigliato per l'integrazione con più back stack.

Le API sottostanti per il salvataggio e il ripristino dello stato sono esposte tramite diverse piattaforme:

  • Nel file XML di navigazione, l'elemento <action> ora può utilizzare gli attributi booleani di app:popUpToSaveState e app:restoreState per salvare lo stato di tutte le destinazioni visualizzate tramite app:popUpTo e ripristinare lo stato associato alla destinazione passata come app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Nel DSL Kotlin, puoi aggiungere la proprietà booleana restoreState e la proprietà booleana saveState nel builder popUpTo:navOptions

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Quando crei manualmente un oggetto NavOptions tramite NavOptions.Builder, puoi utilizzare setRestoreState() e il nuovo overload per setPopUpTo() che accetta un parametro saveState aggiuntivo.

    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);
    
  • Le chiamate programmatiche a popBackStack() ora possono includere un parametro saveState aggiuntivo.

  • Puoi utilizzare il metodo clearBackStack() per cancellare qualsiasi stato salvato con popBackStack() o popUpToSaveState.

In tutti i casi, NavController salverà e ripristinerà lo stato di ogni NavBackStackEntry, incluse le istanze ViewModel con ambito di destinazione di navigazione. Le API Navigator sono state aggiornate per consentire a ogni Navigator di supportare il salvataggio e il ripristino del proprio stato.

Modifiche al funzionamento

  • NavDeepLinkBuilder ora aggiunge PendingIntent.FLAG_IMMUTABLE a PendingIntent restituito da createPendingIntent(), garantendo che questa API funzioni come previsto quando ha come target Android 12.
  • La navigazione ora dipende dal ciclo di vita 2.3.1 e ora contrassegna setGraph(), popBackStack(), navigateUp() e navigate(), i metodi che aggiornano NavBackStackEntry Lifecycle, come @MainThread, allineando la navigazione all'applicazione del thread principale introdotta nel ciclo di vita 2.3.0.
  • I link diretti ora verificano che tutti gli argomenti obbligatori (quelli senza valori predefiniti) siano presenti in Uri.
  • Gli argomenti analizzati ora considerano i simboli di cancelletto allo stesso modo dei punti interrogativi come separatore tra i segmenti del percorso, impedendo a un argomento di estendersi oltre il simbolo di cancelletto.NavDeepLink
  • Quando genera azioni, il codice Kotlin generato da Safe Args ora inserisce gli argomenti senza valori predefiniti prima di quelli con valori predefiniti come parametri.
  • Durante la generazione degli argomenti, Safe Args ora inserisce i parametri senza valori predefiniti prima di quelli con valori predefiniti.
  • Safe Args ora dipende dal plug-in Android per Gradle 4.2.0. Ciò significa che non dovresti più visualizzare l'avviso relativo all'utilizzo di applicationIdTextResource.

Problemi noti

  • Correzione in Navigation 2.5.0-alpha01: l'accesso a un ViewModel creato tramite by navGraphViewModels() da onCreate() di un fragment non riuscirà e verrà visualizzato un IllegalStateException. (b/213504272)
  • Correzione in Navigation 2.5.0-alpha01: Safe Args 2.4.0 non è compatibile con il plug-in Android per Gradle 7.1.0 e versioni successive. (b/213086135)
  • Il deep linking con più grafici di navigazione nidificati non crea correttamente lo stack completo. (b/214383060)

Versione 2.4.0-rc01

15 dicembre 2021

androidx.navigation:navigation-*:2.4.0-rc01 viene ritirata. La versione 2.4.0-rc01 contiene questi commit.

Modifiche al funzionamento

  • Gli argomenti analizzati di NavDeepLink ora considerano i simboli di cancelletto allo stesso modo dei punti interrogativi come separatore tra gli argomenti. (I21309, b/180042703)

Correzioni di bug

  • I link diretti non ignoreranno più gli argomenti con valori uguali al nome del segnaposto. (If8017, b/207389470)
  • NavController non andrà più in crash quando viene estratta una destinazione nidificata utilizzando le transizioni dopo il ripristino di NavController. (I0f7c9, b/205021623)
  • Il messaggio di errore quando si utilizza un startDestination non valido ora verrà impostato per impostazione predefinita sul percorso della destinazione di partenza, se disponibile. (I86b9d, b/208041894)

Correzioni di bug di Navigation Compose

  • È stato corretto un potenziale arresto anomalo causato dal passaggio rapido tra la destinazione di partenza e un'altra destinazione utilizzando le voci del menu di navigazione in basso. (Ic8976, b/208887901)
  • Le destinazioni della finestra di dialogo ora vengono ripristinate correttamente nella parte superiore dello schermo dopo le modifiche alla configurazione o l'interruzione del processo. (I4c0dc, b/207386169)
  • Risolto un problema per cui il tentativo di recuperare un ViewModel dal NavBackStackEntry di una finestra di dialogo non riusciva quando la finestra di dialogo veniva chiusa. (I6b96d, b/206465487)
  • È stato risolto un problema che si verificava quando si utilizzavano destinazioni activity con NavHost di Navigation Compose, con conseguenti ricomposizioni infinite. (I8f64c)
  • È stata corretta una perdita in Navigation Compose, che manteneva un riferimento alla vecchia attività dopo una modifica della configurazione o l'interruzione del processo. (I4efcb, b/204905432)

Correzioni di bug di Safe Args

  • SafeArgs non si arresta più in modo anomalo quando tenta di ripristinare array personalizzati serializzabili dopo l'interruzione del processo. (I618e8, b/207315994)
  • È stato corretto un bug in Safe Args che non consentiva agli array booleani di avere un valore null. (I8c396, b/174787525)

Versione 2.4.0-beta02

3 novembre 2021

androidx.navigation:navigation-*:2.4.0-beta02 viene ritirata. La versione 2.4.0-beta02 contiene questi commit.

Modifiche alle API

  • La gestione dei link diretti espliciti e impliciti ora aggiunge automaticamente il flag saveState quando si passa a un altro grafico, garantendo che il codice come NavigationUI.setupWithNavController e il codice che utilizza più back stack funzioni come previsto. (Ic8807)

Modifiche al comportamento

  • I pattern di link diretti ora vengono compilati in modo differito in NavDeepLink anziché durante l'inflazione. In questo modo, il tempo di caricamento dei grafici di navigazione che includono link diretti dovrebbe migliorare. (b8d257, b/184149935)

Correzioni di bug

  • È stato risolto un problema a causa del quale le voci NavBackStackEntries venivano spostate in Lifecycle.State.CREATED dopo il passaggio a Lifecycle.State.STARTED quando NavHost viene aggiunto direttamente a setContent() dell'attività. (Ia5ac1, b/203536683)
  • È stata corretta una condizione di competizione in cui la rimozione di una destinazione DialogFragment dallo stack precedente prima che la finestra di dialogo venisse effettivamente mostrata non la chiudeva, causando un arresto anomalo quando la finestra di dialogo errata veniva chiusa manualmente dall'utente. (I687e5)
  • Risolto un problema per cui l'API onNavDestinationSelected su NavigationUI restituiva true anche se non navigate() effettivamente a quel grafico di navigazione. Ora utilizza la stessa logica utilizzata internamente da setupWithNavController per selezionare solo il MenuItem associato alla destinazione corrente utilizzando il hierarchy della destinazione. (I2b053)

Versione 2.4.0-beta01

27 ottobre 2021

androidx.navigation:navigation-*:2.4.0-beta01 viene ritirata. La versione 2.4.0-beta01 contiene questi commit.

Nuove funzionalità

  • Ora puoi utilizzare by navGraphViewModel con una route in alternativa all'utilizzo di un ID per supportare meglio l'utilizzo di Navigation Kotlin DSL con i fragment. (I901e3, b/201446416)

Modifiche alle API

  • L'API visibleEntries è ora sperimentale. (I93f6f)

Correzioni di bug

  • I ViewModel non verranno più eliminati quando le transizioni vengono interrotte dalla navigazione avanti e indietro tra le stesse schermate (Id52d8, b/200817333)
  • Gli argomenti NavDeepLink Nullable non richiedono più un valore predefinito quando si aggiungono link diretti a NavDestination. (I5aad4, b/201320030)
  • Le NavBackStackEntries ora con cicli di vita diversi non sono più considerate uguali. Ciò significa che NavHost ricomporrà correttamente tutte le destinazioni quando esegue la navigazione con singleTop e quando seleziona nuovamente le voci del menu in basso. (I1b351, b/196997433)
  • È stato risolto un problema con AbstractListDetailFragment che causava la gestione o l'ignoranza errata degli attributi layout_width e layout_weight nel riquadro dell'elenco restituito da onCreateListPaneView(). (f5fbf3)
  • Lo stato visivo delle destinazioni della finestra di dialogo ora rimane sincronizzato correttamente con lo stato di DialogFragmentNavigator. Ciò significa che la chiamata manuale all'API asincrona dismiss() per DialogFragment ora cancella correttamente tutte le destinazioni della finestra di dialogo sopra la finestra di dialogo ora chiusa. Ciò non influisce sui casi in cui utilizzi popUpTo o popBackStack() per chiudere la finestra di dialogo. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener ora ha messaggi di errore più chiari per onDestinationChanged(). (Ie742d)

Versione 2.4.0-alpha10

29 settembre 2021

androidx.navigation:navigation-*:2.4.0-alpha10 viene ritirata. La versione 2.4.0-alpha10 contiene questi commit.

Nuove funzionalità

  • NavController ora offre la possibilità di recuperare un elenco di tutte le istanze NavBackStackEntryvisibili tramite StateFlow (Ia964e).visibleEntries
  • rememberNavController() ora accetta un insieme facoltativo di istanze Navigator che verranno aggiunte al NavController restituito per supportare meglio i navigatori opzionali come quelli di Accompanist Navigation Material. (I4619e)

Correzioni di bug

  • La navigazione dinamica non si arresterà più in modo anomalo quando l'attività viene ricreata. (Ifa6a3, b/197942869)
  • È stato risolto un problema relativo al pulsante Indietro del sistema che si verifica solo dopo essere tornati a una destinazione componibile contenente un NavHost. (3ed148, b/195668143)
  • SafeArgs ora genera gli argomenti per fromBundle() e fromSavedStateHandle() nell'ordine corretto dei parametri. (I824a8, b/200059831)

Versione 2.4.0-alpha09

15 settembre 2021

androidx.navigation:navigation-*:2.4.0-alpha09 viene ritirata. La versione 2.4.0-alpha09 contiene questi commit.

Nuove funzionalità

  • Ora puoi utilizzare il metodo clearBackStack() per cancellare qualsiasi stato salvato con popBackStack() o popUpToSaveState. (I80a0f)
  • Ora puoi passare un elenco di argomenti e/o link diretti al builder del grafico di navigazione nidificato e questi verranno aggiunti automaticamente al grafico risultante. (I8a470, b/182545357)

Modifiche alle API

  • La funzione DSL Kotlin navArgument ora fa parte di navigation-common anziché di navigation-compose. Per continuare a utilizzare questa funzione, dovrai aggiornare le importazioni. (I1d095)

Modifiche al comportamento

  • Durante la generazione degli argomenti, Safe Args ora inserisce i parametri senza valori predefiniti prima di quelli con valori predefiniti. (I89709, b/198493585)

Correzioni di bug

  • Quando utilizzi Navigation Compose, i NavGraph saranno DESTROYED solo quando tutti i relativi elementi secondari saranno DESTROYED. (I86552, b/198741720)
  • Gli argomenti NavDeepLink Nullable non richiedono più un valore predefinito. (Ia14ef, b/198689811)
  • La chiamata a setGraph() con un nuovo grafico ora cancellerà anche gli stack precedenti salvati, oltre al comportamento precedente di estrazione dello stack precedente. (I97f96)
  • Risolto un problema per cui le istanze OnDestinationChangedListener e currentBackStackEntryFlow non ricevevano notifiche quando utilizzavano launchSingleTop. (Iaaebc)

Aggiornamenti delle dipendenze

Versione 2.4.0-alpha08

1° settembre 2021

androidx.navigation:navigation-*:2.4.0-alpha08 viene ritirata. La versione 2.4.0-alpha08 contiene questi commit.

Nuove funzionalità

  • Ora è possibile estendere la classe NavType per creare NavType personalizzati. I tipi personalizzati sono supportati solo quando crei il grafico di navigazione in modo programmatico, ad esempio tramite Navigation Graph Kotlin DSL. (I78440, b/196871885)

Modifiche al comportamento

  • Quando genera azioni, il codice Kotlin generato da Safe Args ora inserisce gli argomenti senza valori predefiniti prima di quelli con valori predefiniti come parametri. (Idb697, b/188855904)
  • I link diretti ora verificano che tutti gli argomenti obbligatori (quelli senza valori predefiniti) siano presenti in Uri. (#204, b/185527157)

Correzioni di bug

  • L'utilizzo di getBackStackEntry e previousBackStackEntry all'interno di composable(), insieme a remember(), non causerà più un'eccezione per l'assenza di una destinazione nello stack precedente. (I75138, b/194313238)
  • Navigation Compose ora ricompone correttamente quando si modificano gli argomenti dello stack e si utilizza launchSingleTop=true. (Iebd69, b/186392337)
  • Non ci sarà più un ArrayIndexOutOfBoundsException quando chiami setGraph con un grafico con 13 o 29 destinazioni. (I1a9f1, b/195171984)
  • Il generatore Java SafeArgs non dovrebbe più causare avvisi lint durante la generazione delle classi Args. (I1a666, b/185843837)

Contributo esterno

  • Grazie ospixd per aver verificato che tutti gli argomenti obbligatori (quelli senza valori predefiniti) siano presenti in Uri. (#204, b/185527157)

Versione 2.4.0-alpha07

18 agosto 2021

androidx.navigation:navigation-*:2.4.0-alpha07 viene ritirata. La versione 2.4.0-alpha07 contiene questi commit.

Correzioni di bug

  • La composizione della navigazione ora salva correttamente lo stato dopo le modifiche alla configurazione e quando si cambiano i grafici utilizzando la funzionalità di più back stack. (If5a3d, b/195141957)
  • Selezionare di nuovo la stessa scheda quando si utilizza la composizione della navigazione con più stack indietro non comporterà più la visualizzazione di una schermata vuota. (I860dc, b/194925622)
  • NavHost ora rileva le modifiche apportate a Lifecycle.State di NavBackStackEntry, il che significa che l'utilizzo di NavHost in un frammento ora verrà ricomposto correttamente man mano che il ciclo di vita cambia, anziché generare una schermata vuota. (I4eb85, b/195864489)
  • È stato risolto un problema per cui la chiusura di un DialogFragment non aggiornava correttamente lo stato NavController dopo la ricreazione dell'attività (ovvero dopo una modifica della configurazione). (Icd72b)
  • È stato risolto un problema per cui la visualizzazione di una destinazione di dialogo non aggiornava la gestione del pulsante Indietro del sistema di NavController, causando potenzialmente l'intercettazione del pulsante Indietro da parte di NavController anche se non ha uno stack di ritorno da visualizzare. (If3b34)
  • Safe Args ora genera automaticamente un metodo toSavedStateHandle per gli argomenti che può essere utilizzato per testare il codice ViewModel. (If1e2d, b/193353880)

Versione 2.4.0-alpha06

4 agosto 2021

androidx.navigation:navigation-*:2.4.0-alpha06 viene ritirata. La versione 2.4.0-alpha06 contiene questi commit.

Modifiche alle API

  • I metodi requireSlidingPaneLayout() e requireDetailPaneNavHostFragment() su AbstractListDetailFragment sono stati rinominati rispettivamente in getSlidingPaneLayout() e getDetailPaneNavHostFragment(). (I34a08)

Modifiche al comportamento

  • Quando navighi con le animazioni (ad esempio Crossfade), il Lifecycle della nuova destinazione raggiungerà RESUMED solo al termine dell'animazione. (If0543, b/172112072, b/194301889)
  • La funzionalità di composizione della navigazione NavHost ora imposta il grafico come parte della prima composizione. (Ieb7be)

Correzioni di bug

  • L'estrazione dell'ultima destinazione di un grafico di navigazione non genera più un ClassCastException. (If0543, b/172112072, b/194301889)
  • È stato corretto un NullPointerException che si verificava quando si aggiungeva un link diretto senza un Uri e si navigava tramite un percorso o un link diretto. (938a0c, b/193805425)
  • Risolto un problema in Navigation Compose per cui un NavBackStackEntry con link diretto non raggiungeva lo stato RESUMED. (I192c5)
  • È stato risolto un problema per cui la visualizzazione di una destinazione della finestra di dialogo non aggiornava la gestione del pulsante Indietro di sistema di NavController, causando potenzialmente l'intercettazione del pulsante Indietro da parte di NavController anche se non ha uno stack indietro da visualizzare. (aosp/1782668)

Versione 2.4.0-alpha05

21 luglio 2021

androidx.navigation:navigation-*:2.4.0-alpha05 viene ritirata. La versione 2.4.0-alpha05 contiene questi commit.

Modifiche al comportamento

  • NavHost di Navigazione Composizione ora utilizza sempre dissolvenze incrociate durante la navigazione tra le destinazioni. (I07049, b/172112072)
  • Ora puoi apportare modifiche al grafico di un NavHost. I grafici con la stessa startDestination e le stesse destinazioni nel grafico verranno considerati uguali e non cancelleranno lo stack NavController. (I0b8db, b/175392262)

Correzioni di bug

  • È stato corretto un NoSuchElementException quando la chiamata a popBackStack() dall'interno di un LifecycleObserver collegato a un NavBackStackEntry causato da aggiornamenti rientranti allo stato di NavController. (I64621)
  • AbstractListDetailFragment ora consente di rimuovere completamente SlidingPaneLayout dall'APK quando AbstractListDetailFragment non viene utilizzato. (I611ad)
  • NavGraph e NavDestination ora sostituiscono il metodo equals, quindi due oggetti con gli stessi valori verranno considerati uguali. (I166eb, b/175392262)

Versione 2.4.0-alpha04

1° luglio 2021

androidx.navigation:navigation-*:2.4.0-alpha04 viene ritirata. La versione 2.4.0-alpha04 contiene questi commit.

Nuove funzionalità

  • L'artefatto navigation-fragment ora contiene un'implementazione predefinita di un layout a due riquadri tramite il nuovo AbstractListDetailFragment. Questo frammento utilizza un SlidingPaneLayout per gestire un riquadro elenco (fornito dalla sottoclasse) e un riquadro dei dettagli, che utilizza un NavHostFragment come implementazione, come mostrato nella nostra implementazione di esempio. (Iac4be, b/191276636)
  • Il NavHost dell'artefatto navigation-compose ora supporta le destinazioni dialog oltre a quelle composable. Queste destinazioni della finestra di dialogo verranno visualizzate all'interno di un elemento componibile Dialog, sopra la destinazione composable corrente. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

Modifiche alle API

  • La funzione add in NavigatorState è stata rinominata in push. Tutte le chiamate attuali a add() dovranno essere modificate in push(). (Ie89fc, b/172112072)
  • Le istanze Navigator personalizzate ora possono utilizzare le API pushWithTransaction e popWithTransition su NavigatorState per eseguire il push o il pop di una destinazione in modo asincrono. Tieni presente che queste API non sono ancora utilizzate da nessuno dei navigatori inclusi. (Ic4d7c, b/172112072)

Modifiche al comportamento

  • NavDeepLinkBuilder ora aggiunge PendingIntent.FLAG_IMMUTABLE a PendingIntent restituito da createPendingIntent(), garantendo che questa API funzioni come previsto quando ha come target Android 12. (If8c52)

Correzioni di bug

  • È stato risolto un problema relativo a <include-dynamic> per cui gli argomenti passati al grafico non venivano passati correttamente al grafico incluso dinamicamente. (I3e115)
  • È stato corretto un NullPointerException durante la navigazione verso una destinazione utilizzando un argomento string[] con un valore predefinito di @null. (I1fbe8)
  • Aggiungi regole ProGuard per @Navigator.Name, risolvendo i problemi quando utilizzi la modalità completa R8 3.1. (I2add9, b/191654433)
  • SafeArgs non genererà più errori durante la creazione dell'app con le versioni Kotlin precedenti alla 1.5.0. (Icd1ff, b/190739257)

Versione 2.4.0-alpha03

16 giugno 2021

androidx.navigation:navigation-*:2.4.0-alpha03 viene ritirata. La versione 2.4.0-alpha03 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui erano necessarie due chiamate navigate() per passare a un grafico dinamico incluso. (I7785c, b/188859835)
  • È stato corretto un problema di regressione introdotto in Navigazione 2.4.0-alpha01 in cui setupActionBarWithNavController() non rimuoveva correttamente l'icona Su quando ti trovi in una destinazione di primo livello. (I5d443, b/189868637)
  • È stato corretto un IllegalStateException quando si chiama popBackStack() dopo aver estratto il grafico radice di NavController. (I2a330, b/190265699)
  • Le regole di ProGuard per by navArgs() ora vengono applicate correttamente quando utilizzi navigation-common o qualsiasi artefatto che dipende da esso. (I68800, b/190082521)
  • Un OnDestinationChangedListener che chiama navigate() la prima volta che riceve un callback ora riceve correttamente un secondo callback con la destinazione raggiunta. (Ie5f9e, b/190228815)
  • Safe Args non va più in arresto anomalo quando viene utilizzato con moduli di funzionalità dinamiche e AGP 7.0 o versioni successive. (I69518, b/189966576)

Problema noto

  • Safe Args non funzionerà e restituirà un errore Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ quando si utilizza Gradle 6.7.0 a causa di una dipendenza da una versione precedente di Kotlin. Questo problema può essere risolto eseguendo l'aggiornamento per utilizzare Gradle 7.0. (b/190739257)

Versione 2.4.0-alpha02

2 giugno 2021

androidx.navigation:navigation-*:2.4.0-alpha02 viene ritirata. La versione 2.4.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Le route sono ora supportate per le destinazioni Activity, Fragment e Dialog, nonché in tutta la DSL Kotlin DynamicNavigation. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI ha aggiunto temporaneamente API sperimentali per consentire di disattivare il salvataggio dello stato. Sebbene il salvataggio dello stato sia sempre il comportamento corretto, esistono ancora utilizzi di librerie obsolete (ad es. frammenti mantenuti) che non possono essere supportati durante il salvataggio dello stato, quindi le app hanno l'opportunità di eseguire lentamente la conversione da qualsiasi API non supportata. (Idf93c)
  • La navigazione ora fornisce le APIfindDestination() e getHierarchy() che possono essere utilizzate per implementare NavigationUI personalizzata. findDestination() è una funzione di estensione su NavGraph che individua una destinazione all'interno del grafico. getHierarchy() è una funzione di NavDestination che può essere utilizzata per verificare se una determinata destinazione si trova all'interno della gerarchia di un'altra.(I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • I metodi NavigationUI che accettavano un BottomNavigationView sono stati aggiornati per accettare invece la relativa superclasse introdotta in Material 1.4.0, NavigationBarView. In questo modo, questi metodi possono essere utilizzati con NavigationRailView. (Ib0b36, b/182938895)

  • Quando aumenti un elemento <action> tramite XML, gli attributi di animazione possono utilizzare gli attributi estratti dal tema utilizzando la sintassi app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

Modifiche alle API

  • I builder Kotlin DSL che utilizzano un ID sono stati ritirati e devono essere sostituiti con builder che utilizzano le route (I85b42, b/188816479) (I9f58f, b/188816479)

Correzioni di bug

  • DialogFragmentNavigator ora utilizza l'API NavigatorState.pop() per informare NavController quando una finestra di dialogo viene chiusa premendo il pulsante Indietro del sistema o facendo clic al di fuori, assicurando che lo stato di NavController sia sempre sincronizzato con lo stato del navigatore. (I2ead9)
  • La navigazione non restituisce più ConcurrentModificationException quando si manipola l'elenco di OnDestinationChangedListeners da un callback onDestinationChanged. (Ib1707, b/188860458)

  • Safe Args non si arresta più in modo anomalo quando si tenta di generare proprietà di direzione in Kotlin. (Id2416, b/188564435)

  • Il metodo setId su NavDestination ora è annotato correttamente con @IdRes, quindi accetta solo ID risorsa. (I69b80)

  • Il parametro int di findNode ora è resId anziché resid. (I7711d)

Aggiornamento delle dipendenze

  • Safe Args ora dipende dal plug-in Android per Gradle 4.2.0. Ciò significa che non dovresti più visualizzare l'avviso relativo all'utilizzo di applicationIdTextResource. (I6d67b, b/172824579)

Versione 2.4.0-alpha01

18 maggio 2021

androidx.navigation:navigation-*:2.4.0-alpha01 viene ritirata. La versione 2.4.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Il metodo currentBackStackEntryAsFlow() su NavController fornisce un Flow che viene emesso ogni volta che cambia l'NavBackStackEntry corrente. Questo flusso può essere utilizzato in alternativa alla gestione manuale di un OnDestinationChangedListener. (I19c4a, #89, b/163947280)

Più pile di schede indietro

NavController è responsabile della gestione dello stack indietro delle destinazioni, dell'aggiunta di destinazioni allo stack indietro quando navigate() e della rimozione quando chiami popBackStack() o attivi il pulsante Indietro del sistema. La classe NavOptions esistente e l'integrazione nelle voci <action> nel file XML del grafico di navigazione sono state ampliate per supportare il salvataggio e il ripristino dello stack indietro. (b/80029773)

Nell'ambito di questa modifica, i metodi NavigationUI di onNavDestinationSelected(), BottomNavigationView.setupWithNavController() e NavigationView.setupWithNavController() ora salvano e ripristinano automaticamente lo stato delle destinazioni estratte, consentendo il supporto di più back stack senza modifiche al codice. Quando utilizzi Navigation con i fragment, questo è il modo consigliato per l'integrazione con più back stack. (Ie07ca)

Le API sottostanti per il salvataggio e il ripristino dello stato sono esposte tramite diverse piattaforme:

  • Nel file XML di navigazione, l'elemento <action> ora può utilizzare gli attributi booleani di app:popUpToSaveState e app:restoreState per salvare lo stato di tutte le destinazioni visualizzate tramite app:popUpTo e ripristinare lo stato associato alla destinazione passata come app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Nel DSL Kotlin, puoi aggiungere la proprietà booleana restoreState e la proprietà booleana saveState nel builder popUpTo:navOptions

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Quando crei manualmente un oggetto NavOptions tramite NavOptions.Builder, puoi utilizzare setRestoreState() e il nuovo overload per setPopUpTo() che accetta un parametro saveState aggiuntivo.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Le chiamate programmatiche a popBackStack() ora possono includere un parametro saveState aggiuntivo.

In tutti i casi, NavController salverà e ripristinerà lo stato di ogni NavBackStackEntry, incluse le istanze ViewModel con ambito di destinazione di navigazione. Le API Navigator sono state aggiornate per consentire a ogni Navigator di supportare il salvataggio e il ripristino del proprio stato.

L'ComposeNavigator utilizzato per le destinazioni composable in Navigation Compose e gli elementi FragmentNavigator e DynamicFragmentNavigator utilizzati per le destinazioni <fragment> in Navigation with Fragments sono stati aggiornati per utilizzare le nuove API Navigator e supportare il salvataggio e il ripristino dello stato.

Percorsi di navigazione

Una route è un String che identifica in modo univoco una destinazione. Sebbene in precedenza fosse utilizzato solo in Navigation Compose, questo concetto è ora diventato parte delle API Navigation di base. In questo modo, puoi utilizzare un'alternativa all'utilizzo degli ID interi durante la creazione del grafico tramite il DSL Kotlin di Navigation. (b/172823546)

Tutte le API che prima accettavano solo un ID ora hanno un overload che accetta un percorso String. Sono inclusi navigate(), popBackStack(), popUpTo() e getBackStackEntry().

Ciò ha avuto alcune implicazioni per le API:

  • La proprietà Kotlin popUpTo in Kotlin DSL è stata ritirata a favore di popUpToId. (I59c73, b/172823546)
  • L'API getStartDestination() è stata ritirata a favore di getStartDestinationId(). (I0887f, b/172823546)

Per gli sviluppatori che eseguono l'upgrade dalle versioni precedenti di Navigation Compose a Navigation Compose 2.4.0-alpha01, ciò significa che i seguenti importazioni sui metodi di estensione non sono più necessari e devono essere rimossi:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

L'argomento KEY_ROUTE è stato sostituito con la proprietà route su NavDestination, il che ti consente di chiamare navBackStackEntry.destination.route direttamente.

Modifiche alle API

  • Tutti gli artefatti di navigazione sono stati riscritti in Kotlin. Ciò ha migliorato l'annullabilità delle classi che utilizzano i generici (come le sottoclassi NavType). Tutte le funzioni di estensione Kotlin che facevano parte degli artefatti -ktx sono state spostate nei rispettivi artefatti principali. Gli artefatti -ktx continueranno a essere pubblicati, ma sono completamente vuoti. (b/184292145)
  • NavDeepLinkBuilder ora supporta l'aggiunta di più destinazioni distinte allo stack indietro generato. (I3ee0d, b/147913689)
  • Aggiungi funzioni di fabbrica per DynamicNavHostFragment (Icd515, b/175222619)
  • L'ID univoco di un NavBackStackEntry ora è esposto come parte della sua API pubblica. (Ie033a)
  • I campi name e argument e le funzioni di destrutturazione di NamedNavArgument sono ora pubblici. (#174, b/181320559)
  • È stata introdotta una nuova estensione NavBackStackEntry#provideToCompositionLocals che fornisce la NavBackStackEntry alle impostazioni internazionali della composizione pertinenti. (#175, b/187229439)

Safe Args

  • Safe Args ora genera un metodo fromSavedStateHandle() per ogni classe NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • Safe Args è stato aggiornato in modo da dipendere da KotlinPoet 1.8.0. (#172, b/183990444)

Modifiche al comportamento

  • La navigazione ora dipende dal ciclo di vita 2.3.1 e ora contrassegna setGraph(), popBackStack(), navigateUp() e navigate(), i metodi che aggiornano NavBackStackEntry Lifecycle, come @MainThread, allineando la navigazione all'applicazione del thread principale introdotta nel ciclo di vita 2.3.0. (b/171125856)
  • L'analisi degli argomenti Enum dai link diretti ora non fa distinzione tra maiuscole e minuscole, consentendo a un link diretto come http://www.example.com/red di corrispondere a un link diretto www.example.com/{color} anche quando l'enum ha il valore RED. (#152, b/135857840)

Compatibilità di Scrivi

  • androidx.navigation:navigation-compose:2.4.0-alpha01 è compatibile solo con Compose versione 1.0.0-beta07 e successive.

Correzioni di bug

  • Risolto un problema per cui i segnaposto degli argomenti finali avevano la precedenza sui link diretti con un suffisso esatto corrispondente. (#153, b/184072811)
  • NavHostFragment ora supporta navigatori personalizzati che utilizzano lo stesso @Navigator.Name("dialog") di DialogFragmentNavigator predefinito. (Ib1c2c, b/175979140)
  • È stato migliorato il comportamento di NavigatorProvider#addNavigator per garantire che la chiamata ripetuta con la stessa istanza non causi problemi. (#176, b/187443146)

Contributi esterni

  • Grazie a simonschiller per aver creato il supporto per Safe Args che genera un metodo fromSavedStateHandle() per ogni classe NavArgs. (#122, b/136967621)
  • Grazie Bradleycorn per aver reso l'analisi degli argomenti Enum dai link diretti indipendente dalla distinzione tra maiuscole e minuscole. (#152, b/135857840)
  • Grazie a osipxd per aver risolto un problema per cui i segnaposto degli argomenti finali avevano la precedenza sui link diretti con un suffisso esatto corrispondente. (#153, b/184072811)
  • Grazie tatocaster per aver aggiornato Safe Args in modo che dipenda da KotlinPoet 1.8.0. (#172, b/183990444)
  • Grazie a jossiwolf per aver reso pubblici i campi name e argument e le funzioni di destrutturazione di NamedNavArgument. (#174, b/181320559)
  • Grazie jossiwolf per aver introdotto una nuova estensione NavBackStackEntry#provideToCompositionLocals che fornisce i NavBackStackEntry alle composizioni locali pertinenti. (#175, b/187229439)
  • Grazie a jossiwolf per aver migliorato il comportamento di NavigatorProvider#addNavigator per garantire che chiamarlo ripetutamente con la stessa istanza non causi problemi. (#176, b/187443146)

Versione 1.0.0-alpha10

7 aprile 2021

androidx.navigation:navigation-compose:1.0.0-alpha10 viene ritirata. La versione 1.0.0-alpha10 contiene questi commit.

Modifiche alle API

  • NavHost ora accetta un Modifier, che viene passato al contenitore componibile che racchiude i componenti componibili di destinazione. (I85aca, b/175125483)

Correzioni di bug

  • NavHost ora funziona anche quando non viene trovato un OnBackPressedDispatcherOwner, come nel caso dell'anteprima di NavHost. (I7d8b4)
  • La composizione della navigazione ora dipende da Navigazione 2.3.5, risolvendo un problema che si verificava quando si utilizzava BackHandler all'interno di una destinazione NavHost. (I7e63b, b/182284739)

Versione 1.0.0-alpha09

10 marzo 2021

androidx.navigation:navigation-compose:1.0.0-alpha09 viene ritirata. La versione 1.0.0-alpha09 contiene questi commit.

Modifiche alle API

  • LocalViewModelStoreOwner.current ora restituisce un ViewModelStoreOwner annullabile per determinare meglio se un ViewModelStoreOwner è disponibile nella composizione corrente. Le API che richiedono un ViewModelStoreOwner, ad esempio viewModel() e NavHost, generano comunque un'eccezione se non è impostato un ViewModelStoreOwner. (Idf39a)

Correzioni di bug

  • Navigation Compose ora dipende da Navigation 2.3.4, che include la correzione per il tentativo di impostare lo stesso oggetto ViewModelStore dopo l'impostazione del grafico. (I65c24, b/177825470)

Versione 1.0.0-alpha08

24 febbraio 2021

androidx.navigation:navigation-compose:1.0.0-alpha08 viene ritirata. La versione 1.0.0-alpha08 contiene questi commit.

Nuove funzionalità

  • Ora NavHost compila LocalSavedStateRegistryOwner CompositionLocal con NavBackStackEntry della destinazione, assicurando che qualsiasi stato salvato direttamente in SavedStateRegistry venga salvato e ripristinato insieme alla destinazione. (I435d7, b/179469431)

Versione 1.0.0-alpha07

10 febbraio 2021

androidx.navigation:navigation-compose:1.0.0-alpha07 viene ritirata. La versione 1.0.0-alpha07 contiene questi commit.

Aggiornamenti delle dipendenze

Versione 1.0.0-alpha06

28 gennaio 2021

androidx.navigation:navigation-compose:1.0.0-alpha06 viene ritirata. La versione 1.0.0-alpha06 contiene questi commit.

Modifiche alle API

  • È stato aggiunto un metodo di estensione getBackStackEntry(route: String) su NavController che restituisce il NavBackStackEntry associato. (If8931)

Versione 1.0.0-alpha05

13 gennaio 2021

androidx.navigation:navigation-compose:1.0.0-alpha05 viene ritirata. La versione 1.0.0-alpha05 contiene questi commit.

Aggiornato in modo che dipenda da Compose 1.0.0-alpha10.

Versione 1.0.0-alpha04

16 dicembre 2020

androidx.navigation:navigation-compose:1.0.0-alpha04 viene ritirata. La versione 1.0.0-alpha04 contiene questi commit.

  • Aggiornato per la compatibilità con Compose 1.0.0-alpha09.

Versione 1.0.0-alpha03

2 dicembre 2020

androidx.navigation:navigation-compose:1.0.0-alpha03 viene ritirata. La versione 1.0.0-alpha03 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui popBackStack() e navigateUp() non funzionavano dopo una modifica della configurazione o l'interruzione e la ricreazione del processo. (Icea47, b/173281473)
  • La navigazione a un grafico nidificato all'interno di NavHost ora funziona correttamente. (I0948d, b/173647694)

Versione 1.0.0-alpha02

11 novembre 2020

androidx.navigation:navigation-compose:1.0.0-alpha02 viene ritirata. La versione 1.0.0-alpha02 contiene questi commit.

Modifiche alle API

  • La composizione della navigazione ora supporta NavOptions per l'utilizzo delle operazioni popUpTo e launchSingleTop (If96c3, b/171468994)
  • È stata aggiunta una funzione di navigazione che accetta una route anziché un ID che consente di creare grafici nidificati nel DSL Navigation Compose. (I1661d)
  • startDestination ora precede la route nell'elenco dei parametri per un NavHost (Ie620e)
  • Ora puoi creare un grafico utilizzando la route come destinazione di partenza al di fuori di un composable NavHost. (Iceb75)

Versione 1.0.0-alpha01

28 ottobre 2020

android.navigation:navigation-compose:1.0.0-alpha01 viene ritirata. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

L'artefatto navigation-compose fornisce l'integrazione tra il componente Navigation e Jetpack Compose. Utilizza le funzioni @Composable come destinazioni nella tua applicazione.

Questa release iniziale offre:

  • Un NavHost componibile che ti consente di costruire il grafico di navigazione tramite un DSL Kotlin.
  • Definizione dell'ambito del ciclo di vita, ViewModel e stato memorizzato a livello di destinazione.
  • Integrazione automatica con il pulsante Indietro del sistema.
  • Supporto per il passaggio di argomenti, l'allegato di link diretti alle destinazioni e il ritorno di un risultato alle destinazioni precedenti.
  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire l'innalzamento dello stato e il collegamento di NavController ai componenti componibili al di fuori di NavHost (ad esempio una barra di navigazione in basso).

Per ulteriori informazioni, consulta la guida alla navigazione di Compose.

Versione 2.3.5

Versione 2.3.5

7 aprile 2021

androidx.navigation:navigation-*:2.3.5 viene ritirata. La versione 2.3.5 contiene questi commit.

Nuove funzionalità

  • Quando navighi utilizzando un NavDeepLinkRequest o un Uri, ora puoi accedere a Uri, azione e tipo MIME nella destinazione risultante ottenendo l'intent dagli argomenti tramite KEY_DEEP_LINK_INTENT, rispecchiando la funzionalità già disponibile per il deep link esterno. (I975c3, b/181521877)

Correzioni di bug

  • OnBackPressedCallbacks aggiunto a un dispatcher con NavBackStackEntry come LifecycleOwner ora intercetta correttamente il pulsante Indietro dopo che il ciclo di vita dell'attività è STOPPED, poi STARTED (Iff94f, b/182284739)
  • L'analisi del dominio dei link diretti ora non fa distinzione tra maiuscole e minuscole, garantendo che www.example.com corrisponda sia a www.example.com che a www.Example.com. Tieni presente che i nomi dei parametri di ricerca sono ancora sensibili alle maiuscole. (#144, b/153829033)
  • È stato corretto un NullPointerException che poteva verificarsi quando una destinazione aveva più argomenti predefiniti non nullabili e si passava a quella destinazione eseguendo l'override solo di un sottoinsieme di questi argomenti. (aosp/1644827)

Aggiornamenti delle dipendenze

Contributo esterno

  • Grazie bentrengrove per la pull request che rende l'analisi del dominio dei link diretti indipendente dalla distinzione tra maiuscole e minuscole. (#144, b/153829033)

Versione 2.3.4

Versione 2.3.4

10 marzo 2021

androidx.navigation:navigation-*:2.3.4 viene ritirata. La versione 2.3.4 contiene questi commit.

Nuove funzionalità

  • Ora gli argomenti ReferenceType possono essere analizzati correttamente quando vengono inviati come parte di un URI di link diretto. Supporta sia il valore intero non elaborato sia i valori esadecimali con il prefisso 0x. (#127, b/179166693)
  • android:defaultValue per un argomento con app:argType="float" ora supporta i valori predefiniti interi, consentendoti di utilizzare android:defaultValue="0" anziché richiedere l'utilizzo di 0.0. (#117, b/173766247)

Correzioni di bug

  • Correzione del blocco dell'avanzamento dell'installazione quando si utilizza il supporto della navigazione per le funzionalità dinamiche. (Ib27a7, b/169636207)
  • La chiamata di setViewModelStore o setLifecycleOwner con lo stesso oggetto già impostato ora non avrà effetto (Idf491, b/177825470)
  • Safe Args ora aggiunge annotazioni di soppressione ai metodi appropriati quando si utilizza Java. (I8fbc5, b/179463137)

Contributi esterni

  • Grazie JvmName per la richiesta di pull per garantire che gli argomenti ReferenceType ora possano essere analizzati correttamente quando vengono inviati come parte di un URI di link diretto. (#127, b/179166693)
  • Grazie tatocaster per la pull request per consentire a defaultValue per un argomento con app:argType=”float” ora di supportare i valori predefiniti interi. (#117, b/173766247)

Versione 2.3.3

Versione 2.3.3

27 gennaio 2021

androidx.navigation:navigation-*:2.3.3 viene ritirata. La versione 2.3.3 contiene questi commit.

Correzioni di bug

  • Non si verifica più un arresto anomalo quando viene visualizzato un NavBackStackEntry prima che il relativo Lifecycle venga spostato in CREATED. (Ie3ba3)
  • È stata corretta la regressione causata da b/171364502 in cui il passaggio a un'attività con un valore di risorsa di animazione di 0 causava un ResourceNotFoundException. (I7aedb, b/176819931)

Versione 2.3.2

Versione 2.3.2

2 dicembre 2020

androidx.navigation:navigation-*:2.3.2 viene ritirata. La versione 2.3.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema di regressione in NavigationUI in cui l'utilizzo di una destinazione <activity> con onNavDestinationSelected non consentiva di passare all'attività. (I22e34, b/171364502)
  • È stato risolto un problema per cui navigation-dynamic-features-fragment comportava la navigazione più volte verso la destinazione appena installata. (aosp/1486056, b/169636207)
  • Risolto un problema per cui gli argomenti predefiniti non venivano inviati alle istanze OnDestinationChangedListener quando si utilizzava launchSingleTop. (I2c5cb)
  • È stato risolto un problema per cui la navigazione in un grafico di navigazione nidificato non creava una nuova istanza del grafico nello stack precedente. (Ifc831)
  • Risolto un problema per cui l'utilizzo di navigate() con un popUpTo che rimuoveva l'ultima destinazione in un grafico di navigazione non distruggeva e rimuoveva immediatamente il grafico di navigazione stesso dallo stack precedente. (I910a3)
  • Navigation SafeArgs ora utilizza KotlinPoet versione 1.7.2, che aggiunge il supporto per la modalità API esplicita di Kotlin. (I918b5)
  • NavHostFragment.findNavController(Fragment) ora controlla anche la visualizzazione della decorazione principale di un DialogFragment, oltre ai controlli esistenti della gerarchia dei fragment e della gerarchia delle visualizzazioni del fragment. Ciò consente di testare i frammenti di dialogo che utilizzano la navigazione con FragmentScenario e Navigation.setViewNavController(). (I69e0d)

Versione 2.3.1

Versione 2.3.1

14 ottobre 2020

androidx.navigation:navigation-*:2.3.1 viene ritirata. La versione 2.3.1 contiene questi commit.

Nuove funzionalità

  • Le risorse Animator predefinite sono state aggiunte all'interfaccia utente di navigazione e sono consigliate rispetto alle risorse di animazione predefinite. (b/167430145)
  • NavOptions ora esegue l'override dei metodi hashcode ed equals (b/161586466)
  • La navigazione ora include la destinazione corrente nell'IllegalArgumentException "Nessuna destinazione con ID", il che dovrebbe migliorare l'esperienza di debug degli sviluppatori. (b/168311416)

Correzioni di bug

  • Safe Args non eseguirà più il wrapping della riga di ritorno, anche se il nome della classe di argomenti generata è più lungo di 100 caratteri. (b/168584987)

Modifiche alle dipendenze

  • navigation-ui ora dipende da DrawerLayout 1.1.1, garantendo che NavigationUI possa aprire il riquadro anche quando si utilizza LOCK_MODE_LOCKED_CLOSED o LOCK_MODE_LOCKED_OPEN. (b/162253907)
  • Safe Args ora dipende da KotlinPoet 1.6.0 (aosp/1435911)
  • Safe Args ora dipende da AGP 4.0.1 (aosp/1442337)

Versione 2.3.0

Versione 2.3.0

24 giugno 2020

androidx.navigation:navigation-*:2.3.0 viene ritirata. La versione 2.3.0 contiene questi commit.

Modifiche importanti dalla versione 2.2.0

  • Integrazione dei moduli delle funzionalità: gli artefatti navigation-dynamic-features-runtime e navigation-dynamic-features-fragment ti consentono di passare alle destinazioni definite nei moduli delle funzionalità, gestendo automaticamente l'installazione dei moduli delle funzionalità in base alle esigenze. Per saperne di più, consulta Navigare con i moduli delle funzionalità.
  • Test di navigazione: l'artefatto navigation-testing fornisce un TestNavHostController che ti consente di impostare la destinazione corrente e verificare lo stack precedente dopo le operazioni di navigazione. Per ulteriori informazioni, consulta Test di navigazione.
  • Restituzione di un risultato: l'NavBackStackEntry associato a ogni destinazione nello stack di navigazione indietro ora ti consente di accedere a un SavedStateHandle adatto per memorizzare piccole quantità di stato salvato che devono essere associate a una particolare voce dello stack di navigazione indietro. Per saperne di più, consulta Ripristinare un risultato nella destinazione precedente.
  • Supporto di NavigationUI per Openable: tutti gli utilizzi di DrawerLayout in NavigationUI sono stati sostituiti con l'interfaccia più generica Openable aggiunta in CustomView 1.1.0 e implementata da DrawerLayout in DrawerLayout 1.1.0.
  • Supporto di intent e tipi MIME nei link diretti: i link diretti sono stati ampliati per supportare app:action e app:mimeType, oltre a app:uri precedentemente disponibile. NavController ora supporta la navigazione in base a qualsiasi combinazione di questi campi tramite la nuova classe NavDeepLinkRequest. Per saperne di più, consulta la sezione Navigare utilizzando NavDeepLinkRequest.

Problemi noti

  • Il supporto per le azioni di link diretti e i tipi MIME non è ancora disponibile in Manifest Merger. Fino al completamento di questo lavoro, gli elementi <intent-filter> generati dall'elemento <nav-graph> nel manifest non includeranno il tipo MIME nell'elemento <data> o l'intent personalizzato <action>. Devi aggiungere manualmente un <intent-filter> appropriato al manifest.

Versione 2.3.0-rc01

10 giugno 2020

androidx.navigation:navigation-*:2.3.0-rc01 viene ritirata. La versione 2.3.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato corretto un NullPointerException durante la sostituzione di un'istanza di una destinazione senza argomenti con un'altra istanza con argomenti con singleTop. (b/158006669)
  • Tutte le eccezioni destination is unknown generate da NavController ora dispongono di informazioni di debug aggiuntive per determinare lo stato di NavController. (b/157764916)

Versione 2.3.0-beta01

20 maggio 2020

androidx.navigation:navigation-*:2.3.0-beta01 vengono rilasciati. La versione 2.3.0-beta01 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui il Lifecycle di NavBackStackEntry non veniva aggiornato correttamente dopo l'interruzione del processo. (b/155218371)
  • Le istanze OnDestinationChangedListener registrate prima della chiamata setGraph() ora inviano correttamente la destinazione ripristinata dopo l'interruzione di un processo. (b/155218371)
  • Quando si utilizza singleTop, ora gli argomenti di NavBackStackEntry vengono aggiornati correttamente e inviati a tutte le istanze di OnDestinationChangeListener. (b/156545508)

Aggiornamenti delle dipendenze

Versione 2.3.0-alpha06

29 aprile 2020

androidx.navigation:navigation-*:2.3.0-alpha06 viene ritirata. (La versione 2.3.0-alpha06 contiene questi commit.)

Nuove funzionalità

  • I link diretti sono stati estesi per supportare app:action e app:mimeType, oltre a app:uri precedentemente disponibile. NavController ora supporta la navigazione in base a qualsiasi combinazione di questi campi tramite la nuova classe NavDeepLinkRequest. (b/136573074, b/135334841)

Modifiche alle API

  • È stato ampliato notevolmente il supporto del DSL Kotlin per le destinazioni di navigazione dinamica. (b/148969800)

Correzioni di bug

  • Risolto un problema per cui gli intent di link diretto venivano ignorati quando si utilizzava una destinazione iniziale nidificata. (b/154532067)

Versione 2.3.0-alpha05

15 aprile 2020

androidx.navigation:navigation-*:2.3.0-alpha05 viene ritirata. La versione 2.3.0-alpha05 contiene questi commit.

Nuove funzionalità

  • Per l'inclusione di grafici dinamici che utilizzano <include-dynamic>, non è più necessario specificare app:graphPackage e ne verrà utilizzato uno predefinito aggiungendo il suffisso moduleName a applicationId dopo un punto. Se devi personalizzare il tuo graphPackage, ora è supportato un segnaposto ${applicationId}. (b/152696768)
  • Il DSL Kotlin del grafico di navigazione ora espone un defaultArguments Map per le azioni, rispecchiando la possibilità di impostare valori predefiniti sugli elementi <action> nei file XML di navigazione. (b/150345605)

Correzioni di bug

  • Da Navigazione 2.2.2: è stato corretto un IllegalStateException durante il deep linking alla destinazione iniziale del grafico quando sono presenti più istanze di NavHostFragment nell'attività. (b/147378752)

Aggiornamenti delle dipendenze

Versione 2.3.0-alpha04

18 marzo 2020

androidx.navigation:navigation-*:2.3.0-alpha04 viene ritirata. La versione 2.3.0-alpha04 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto il supporto per le attività e le destinazioni dei frammenti dei moduli delle funzionalità in Navigation Kotlin DSL. (b/148969800)

Modifiche alle API

  • La classe DynamicExtras non utilizza più un pattern di builder e ora può essere costruita direttamente. (aosp/1253671)
  • Ora DynamicActivityNavigator accetta un Context nel costruttore anziché un Activity. (aosp/1250252)

Correzioni di bug

  • NavigationUI non ignora più le etichette vuote (ovvero una destinazione con android:label=””) e ora imposta correttamente il titolo su una stringa vuota. (b/148679860)

Aggiornamenti delle dipendenze

  • Gli artefatti delle funzionalità dinamiche di navigazione ora dipendono da Play Core 1.6.5. (b/149556401)

Versione 2.3.0-alpha03

4 marzo 2020

androidx.navigation:navigation-*:2.3.0-alpha03 viene ritirata. La versione 2.3.0-alpha03 contiene questi commit.

Modifiche alle API

  • Anziché fare affidamento sulla classe concreta DrawerLayout, AppBarConfiguration ora utilizza l'interfaccia Openable introdotta in CustomView 1.1.0-alpha02 (che DrawerLayout implementa a partire da DrawerLayout 1.1.0-alpha04), consentendoti di utilizzare implementazioni personalizzate di Openable con NavigationUI. (b/129030452)

Correzioni di bug

  • Le regole navigation-common-ktx ProGuard ora conservano correttamente solo le classi NavArgs utilizzate anziché tutte le istanze NavArgs. (b/150213558)

Modifiche alle dipendenze

  • La navigazione ha ripristinato la sua dipendenza da Core 1.2.0 e ora dipende da Core 1.1.0 per evitare di costringere gli sviluppatori a passare a una dipendenza più recente quando la navigazione non dipende da nuove API in Core 1.2.0.

Versione 2.3.0-alpha02

19 febbraio 2020

androidx.navigation:navigation-*:2.3.0-alpha02 viene ritirata. La versione 2.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • NavBackStackEntry ora ti consente di accedere a un SavedStateHandle adatto per archiviare piccole quantità di stato salvato che devono essere associate a una particolare voce dello stack precedente. Per un esempio di caso d'uso, vedi Restituzione di un risultato. (b/79672220)

Modifiche alle API

  • Sono stati aggiunti metodi pratici di getCurrentBackStackEntry() e getPreviousBackStackEntry() per semplificare il recupero di un NavBackStackEntry per le destinazioni attuali e precedenti. (b/79672220)

Correzioni di bug

  • navigateUp() ora passa gli argomenti della destinazione corrente e KEY_DEEP_LINK_INTENT alla destinazione precedente quando avvii l'app nel tuo stack di attività. (b/147456890)

Modifiche alle dipendenze

Versione 2.3.0-alpha01

5 febbraio 2020

androidx.navigation:navigation-*:2.3.0-alpha01 viene ritirata. La versione 2.3.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Il nuovo artefatto navigation-testing fornisce una classe TestNavHostController. Questa classe fornisce un'alternativa all'utilizzo di un mock NavController durante i test di navigazione, che consente di impostare la destinazione corrente e verificare lo stack precedente dopo le operazioni di navigazione. (b/140884273)
  • Il nuovo navigation-dynamic-features-fragment (e la sua dipendenza transitiva, navigation-dynamic-features-runtime) ti consente di includere destinazioni o interi grafici di navigazione (tramite <include-dynamic>) dai moduli delle funzionalità, fornendo un'installazione semplice dei moduli delle funzionalità on demand quando si naviga verso queste destinazioni. Per saperne di più, consulta Navigare con i moduli delle funzionalità. (b/132170186)

Correzioni di bug

  • Da Navigazione 2.2.1: i link diretti senza parametri di query ora ignorano correttamente tutti i parametri di query anziché aggiungerli agli elementi {argument} finali o non corrispondere al link diretto. (b/147447512)
  • Da Navigazione 2.2.1: le regole di navigation-ui ProGuard per DrawerArrowDrawable sono state aggiornate per garantire che android.enableJetifier=true non sia richiesto. (b/147610424)
  • Da Navigazione 2.2.1: il modulo navigation-common-ktx ora ha un nome pacchetto manifest univoco anziché condividere lo stesso nome pacchetto manifest di navigation-runtime-ktx. (aosp/1141947)

Aggiornamenti delle dipendenze

Versione 2.2.2

Versione 2.2.2

15 aprile 2020

androidx.navigation:navigation-*:2.2.2 vengono rilasciati. La versione 2.2.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un IllegalStateException durante il deep linking alla destinazione iniziale del grafico quando hai più istanze di NavHostFragment nella tua Attività. (b/147378752)
  • NavigationUI non ignora più le etichette vuote (ovvero una destinazione con android:label=””) e ora imposta correttamente il titolo su una stringa vuota. Questa funzionalità è stata rilasciata in precedenza in Navigation 2.3.0-alpha04. (b/148679860)
  • Le regole navigation-common-ktx ProGuard ora conservano correttamente solo le classi NavArgs utilizzate anziché tutte le istanze NavArgs. Questa funzionalità è stata rilasciata in precedenza in Navigation 2.3.0-alpha03. (b/150213558

Aggiornamenti delle dipendenze

Versione 2.2.1

Versione 2.2.1

5 febbraio 2020

androidx.navigation:navigation-*:2.2.1 viene ritirata. La versione 2.2.1 contiene questi commit.

Correzioni di bug

  • I link diretti senza parametri di query ora ignorano correttamente tutti i parametri di query anziché aggiungerli agli elementi {argument} finali o non corrispondere al link diretto. (b/147447512)
  • Le regole di navigation-ui ProGuard per DrawerArrowDrawable sono state aggiornate per garantire che android.enableJetifier=true non sia richiesto. (b/147610424)
  • Il modulo navigation-common-ktx ora ha un nome del pacchetto manifest univoco anziché condividere lo stesso nome del pacchetto manifest di navigation-runtime-ktx. (aosp/1141947)

Aggiornamenti delle dipendenze

Versione 2.2.0

Versione 2.2.0

22 gennaio 2020

androidx.navigation:navigation-*:2.2.0 viene ritirata. La versione 2.2.0 contiene questi commit.

Modifiche importanti dalla versione 2.1.0

  • NavBackStackEntry: ora puoi chiamare NavController.getBackStackEntry(), passando l'ID di una destinazione o di un grafico di navigazione nello stack precedente. Il valore NavBackStackEntry restituito fornisce un LifecycleOwner, ViewModelStoreOwner (lo stesso restituito da NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner basati sulla navigazione, oltre agli argomenti utilizzati per avviare la destinazione.
  • Integrazione di Lifecycle ViewModel SavedState: SavedStateViewModelFactory è ora la factory predefinita utilizzata quando si utilizza by navGraphViewModels() o il costruttore ViewModelProvider con un ViewModelStoreOwner restituito da NavController.getBackStackEntry() o NavController.getViewModelStoreOwner().
  • Supporto dei parametri di ricerca per i link diretti: i link diretti con parametri di ricerca ora supportano i parametri di ricerca riordinati; gli argomenti che hanno un valore predefinito o sono nullabili ora sono facoltativi quando vengono abbinati ai link diretti.
  • Supporto migliorato per le animazioni: NavHostFragment ora utilizza FragmentContainerView di Fragment 1.2.0, risolvendo i problemi di ordinamento Z delle animazioni e l'invio degli inset della finestra ai fragment.

Versione 2.2.0-rc04

18 dicembre 2019

androidx.navigation:navigation-*:2.2.0-rc04 viene ritirata. La versione 2.2.0-rc04 contiene questi commit.

Correzioni di bug

  • Sono state modificate le animazioni di dissolvenza predefinite utilizzate da navigation-ui in modo che corrispondano a quelle modificate in Fragment 1.2.0-rc04. (b/145769814)

Versione 2.2.0-rc03

4 dicembre 2019

androidx.navigation:navigation-*:2.2.0-rc03 viene ritirata. La versione 2.2.0-rc03 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema di analisi dei link diretti quando si utilizzano parametri di query e un argomento come ultima parte del percorso che impediva l'analisi di più di un carattere dell'argomento del percorso finale. (b/144554689)
  • È stato risolto un problema di analisi dei link diretti per cui i parametri facoltativi ricevevano "@null" anziché null. (b/141613546)
  • NavHostFragment ora ripristina correttamente il grafico dopo una modifica alla configurazione quando viene utilizzato con FragmentContainerView. (b/143752103)

Modifiche alle dipendenze

  • La navigazione ora dipende da Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03 e Fragment 1.2.0-rc03, a seconda dei casi.

Versione 2.2.0-rc02

7 novembre 2019

androidx.navigation:navigation-*:2.2.0-rc02 viene ritirata. La versione 2.2.0-rc02 contiene questi commit.

Modifiche alle dipendenze

  • La navigazione ora dipende da androidx.lifecycle 2.2.0-rc02.

Versione 2.2.0-rc01

23 ottobre 2019

androidx.navigation:navigation-*:2.2.0-rc01 viene rilasciato senza modifiche dal giorno 2.2.0-beta01. La versione 2.2.0-rc01 contiene questi commit.

Versione 2.2.0-beta01

9 ottobre 2019

androidx.navigation:navigation-*:2.2.0-beta01 viene ritirata. La versione 2.2.0-beta01 contiene questi commit.

Nuove funzionalità

  • NavDestination e le relative sottoclassi ora sostituiscono toString() per fornire informazioni più utili durante il debug. (b/141264986)

Modifiche al funzionamento

  • I parametri di query aggiuntivi ora vengono ignorati durante la corrispondenza dei link diretti anziché causare l'esito negativo della corrispondenza. (b/141482822)

Correzioni di bug

  • È stato risolto un problema per cui gli argomenti nel percorso di un link diretto venivano ignorati se venivano specificati anche i parametri di ricerca. (b/141505755)
  • L'estensione navArgs() Kotlin su Activity ora ha un messaggio di errore migliore quando non sono presenti componenti aggiuntivi. (b/141408999)
  • Le classi Java Directions generate da Safe Args ora contengono valori predefiniti. (b/141099045)
  • Le classi Java Args generate da Safe Args ora contengono valori predefiniti. (b/140123727)
  • Quando si utilizza un Toolbar, NavigationUI non anima più la modifica del testo quando si passa da una destinazione di primo livello all'altra. (b/140848160)

Versione 2.2.0-alpha03

18 settembre 2019

androidx.navigation:navigation-*:2.2.0-alpha03 viene ritirata. La versione 2.2.0-alpha03 contiene questi commit.

Modifiche al funzionamento

  • Se chiami il numero setViewModelStore() dopo aver chiamato il numero setGraph, ora riceverai un messaggio IllegalStateException. Questo valore deve essere sempre impostato da NavHost nell'ambito della configurazione iniziale per garantire che tutte le istanze NavBackStackEntry abbiano uno spazio di archiviazione coerente per le istanze ViewModel. (aosp/1111821)

Correzioni di bug

  • È stato corretto un ConcurrentModificationException durante l'utilizzo di istanze ViewModel collegate a più istanze ViewModelStore con ambito del grafico di navigazione diverso. (aosp/1112257)

Versione 2.2.0-alpha02

5 settembre 2019

androidx.navigation:navigation-*:2.2.0-alpha02 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • I link diretti con parametri di query ora supportano i parametri di query riordinati; gli argomenti che hanno un valore predefinito o sono nullabili ora sono facoltativi quando vengono abbinati i link diretti. (b/133273839)
  • Ora puoi chiamare NavController.getBackStackEntry(), passando l'ID di una destinazione o di un grafico di navigazione nello stack precedente. Il valore NavBackStackEntry restituito fornisce un LifecycleOwner, ViewModelStoreOwner (lo stesso restituito da NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner basati sulla navigazione, oltre agli argomenti utilizzati per avviare la destinazione. (aosp/1101691, aosp/1101710)

Correzioni di bug

  • Risolto un problema per cui l'aggiunta di un NavHostFragment a ViewPager2 non riusciva e veniva visualizzato un IllegalArgumentException. (b/133640271)
  • NavInflater ora evita di chiamare getResourceName() inutilmente, velocizzando il tempo di espansione fino al 40%. (b/139213740)

Versione 2.2.0-alpha01

7 agosto 2019

androidx.navigation:navigation-*:2.2.0-alpha01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • SavedStateViewModelFactory ora è la fabbrica predefinita utilizzata quando si utilizza by navGraphViewModels() o il costruttore ViewModelProvider con un ViewModelStoreOwner restituito da NavController.getViewModelStoreOwner(). (b/135716331)

Modifiche all'API

Correzioni di bug

  • NavHostFragment ora utilizza FragmentContainerView, risolvendo i problemi di ordinamento Z delle animazioni e l'invio degli inset della finestra ai fragment. (b/137310379)

Versione 2.1.0

Versione 2.1.0

5 settembre 2019

androidx.navigation:navigation-*:2.1.0 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Modifiche importanti dalla versione 2.0.0

  • ViewModel con ambito impostato su un grafico di navigazione: ora puoi creare ViewModel con ambito impostato a livello di grafico di navigazione utilizzando il delegato della proprietà by navGraphViewModels() per gli utenti Kotlin che utilizzano le librerie -ktx o l'API getViewModelStoreOwner() aggiunta a NavController. Per ulteriori informazioni, consulta Condividere dati correlati all'interfaccia utente tra le destinazioni.
  • Destinazioni della finestra di dialogo: ora puoi creare destinazioni <dialog> che mostreranno una DialogFragment quando navigate. NavHostFragment supporta le destinazioni di dialogo per impostazione predefinita. Per ulteriori informazioni, vedi Creare una destinazione da un DialogFragment.
  • Navigazione tramite URI: ora puoi navigate utilizzando un Uri, che utilizza il <deepLink> che hai aggiunto a una destinazione per raggiungerla. Per ulteriori informazioni, vedi Navigare utilizzando l'URI.
  • NavHostController: le API utilizzate specificamente per la creazione di un NavHost personalizzato sono state spostate in NavHostController, consentendo alle implementazioni di connettere il proprio NavController all'hosting LifecycleOwner, OnBackPressedDispatcher e ViewModelStore.

Versione 2.1.0-rc01

7 agosto 2019

androidx.navigation:navigation-*:2.1.0-rc01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

  • L'API getViewModelStore() obsoleta su NavController introdotta in 2.1.0-alpha02 è stata rimossa. (aosp/1091021)

Versione 2.1.0-beta02

19 luglio 2019

androidx.navigation:*:2.1.0-beta02 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stata rimossa la dipendenza Jacoco involontaria introdotta in 2.1.0-beta01. (b/137782950)

Versione 2.1.0-beta01

17 luglio 2019

androidx.navigation:*:2.1.0-beta01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • NavigationUI ora anima la rimozione del pulsante Su quando si utilizza setupWithNavController() con un Toolbar o un CollapsingToolbarLayout. (b/131403621)

Correzioni di bug

  • È stato risolto un problema di sincronizzazione quando si utilizzano più NavHostFragment con lo stesso contenitore con findNavController(). (b/136021571)

Versione 2.1.0-alpha06

2 luglio 2019

androidx.navigation:*:2.1.0-alpha06 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • L'attributo app:navGraph utilizzato da NavHostFragment è stato spostato nell'artefatto navigation-runtime. I navigatori personalizzati che possono essere aggiunti tramite XML devono utilizzare questo attributo per ottenere l'integrazione con il riquadro Host dell'editor di navigazione. (b/133880955)

Modifiche all'API

  • L'API getViewModelStore() su NavController è stata ritirata a favore del nuovo metodo getViewModelStoreOwner() che restituisce un ViewModelStoreOwner. (aosp/987010)
  • L'implementazione delle destinazioni a finestra mobile, come le destinazioni <dialog>, è stata generalizzata in un'interfaccia di marcatore, FloatingWindow, che ora implementano tutte le destinazioni <dialog>. I metodi NavigationUI per interagire con la barra delle app superiore ora ignorano le destinazioni FloatingWindow. (b/133600763)

Modifiche al funzionamento

  • Ora la navigazione mantiene correttamente il suo stato sincronizzato con ciò che viene visualizzato sullo schermo quando si utilizza una destinazione <dialog>. Di conseguenza, Navigazione ora mostra automaticamente le destinazioni <dialog> quando raggiungi una destinazione non di dialogo e non di attività, ad esempio una destinazione <fragment>. (b/134089818)

Correzioni di bug

  • La navigazione ora sopprime l'animazione che si verifica durante la ricreazione dell'attività durante la gestione di un link diretto, correggendo un flash visivo. (b/130362979)
  • È stato corretto un bug per cui lo stack di navigazione precedente non era sincronizzato durante l'inserimento di un fragment come fragment iniziale. (b/133832218)

Versione 2.1.0-alpha05

5 giugno 2019

androidx.navigation:*:2.1.0-alpha05 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

  • Le API correlate all'host su NavController sono state rinominate e spostate in una nuova sottoclasse di NavController, NavHostController. (aosp/966091)
  • Il metodo NavController setHostOnBackPressedDispatcherOwner() è stato sostituito dal metodo setOnBackPressedDispatcher() di NavHostController e ora richiede di chiamare setLifecycleOwner() prima di chiamarlo. (aosp/965409)
  • NavHostController ora contiene un metodo enableOnBackPressed(boolean) che sostituisce la classe NavHostOnBackPressedManager precedentemente restituita da setHostOnBackPressedDispatcherOwner(). (aosp/966091)

Correzioni di bug

  • È stato risolto un problema per cui lo stack precedente non era corretto dopo la navigazione tramite URI. (b/132509387)
  • I link diretti gestiti automaticamente da NavController vengono attivati una sola volta. (b/132754763)

Versione 2.1.0-alpha04

16 maggio 2019

androidx.navigation:*:2.1.0-alpha04 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • NavHostFragment rispetta correttamente app:defaultNavHost quando intercetta gli eventi del pulsante Indietro del sistema, correggendo una regressione in Navigazione 2.1.0-alpha03. b/132077777
  • DialogFragmentNavigator ora gestisce correttamente le operazioni popBackStack() e navigateUp(). b/132576764
  • È stato risolto un problema di IllegalStateException: unknown destination during restore durante lo spostamento ripetuto tra grafici nidificati. b/131733658

Versione 2.1.0-alpha03

7 maggio 2019

androidx.navigation:*:2.1.0-alpha03 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Problemi noti

  • NavHostFragment continua a intercettare il pulsante Indietro del sistema nonostante l'utilizzo di app:defaultNavHost="false" b/132077777

Nuove funzionalità

  • Ora puoi creare destinazioni <dialog> che mostreranno un DialogFragment quando navigate. NavHostFragment supporta le destinazioni di dialogo per impostazione predefinita. b/80267254
  • Oltre a chiamare navigate con un ID risorsa o un'istanza NavDirections, ora puoi navigare tramite un Uri, che utilizza l'<deepLink> che hai aggiunto a una destinazione per raggiungere quella corretta. b/110412864

Modifiche al funzionamento

  • Le animazioni predefinite fornite da NavigationUI sono state accelerate da 400 ms a 220 ms per corrispondere alla velocità di animazione predefinita di attività e fragment. b/130055522

Modifiche all'API

  • Il metodo createFragmentNavigator() di NavHostFragment è stato ritirato e la sua funzionalità è stata spostata nel nuovo metodo onCreateNavController() per chiarire che questo è il punto di ingresso corretto per aggiungere navigatori personalizzati quando si crea una sottoclasse di NavHostFragment. b/122802849
  • È stato aggiunto un metodo hasDeepLink() a NavDestination per consentirti di verificare se un determinato Uri può essere gestito da quella destinazione o, nel caso di un NavGraph, da qualsiasi destinazione nel grafico di navigazione. b/117437718

Correzioni di bug

  • Ora gli argomenti predefiniti vengono passati correttamente alle istanze OnDestinationChangedListener. b/130630686
  • NavHostFragment ora intercetta gli eventi Indietro del sistema utilizzando OnBackPressedDispatcher, correggendo un problema che si verifica durante la navigazione condizionale nei metodi del ciclo di vita dei fragment quando si torna a un fragment. b/111598096
  • Per Safe Args, un android:defaultValue=”@null” con un app:argType non specificato viene ora dedotto correttamente come argomento string. b/129629192

Versione 2.1.0-alpha02

3 aprile 2019

androidx.navigation:*:2.1.0-alpha02 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Ora puoi creare ViewModel con ambito a livello di grafico di navigazione tramite il delegato della proprietà by navGraphViewModels() per gli utenti Kotlin o utilizzando l'API getViewModelStore() aggiunta a NavController. b/111614463

Modifiche all'API

  • Ora puoi aggiungere un app:targetPackage a una destinazione <activity> per limitare il nome del pacchetto corrispondente. Supporta app:targetPackage="${applicationId}" per limitare il pacchetto al tuo ID applicazione. b/110975456

Correzioni di bug

  • android:name per le destinazioni <activity> non viene più analizzato in una classe al momento dell'inflazione, evitando ClassNotFoundExceptions quando si utilizzano funzionalità dinamiche. b/124538597

Versione 2.1.0-alpha01

19 marzo 2019

Questa è la prima release alpha di Navigazione 2.1.0.

Modifiche alle dipendenze

  • La navigazione ora dipende da androidx.core:core:1.0.1 e androidx.fragment:fragment:1.1.0-alpha05. Questa release rimuove anche la dipendenza da androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

Modifiche alle API

  • È stato aggiunto un nuovo metodo Navigation.createNavigateOnClickListener(NavDirections) come alternativa alla creazione di un listener di clic con un ID risorsa e un bundle. b/127631752
  • FragmentNavigator.instantiateFragment è stato ritirato. L'implementazione predefinita ora utilizza FragmentFactory per creare istanze di Fragment. b/119054429

Correzioni di bug

  • La navigazione non invia più un Bundle nullo quando sono presenti argomenti allegati a una destinazione, risolvendo un problema durante l'utilizzo di android:defaultValue="@null". b/128531879
  • Safe Args ora dipende da KotlinPoet 1.1.0, risolvendo un problema con nomi dei pacchetti estremamente lunghi. b/123654948

Versione 2.0.0

Versione 2.0.0

14 marzo 2019

La navigazione 2.0.0 viene rilasciata senza modifiche rispetto a 2.0.0-rc02.

Versione 2.0.0-rc02

6 marzo 2019

Navigation 2.0.0-rc02 fornisce nuovi artefatti con l'ID gruppo androidx.navigation e modifica le dipendenze con gli equivalenti AndroidX.

Il comportamento della versione 2.0.0-rc02 è identico a quello della versione 1.0.0-rc02 di Navigation e non dovrebbero essere necessarie modifiche al codice per l'aggiornamento dalla versione 1.0.0-rc02, oltre all'aggiornamento delle dipendenze in modo che corrispondano alle nuove dipendenze.

Per utilizzare le release 2.X di Navigation, il progetto deve aver eseguito la migrazione ad AndroidX. La versione stabile 1.0 di Navigation sarà l'ultima release a utilizzare le dipendenze della libreria di supporto. Tutti gli sviluppi futuri successivi alla versione 1.0 si baseranno su AndroidX e sulla release stabile 2.0.

Dipendenze precedenti ad AndroidX

Per le versioni precedenti ad AndroidX di Navigation, includi queste dipendenze:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

Per Safe Args, aggiungi il seguente classpath nel file build.gradle di primo livello

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

Versione 1.0.0

Versione 1.0.0

14 marzo 2019

La navigazione 1.0.0 viene rilasciata senza modifiche rispetto a 1.0.0-rc02.

Versione 1.0.0-rc02

26 febbraio 2019

Questo è il secondo candidato per la release stabile 1.0.0 di Navigation. Questa release contiene una serie di correzioni di bug.

Correzioni di bug

  • Risolto un problema per cui popBackStack() veniva ignorato se il grafico radice non aveva un ID b/126251695
  • navigateUp() ora gestisce correttamente il ritorno all'attività dell'app quando viene chiamato dopo la gestione di un link diretto senza FLAG_ACTIVITY_NEW_TASK b/126082008
  • È stato risolto un problema relativo a ActivityNavigator.applyPopAnimationsToPendingTransition che non applicava l'animazione di uscita corretta b/126237567
  • Il codice Kotlin generato da Safe Args ora esegue correttamente l'escape delle parole chiave Kotlin come in e fun nel nome del pacchetto associato alla classe R. b/126020455

Versione 1.0.0-rc01

21 febbraio 2019

Questo è un candidato per la release stabile 1.0.0 di Navigation. Questa release contiene una correzione di bug.

Correzioni di bug

  • È stato risolto un problema durante l'utilizzo di Fragment e delle operazioni di navigazione singleTop b/124294805

Versione 1.0.0-beta02

12 febbraio 2019

Questa release include una serie di miglioramenti minori e importanti correzioni di bug.

Nuove funzionalità

  • Ora puoi utilizzare 0 come android:defaultValue per gli argomenti reference. b/124248602

Modifiche al funzionamento

  • Ora le corrispondenze esatte dei link diretti hanno la priorità sui link diretti con corrispondenze di .* o argomenti. b/123969518

Correzioni di bug

  • popBackStack() e navigateUp ora restituiscono correttamente false quando viene estratta l'ultima destinazione dallo stack precedente, correggendo una regressione introdotta in 1.0.0-beta01. b/123933201
  • La navigazione ora imposta correttamente ClassLoader durante il ripristino dello stato dell'istanza salvata, evitando problemi quando si utilizzano classi personalizzate nello stato salvato di Navigator o negli argomenti inviati a un NavDestination. b/123893858
  • Le classi NavArgs generate da Safe Args non vanno più in arresto anomalo durante il ripristino di un argomento Parcelable[] dallo stato dell'istanza salvata. b/123963545
  • Safe Args ora pulisce correttamente le classi Kotlin generate non necessarie. b/124120883

Versione 1.0.0-beta01

4 febbraio 2019

Si tratta della prima release beta di Navigation. In futuro, l'API Navigation dovrebbe rimanere stabile fino alla versione successiva, a meno che non si verifichi un problema critico. Questa release contiene alcune correzioni di bug e modifiche del comportamento.

Modifiche al funzionamento

  • La navigazione ora garantisce che i valori predefiniti degli argomenti vengano trattati in modo identico in fase di runtime e tramite Safe Args. Di conseguenza, solo gli argomenti con un app:argType="reference" possono avere un valore predefinito che punta a un'altra risorsa (ad esempio, @color/colorPrimary). Il tentativo di utilizzare un valore predefinito di riferimento con un app:argType diverso genererà un'eccezione durante l'analisi dell'XML di navigazione. b/123551990
  • Safe Args ora dipende dal plug-in Android per Gradle 3.3.0 aosp/888413
  • Safe Args ora dipende da Kotlin 1.3.20 aosp/888414

Correzioni di bug

  • Ora Safe Args può essere utilizzato nei moduli di libreria e funzionalità in tutte le versioni del plug-in Android per Gradle. b/121304903
  • È stato corretto un problema di regressione che causava l'uscita di tutte le copie di una destinazione dalla parte superiore dello stack precedente con una singola operazione popBackStack(), anziché di una sola destinazione alla volta. b/123552990
  • È stato risolto un problema per cui lo stato FragmentNavigator veniva desincronizzato con lo stato di NavController, causando un IllegalStateException quando si tentava di ripristinare lo stack precedente. b/123803044
  • È stato risolto un problema per cui la freccia indietro gestita da NavigationUI non veniva visualizzata quando si utilizzava ProGuard con l'offuscamento. b/123449431
  • Il codice generato da Safe Args ora gestisce correttamente l'utilizzo di un app:argType che punta a una classe interna statica nel formato .OuterClass$InnerClass. b/123736741
  • Il codice Java generato da Safe Args ora gestisce correttamente le azioni globali e le destinazioni nidificate in profondità. b/123347762

Versione 1.0.0-alpha11

23 gennaio 2019

Questa è una release di correzione rapida di 1.0.0-alpha10 che risolve un problema relativo a Safe Args.

Correzioni di bug

  • Risolve un problema per cui Safe Args non riusciva a importare la classe Directions associata alle azioni globali. b/123307342

Versione 1.0.0-alpha10

23 gennaio 2019

Problemi noti

  • Safe Args non riesce a importare la classe Directions associata alle azioni globali. b/123307342

Questa release contiene modifiche che provocano errori nell'API. Consulta la sezione Modifiche che provocano errori di seguito.

Nuove funzionalità

  • Gli utenti Kotlin ora possono utilizzare il delegato di proprietà by navArgs() per ottenere in modo differito un riferimento a una classe NavArgs generata da Safe Args in un Activity o Fragment. b/122603367
  • Safe Args ora ti consente di generare codice Kotlin applicando il plug-in androidx.navigation.safeargs.kotlin. Il codice Kotlin è creato appositamente per i moduli solo Kotlin, utilizzando argomenti predefiniti e classi immutabili rispetto al pattern builder ancora disponibile tramite il plug-in androidx.navigation.safeargs precedente. b/110263087

Modifiche al comportamento

  • Ora i link diretti corrispondenti sono orientati verso il link diretto con il maggior numero di argomenti corrispondenti. b/118393029
  • La chiamata a setGraph() su un NavController ora reimposta lo stack indietro. b/111450672
  • I link diretti sconosciuti non generano più un IllegalStateException, ma vengono ignorati, risolvendo i problemi relativi a NavHostFragment nidificati o multipli. b/121340440

Modifiche che provocano un errore

  • Il metodo NavOptions.applyPopAnimationsToPendingTransition() per applicare le animazioni pop a un'attività è stato spostato in ActivityNavigator. b/122413117
  • Safe Args ora evita di duplicare classi identiche per le azioni senza argomenti. Il tipo restituito per i metodi senza argomenti nelle classi NavDirections generate è ora NavDirections. b/123233147
  • Le classi Directions generate da Safe Args non hanno più un costruttore pubblico. Devi interagire solo con i metodi statici generati. b/123031660
  • Le classi NavDirections generate da Safe Args non hanno più un costruttore pubblico. Devono essere generate solo tramite i metodi statici nelle classi Directions generate.b/122963206
  • Il valore Bundle restituito da NavDirections' getArguments() ora è contrassegnato come @NonNull anziché @Nullable. b/123243957

Correzioni di bug

  • NavDeepLinkBuilder ora gestisce correttamente più PendingIntent simultanei alla stessa destinazione utilizzando gli argomenti che trasmetti per determinare l'unicità. b/120042732
  • NavController ora gestisce correttamente le operazioni popBackStack() quando utilizzi un NavHostFragment nidificato o altri fragment secondari con uno stack precedente. b/122770335
  • NavigationUI ora imposta correttamente la descrizione dei contenuti del pulsante Su. b/120395362
  • Le classi Directions generate da Safe Args ora gestiscono correttamente le azioni globali che hanno lo stesso ID di un'azione su una destinazione. b/122962504
  • Le classi NavDirections generate da Safe Args ora hanno correttamente valori hashCode() uguali quando equals() restituirebbe true. b/123043662
  • FragmentNavigator ora genera un messaggio di errore migliore se tenti di eseguire FragmentTransactions personalizzate sulle NavHostFragment dell'FragmentManager. Devi sempre utilizzare getChildFragmentManager(). b/112927148

Versione 1.0.0-alpha09

18 dicembre 2018

Questa release contiene modifiche che provocano errori nell'API. Consulta la sezione Modifiche che provocano errori di seguito.

Abbiamo scelto di non continuare lo sviluppo dell'artefatto android.arch.navigation:navigation-testing. Sebbene si sia dimostrato utile per i test interni di NavController, consigliamo vivamente strategie di test alternative, come la simulazione dell'istanza NavController per verificare che vengano effettuate le chiamate navigate() corrette. Questo approccio è descritto in dettaglio nella presentazione su Single Activity all'AndroidDevSummit 2018 e lavoreremo su ulteriore documentazione specificamente incentrata sui test con Navigation.

Nuove funzionalità

  • Le MenuItem con menuCategory="secondary" non verranno più visualizzate quando vengono utilizzate con i metodi NavigationUI. b/120104424
  • AppBarConfiguration ora ti consente di impostare un'istanza di OnNavigateUpListener di riserva che verrà chiamata quando navController.navigateUp() restituisce false. b/79993862 b/120690961

Modifiche che provocano un errore

  • Quando utilizzi un <argument> con un argType="reference", la navigazione non analizza più il riferimento, ma fornisce l'ID risorsa non elaborato. b/111736515
  • onNavDestinationSelected() ora torna alla destinazione iniziale del grafico di navigazione per impostazione predefinita, rendendoli coerenti con i metodi setup. Aggiungi menuCategory="secondary" al tuo MenuItem per evitare di estrarre lo stack precedente. aosp/852869
  • I metodi fromBundle() delle classi Args generate ora accettano un Bundle non nullo anziché un Bundle annullabile. aosp/845616

Correzioni di bug

  • Gli argomenti ora vengono analizzati correttamente dai link diretti come argType anziché sempre come stringhe b/110273284
  • La navigazione ora esporta correttamente le risorse pubbliche b/121059552
  • Safe Args è ora compatibile con il plug-in Android per Gradle 3.4 Canary 4 e versioni successive b/119662045

Versione 1.0.0-alpha08

6 dicembre 2018

Questa release contiene modifiche che provocano errori nell'API. Consulta la sezione Modifiche che provocano errori di seguito.

Nuove funzionalità

  • Le etichette di destinazione, se utilizzate con i metodi NavigationUI, ora sostituiranno automaticamente le istanze {argName} nel tuo android:label con l'argomento corretto b/80267266
  • La navigazione ora dipende dalla libreria di supporto 28.0.0 b/120293333

Modifiche che provocano un errore

  • OnNavigatedListener è stato rinominato in OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener ora passa anche il Bundle degli argomenti aosp/837142
  • Gli attributi app:clearTask e app:launchDocument e i relativi metodi sono stati rimossi. Utilizza app:popUpTo con la radice del grafico per rimuovere tutte le destinazioni dallo stack precedente. b/119628354
  • ActivityNavigator.Extras ora utilizza un pattern Builder e aggiunge la possibilità di impostare qualsiasi flag Intent.FLAG_ACTIVITY_ aosp/828140
  • NavController.onHandleDeepLink è stato rinominato in handleDeepLink aosp/836063
  • Molte classi e metodi non destinati alla creazione di sottoclassi, ad esempio NavOptions, NavInflater, NavDeepLinkBuilder e AppBarConfiguration, sono stati resi final aosp/835681
  • Il metodo NavHostFragment.setGraph() obsoleto è stato rimosso aosp/835684
  • Il metodo NavigationUI.navigateUp(DrawerLayout, NavController) obsoleto è stato rimosso. aosp/835684
  • La creazione di frammenti è stata spostata in FragmentNavigator, il che semplifica la delega della creazione di frammenti a un FragmentFactory. b/119054429
  • Il costruttore per NavGraphNavigator non accetta più Context aosp/835340
  • NavigatorProvider ora è una classe, anziché un'interfaccia. Il NavigatorProvider restituito da getNavigatorProvider() non ha modificato la sua funzionalità. aosp/830660
  • NavDestination.navigate() è stato rimosso. Chiama navigate() al numero Navigator invece. aosp/830663
  • Refactoring significativo di Navigator, che non richiede più OnNavigatorNavigatedListener e fa sì che navigate restituisca NavDestination a cui è stata eseguita la navigazione.
  • Le istanze Navigator non possono più inviare eventi popup a NavController. Valuta la possibilità di utilizzare un OnBackPressedCallback per intercettare le pressioni del pulsante Indietro e chiamare navController.popBackStack(). aosp/833716

Correzioni di bug

  • popUpTo ora funziona in modo coerente quando la destinazione è un elemento <navigation> b/116831650
  • Sono stati corretti diversi bug che causavano un IllegalArgumentException quando venivano utilizzati grafici nidificati b/118713731 b/113611083 b/113346925 b/113305559
  • L'attributo dataPattern delle destinazioni <activity> ora compilerà gli argomenti da argomenti non stringa chiamando toString() b/120161365

Safe Args

  • Safe Args supporta gli oggetti serializzabili, inclusi i valori Enum. I tipi enum possono impostare un valore predefinito utilizzando il valore letterale enum senza il nome della classe (ad es. app:defaultValue="READ") b/111316353
  • Safe Args supporta array di tutti i tipi supportati b/111487504
  • Safe Args ora ignora le sottocartelle delle directory delle risorse b/117893516
  • Safe Args aggiunge annotazioni @Overrideove opportuno b/117145301

Versione 1.0.0-alpha07

29 ottobre 2018

Nuove funzionalità

Modifiche che provocano un errore

  • Il modulo navigation-testing-ktx è stato integrato in navigation-testing artifact e non verrà più pubblicato.
  • L'artefatto navigation-testing ora ha una dipendenza dalla libreria standard Kotlin. L'API è stata modificata per essere più coerente con le convenzioni di Kotlin, ma puoi continuare a utilizzarla per i test scritti in Java.
  • I grafici di navigazione registrati nel manifest dei metadati non sono più supportati. b/118355937
  • Le azioni non possono più essere associate alle destinazioni <activity>. aosp/785539

Correzioni di bug

  • Ora i link diretti analizzano correttamente i parametri di ricerca. b/110057514
  • Le destinazioni delle attività ora applicano correttamente tutte le animazioni di entrata e uscita. b/117145284
  • È stato corretto un arresto anomalo che si verifica dopo le modifiche alla configurazione quando si utilizzano navigatori personalizzati. b/110763345

Safe Args

  • Safe Args ora ha una dipendenza fissa dal plug-in Android per Gradle 3.2.1. b/113167627
  • Ora è possibile generare indicazioni per le classi interne. b/117407555
  • È stato risolto un problema relativo alla generazione di indicazioni stradali per un grafico <include>. b/116542123

Versione 1.0.0-alpha06

20 settembre 2018

Nuove funzionalità

Modifiche alle API

  • Modifica che causa interruzione: il metodo Navigator navigate() ora accetta un parametro Navigator.Extras.
  • Il metodo getGraph() di NavController ora è NonNull b/112243286

Correzioni di bug

  • NavigationUI.setupWithNavController() non perde più le visualizzazioni se utilizzato con le visualizzazioni delle singole destinazioni b/111961977
  • Navigator onSaveState() ora viene chiamato una sola volta b/112627079

Safe Args

  • Le classi di indicazioni stradali della destinazione di navigazione ora estendono la classe di indicazioni stradali principale, se esistente b/79871405
  • Le classi Directions e Args ora hanno un'implementazione toString() utile b/111843389

Versione 1.0.0-alpha05

10 agosto 2018

Correzioni di bug

  • È stato corretto un bug che causava un comportamento errato dello stack di attività. b/111907708
  • Correzione di un bug in equals() delle classi Generated Args. b/111450897
  • Correzione di un errore di build in Safe Args. b/109409713
  • Correggi una conversione dagli identificatori di risorsa ai nomi Java b/111602491
  • Correggere i messaggi di errore relativi alla nullabilità nel plug-in Safe Args.
  • Aggiungi le annotazioni di nullabilità mancanti.

Versione 1.0.0-alpha04

19 luglio 2018

La navigazione 1.0.0-alpha04 e il plug-in Gradle Safe Args associato contengono una serie di modifiche alle API, modifiche al comportamento e correzioni di bug.

Modifiche al comportamento / alle API

  • NavHostFragment imposterà sempre il Fragment corrente come fragment di navigazione principale, assicurandosi che i fragment manager secondari vengano rimossi prima che venga rimosso il NavController esterno b/111345778

Safe Args

  • Modifica che provoca un errore: app:type è stato modificato in app:argType per evitare conflitti con altre librerie come ConstraintLayout 2.0.0-alpha1 b/111110548
  • I messaggi di errore di Safe Args ora sono selezionabili b/111534438
  • Le classi Args ora confermano che gli attributi NonNull non sono effettivamente nulli b/111451769
  • Sono state aggiunte annotazioni NonNull aggiuntive alle classi generate NavDirections e Args b/111455455 b/111455456

Correzioni di bug

  • È stato risolto un problema con il pulsante Indietro del sistema dopo il deep linking a una destinazione di frammento b/111515685

Versione 1.0.0-alpha03

12 luglio 2018

La navigazione 1.0.0-alpha03 e il plug-in Gradle Safe Args associato contengono una serie di modifiche alle API, modifiche al comportamento e correzioni di bug.

Modifiche al comportamento / alle API

  • È stato aggiunto un metodo NavigationUI.setupWithNavController per la barra degli strumenti b/109868820
  • È stato aggiunto un metodo NavigationUI.setupWithNavController per CollapsingToolbarLayout b/110887183
  • popBackStack() ora restituisce false quando lo stack delle attività precedenti è vuoto o quando l'ID destinazione specificato non è presente nello stack delle attività precedenti b/110893637
  • FragmentNavigator ora ignora le operazioni di navigazione dopo che FragmentManager ha salvato lo stato, evitando le eccezioni "Can not perform this action after onSaveInstanceState" b/110987825

Safe Args

  • Modifica sostanziale: i caratteri non alfanumerici nei nomi di azioni e argomenti verranno sostituiti dalla notazione camel case nei rispettivi nomi dei metodi NavDirections
    • Ad esempio, DemoController.index diventerà setDemoControllerIndex b/79995048
    • Ad esempio, action_show_settings diventerà actionShowSettings b/79642240
  • Modifica sostanziale: gli argomenti ora sono considerati non nulli per impostazione predefinita. Per consentire valori null su argomenti stringa e parcelable, aggiungi app:nullable="true" b/79642307
  • Ora puoi utilizzare app:type="long" con defaultValues nel formato "123L" b/79563966
  • Ora sono supportati gli argomenti Parcelable, utilizzando un nome di classe completo per app:type. L'unico valore predefinito supportato è "@null" b/79563966
  • Le classi Args ora implementano equals() e hashCode() b/79642246
  • Il plug-in Safe Args ora può essere applicato ai progetti di libreria b/80036553
  • Il plug-in Safe Args ora può essere applicato ai progetti delle funzionalità b/110011752

Correzioni di bug

  • Sono stati risolti i problemi di navigazione durante i metodi del ciclo di vita dei fragment b/109916080
  • Risolti problemi durante la navigazione ripetuta tra grafici nidificati b/110178671
  • Sono stati risolti i problemi relativi all'utilizzo di setPopUpTo con la prima destinazione nel grafico b/109909461
  • È stato risolto il problema per cui tutti i valori di app:defaultValue venivano passati come stringhe b/110710788
  • aapt2 incluso in Android Gradle Plugin 3.2 Beta 01 ora aggiunge regole di conservazione per ogni attributo android:name nei file XML di navigazione b/79874119
  • È stata corretta la perdita di memoria durante la sostituzione di FragmentNavigator predefinito b/110900142

Versione 1.0.0-alpha02

7 giugno 2018

Modifiche al comportamento

  • FragmentNavigator ora utilizza setReorderingAllowed(true). b/109826220

  • La navigazione ora decodifica gli argomenti analizzati dagli URL dei link diretti. b/79982454

Correzioni di bug

  • È stato corretto un IllegalStateException durante la chiamata a Navigate dai metodi del ciclo di vita di Fragment. b/79632233

  • La navigazione ora dipende dalla libreria di supporto 27.1.1 per correggere lo sfarfallio durante l'utilizzo delle animazioni. b/80160903

  • È stato corretto un IllegalArgumentException quando si utilizza defaultNavHost="true" come fragment secondario. b/79656847

  • È stato corretto un StackOverflowError durante l'utilizzo di NavDeepLinkBuilder. b/109653065

  • È stato corretto un IllegalArgumentException durante la navigazione a ritroso in un grafico nidificato. b/80453447

  • È stato risolto un problema relativo alla sovrapposizione di frammenti quando si utilizzava launchSingleTop. b/79407969

  • La navigazione ora crea lo stack precedente sintetico corretto per i grafici nidificati. b/79734195

  • NavigationUI ora evidenzia l'elemento corretto quando si utilizza un grafico nidificato come MenuItem. b/109675998

Modifiche alle API

  • L'attributo clearTask per le azioni e l'API associata in NavOptions sono stati ritirati. b/80338878

  • L'attributo launchDocument per le azioni e l'API associata in NavOptions sono stati ritirati. b/109806636

Versione 1.0.0-alpha01

8 maggio 2018

Navigation fornisce un framework per la creazione della navigazione in-app. Questa release iniziale è 1.0.0-alpha01.