Navigazione

Navigation è un framework per la navigazione tra le "destinazioni" all'interno di un'applicazione Android che fornisce un'API coerente, indipendentemente dal fatto che le destinazioni siano implementate come frammenti, attività o altri componenti.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
11 dicembre 2024 2.8.5 - - 2.9.0-alpha04

Dichiarazione delle dipendenze

Per aggiungere una dipendenza da Navigation, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.

Aggiungi le dipendenze per gli elementi necessari 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.8.4"

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

  // 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.8.4"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.8.4"
        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 da Migrazione ad AndroidX.

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

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. 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 del Monitoraggio problemi.

Versione 2.9

Versione 2.9.0-alpha04

11 dicembre 2024

androidx.navigation:navigation-*:2.9.0-alpha04 viene rilasciato. 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 all'API

  • Il sovraccarico NavGraph.setStartDestination specifico di Kotlin per la sicurezza del tipo è nascosto dalle sorgenti Java. (Ic640c, b/364634035)

Correzioni di bug

  • In Navigazione 2.8.5: è stato risolto un problema per cui NavHost poteva generare un'eccezione all'interno di PredictiveBackHandler se la pila di ritorno viene ridotta a 1 voce e viene attivato un ritorno di sistema nello stesso frame. (I1a429, b/375343407)
  • Da Navigazione 2.8.5: è stato corretto il problema relativo a NavDestination NullPointerException durante l'aggiornamento di startDestination di un grafo. (I99421, b/361560785)

Versione 2.9.0-alpha03

13 novembre 2024

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

Nuove funzionalità

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

Correzioni di bug

  • È stato corretto un ConcurrentModificationException che potrebbe verificarsi quando un LifecycleObserver collegato a un NavBackStackEntry attiva una modifica alla pila precedente quando l'LifecycleOwner host, ad esempio l'attività o il frammento contenente, modifica il proprio stato del ciclo di vita. (Ia9494)

Versione 2.9.0-alpha02

30 ottobre 2024

androidx.navigation:navigation-*:2.9.0-alpha02 viene rilasciato. 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 rilasciato. La versione 2.9.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Ora i navigatori personalizzati possono contrassegnare le proprie destinazioni come implementanti l'interfaccia SupportingPane, che indica a NavController che queste destinazioni verranno mostrate insieme ad altre. Ad esempio, utilizzando questa interfaccia, più destinazioni possono essere RESUMED contemporaneamente. (Id5559)
  • In Navigazione 2.8.3: sono stati aggiunti nuovi controlli di lint per i moduli navigation-common, navigation-runtime e navigation-compose per identificare eventuali percorsi sicuri per i tipi che non sono annotati correttamente con @Serializable. Questo controllo viene applicato a tutte le funzioni di estensione NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • In Navigazione 2.8.3: sono stati aggiunti nuovi controlli lint per i moduli navigation-common, navigation-runtime e navigation-compose per identificare eventuali percorsi sicuri per i tipi con argomenti Enum non 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 Enumeration class not found per suggerire l'utilizzo dell'annotazione @Keep nel caso in cui la classe Enum venga cancellata nelle build minimizzate. (I90e79, b/358137294)

Problemi noti

  • Esiste un problema con le nuove regole lint aggiunte in Navigation 2.8.* che causano un errore Obsolete custom lint check durante il tentativo di eseguire lint con il plug-in Gradle per Android 8.4 e versioni successive. (b/368070326, b/371463741)

Versione 2.8

Versione 2.8.5

11 dicembre 2024

androidx.navigation:navigation-*:2.8.5 viene rilasciato. 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 la pila di ritorno viene ridotta a 1 voce e viene attivato un ritorno di sistema nello stesso frame. (I1a429, b/375343407)
  • È stato corretto il problema NavDestination NullPointerException durante l'aggiornamento del startDestination di un grafico. (I99421, b/361560785)
  • Risolto un problema che causava un'animazione di scala inaspettata quando si utilizzava Navigation Compose e si chiamava navigate nello stesso frame in cui termina l'animazione corrente. (I26cb1, b/353294030)
  • È stato corretto un ConcurrentModificationException che potrebbe verificarsi quando un LifecycleObserver collegato a un NavBackStackEntry attiva una modifica alla pila precedente quando l'LifecycleOwner host, ad esempio l'attività o il frammento contenente, modifica il proprio stato del ciclo di vita. (Ia9494)

Versione 2.8.4

13 novembre 2024

androidx.navigation:navigation-*:2.8.4 viene rilasciato. 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 rilasciato. 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 percorsi sicuri per i tipi che non sono annotati 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 di lint per i moduli navigation-common, navigation-runtime e navigation-compose per identificare eventuali percorsi sicuri per i tipi con argomenti Enum non 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 corretto un problema per cui le nuove regole di lint aggiunte in Navigation 2.8.* causavano un errore Obsolete custom lint check durante il tentativo di eseguire lint con il plug-in Android Gradle 8.4 e versioni successive. (I1be3d, b/368070326, b/371463741)

Problemi noti

  • Il controllo lint della navigazione genera un errore di controllo lint personalizzato obsoleto quando si tenta di eseguire il controllo 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 rilasciato. La versione 2.8.2 contiene questi commit.

Nuove funzionalità

  • La sicurezza di tipo 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 che viene visualizzato quando 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 rilasciato. 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 sicure per i tipi. (Ief161, b/358095343)

Correzioni di bug

  • La navigazione ora richiede che il percorso passato a startDestination di un NavGraph contenga i valori per tutti gli argomenti obbligatori, inclusi gli argomenti non null e senza valore predefinito. (I18e74, b/362594265)
  • Gli argomenti sicuri di navigazione hanno aggiunto il supporto per le stringhe non nulle in modo che i valori "null" vengano analizzati e memorizzati nel bundle così come sono. Questo comportamento si discosta da quello esistente in cui i valori "null" vengono analizzati in un oggetto null. Questa modifica si applica solo ai tipi String non null. Le stringhe NULL rimangono invariate. (I08b4a, b/348936238)
  • Non è più possibile creare un link diretto a un NavDestination, tranne tramite un link diretto aggiunto esplicitamente alla destinazione. Ciò significa anche che puoi raggiungere la destinazione di un itinerario solo con il sovraccarico della funzione di navigazione che accetta un itinerario di stringa. Questo 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 ad eseguire l'aggiornamento. (a4129a)
  • La funzionalità Scrivi nella barra di navigazione ora dipende da Scrivi 1.7.2.

Versione 2.8.0

4 settembre 2024

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

Modifiche importanti dalla versione 2.7.0

Sicurezza del tipo DSL Kotlin di navigazione

  • La navigazione ora fornisce la sicurezza del tipo per il DSL Kotlin (utilizzato da Navigation Compose) utilizzando la serializzazione Kotlin per consentirti di definire le destinazioni nel grafico di navigazione tramite oggetti e classi di dati sicuri per il tipo:
    // 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 sulla funzionalità di compilazione della navigazione che soddisfa la sicurezza del tipo.

Navigazione Componi Indietro predittivo

  • La funzionalità di navigazione Componi ora supporta il pulsante Indietro in-app predittivo tramite le nuove API SeekableTransitionState di compose-animation. In questo modo puoi utilizzare il gesto Indietro per vedere la destinazione precedente con la transizione personalizzata prima di decidere se confermare la transazione tramite il gesto completato o annullare.

Composto frammento di navigazione

  • È stato aggiunto un nuovo elemento navigation-fragment-compose che include un'alternativa ComposableNavHostFragment a NavHostFragment che consente di aggiungere destinazioni componibili ai 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 accedi 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

  • La compilazione della navigazione ora dipende da Compose 1.7.0.
  • La navigazione ora fornisce una nuova classe CollectionNavType<T>, una sottoclasse di NavType<T> per gli 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 Int, String, Boolean, Float e Long.

Versione 2.8.0-rc01

21 agosto 2024

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

Correzioni di bug

  • Correzione dell'arresto anomalo della navigazione quando vengono passate le classi Enum di primo livello come argomenti sicuri per i tipi. (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 rilasciato. La versione 2.8.0-beta07 contiene questi commit.

Problemi noti

  • A causa del problema b/358137294, solo gli enum nidificati in un'altra classe sono supportati per impostazione predefinita. Gli enum di primo livello saranno supportati nella prossima release.

Correzioni di bug

  • Quando navighi verso destinazioni duplicate o condivise, la navigazione darà la priorità alla destinazione più vicina alla posizione corrente nel grafico. (Ic89a4, b/352006850)
  • Nella navigazione in safe args è stato aggiunto un nuovo NavType.EnumType. Ciò significa che i tipi di Enum non richiedono più NavType personalizzati. Tieni presente che 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)
  • Ora startDestination di NavGraph utilizzerà i valori degli argomenti predefiniti se il percorso startDestination passato 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 rilasciato. La versione 2.8.0-beta06 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui i controlli di lint WrongStartDestinationType non cercavano oggetti Companion nel tipo di classe passato, causando la mancata rilevazione dell'errore da parte di lint. (I92b09)

Versione 2.8.0-beta05

10 luglio 2024

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

Correzioni di bug

  • Correzione dell'arresto anomalo della navigazione singleTop quando i 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 rilasciato. 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)
  • Migliorare il messaggio di errore per i serializzatori personalizzati dichiarati direttamente nei campi della classe tramite @Serializable(with =...) per chiarire che questa è attualmente una funzionalità non supportata. (I052b0, b/341319151)
  • L'API di test SavedStateHandleFactory ora può essere utilizzata nei test non Android, ma richiede che Robolectric supporti l'analisi degli argomenti con i bundle. (I76cdc, b/340966212)
  • È stato corretto l'arresto anomalo del ripristino dello stato al riavvio dell'app dopo l'interruzione del processo con l'utilizzo della navigazione sicura per i tipi in Compose. (Ia8f38, b/341801005)
  • È stato risolto un problema nella funzionalità di composizione della navigazione per cui, dopo l'annullamento del Gesto Indietro predittivo, la NavBackStackEntry a cui l'utente torna non torna mai allo stato di ciclo di vita RESUMED. In questo modo, la destinazione di ritorno viene rianimata correttamente anziché scattare in posizione dopo un movimento. (I97a0c, b/346608857)
  • Quando utilizzi Indietro predittivo con Composizione navigazione, la destinazione visualizzata avrà ora l'ordine z corretto e verrà visualizzata correttamente sopra la destinazione in arrivo. (I2077b, b/345993681)

Versione 2.8.0-beta03

12 giugno 2024

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

Modifiche all'API

  • CollectionNavType ha un nuovo metodo emptyCollection() astratto. Sostituisci questo valore per gestire una raccolta vuota passata come argomento. (Ie4d84, b/341723133)

Correzioni di bug

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

Versione 2.8.0-beta02

29 maggio 2024

androidx.navigation:navigation-*:2.8.0-beta02 viene rilasciato. 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 con valori null. (I1c29b, b/342239473)
  • Sono stati risolti i problemi di ripristino dello stato della pila di navigazione causati dal tentativo di ripristinare una voce della pila di navigazione non raggiungibile tramite ID dalla destinazione corrente. Poiché i percorsi sono basati su ID, sono state interessate anche le destinazioni create con i percorsi. Viene inoltre corretto un arresto anomalo causato dalla chiamata a clearBackStack() che aveva lo stesso problema di fondo. (I423c3, b/339908057)

Versione 2.8.0-beta01

14 maggio 2024

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

Modifiche all'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 Kotlin Serializable. (Id4867, b/339080702)

Correzioni di bug

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

Versione 2.8.0-alpha08

1° maggio 2024

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

Safe Args in Navigation Compose

Questa funzionalità utilizza la serializzazione Kotlin 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 sulla compilazione di navigazione che soddisfa la sicurezza del tipo.

Nuove funzionalità

  • L'elemento navigation-fragment-compose ora fornisce una composizione LocalFragment locale per i metodi composable all'interno di un ComposableFragment. (If35e5)
  • NavType ora supporta di serie gli elenchi di Int, String, Boolean, Float e Long. (I4b6dd, Ia914c, b/188693139)

Versione 2.8.0-alpha07

17 aprile 2024

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

Nuove funzionalità

  • Aggiunge un nuovo elemento navigation-fragment-compose che include un'alternativa ComposableNavHostFragment a NavHostFragment che consente di aggiungere destinazioni composable ai 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 accedi 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 all'API

  • È stato continuato il supporto di Safe Args in Navigation Compose utilizzando un approccio basato sulla serializzazione di Kotlin. Queste API sono non finalizzate e sono contrassegnate dall'annotazione ExperimentalSafeArgsApi. Questa annotazione verrà rimossa quando l'intera 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 rilasciato. La versione 2.8.0-alpha06 contiene questi commit.

Modifiche all'API

Correzioni di bug

  • NavHost ora utilizza Alignment.TopStart come argomento contentAlignment predefinito. In questo modo, il comportamento è in linea con quello predefinito per AnimatedContent e vengono corrette alcune istanze di una scala imprevista dalla transizione al centro. (I09e72, b/330111602)
  • Quando esegui il gesto di scorrimento verso il retro predittivo durante l'utilizzo di Scrittura di navigazione, ora NavHost completerà correttamente la transizione personalizzata anziché terminare immediatamente. (I99017, b/327292110)

Versione 2.8.0-alpha05

20 marzo 2024

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

Nuove funzionalità

  • Ora puoi passare gli argomenti a startDestination di NavGraph direttamente nel percorso startDestination senza fare affidamento su defaultValue. Questo vale anche per NavGraph startDestinations nidificati. (I0e0b5, b/109505019, b/188693139)

Modifiche all'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 basato su stringa. In questo modo viene risolto un problema per cui un valore di questo tipo sarebbe considerato non valido (o assenza di valore) per tutti i tipi. (I18302, b/327274038)
  • Le funzioni NavController che supportano percorsi come navigate o popBackStack ora possono abbinare correttamente i percorsi inseriti con gli argomenti dell'array NavTypes. (Iea805, b/327229511)

Versione 2.8.0-alpha04

6 marzo 2024

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

Nuove funzionalità

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

Correzioni di bug

  • È stato risolto un problema per cui NavHost in Navigazione nella composizione non riusciva a mostrare correttamente la transizione quando si utilizzava il tasto Indietro di sistema senza un gesto. (Iceeae, b/325998468)

Versione 2.8.0-alpha03

21 febbraio 2024

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

Modifiche all'API

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

Correzioni di bug

  • È stato risolto un problema nella navigazione che causava il NavGraph dei ViewModel DESTROYED troppo presto perché il 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 rilasciato. La versione 2.8.0-alpha02 contiene questi commit.

Nuove funzionalità

  • La funzionalità di navigazione Componi ora supporta il pulsante Indietro in-app predittivo tramite le nuove API SeekableTransitionState di compose-animation. In questo modo puoi utilizzare il gesto Indietro per vedere la destinazione precedente con la transizione personalizzata prima di decidere se confermare la transazione tramite il gesto completato o annullare. (I8b8e9)

Versione 2.8.0-alpha01

24 gennaio 2024

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

Correzioni di bug

  • È stato corretto una perdita di BackStackState in cui più chiamate saveState su 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 String non venivano visualizzati correttamente quando si utilizzavano gli aiuti 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 degli argomenti non String quando si utilizzano gli aiuti 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 rilasciato. La versione 2.7.7 contiene questi commit.

Correzioni di bug

  • Backportato da Navigazione 2.8.0-alpha01: è stato corretto una 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)
  • Backport da Navigazione 2.8.0-alpha01: è stato risolto un problema per cui gli argomenti non di stringa non venivano visualizzati correttamente quando si utilizzavano gli aiuti NavigationUI per compilare il titolo delle barre delle app. (#636, b/316676794)

Contributo esterno

  • Grazie a SimonMarquis per aver risolto il problema di visualizzazione degli argomenti non String quando si utilizzano gli aiuti 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 rilasciato. La versione 2.7.6 contiene questi commit.

Correzioni di bug

  • La funzione NavGraph equals() ora prende in considerazione correttamente i nodi dell'altro grafico anziché solo quello che chiama. 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 rilasciato. La versione 2.7.5 contiene questi commit.

Miglioramenti delle prestazioni

  • Sono state notevolmente migliorate le prestazioni (sia in termini di tempo che di 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 meno 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 nel primo passaggio di composizione anziché 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 espulso se chiamavi setGraph più volte con lo stesso grafico esatto 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 il passaggio 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 dopo una modifica della configurazione, ViewModel della voce verrà ora cancellato correttamente se saveState è falso. (Idf242, b/298164648)
  • È stato corretto un problema per cui NavController poteva gestire lo stesso link diretto più di una volta se lo stack di ritorno era completamente vuoto prima di una modifica della configurazione o di una chiamata a setGraph solo quando l'intent in arrivo aveva il flag FLAG_ACTIVITY_NEW_TASK impostato. (I73c7f)

Aggiornamenti delle dipendenze

  • La navigazione con i frammenti ora dipende dalla versione 1.6.2 di Fragment, che corregge un problema per cui le istanze ViewModel di frammenti nidificati non venivano cancellate quando si chiamava clearBackStack.

Versione 2.7.4

Versione 2.7.4

4 ottobre 2023

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

Nuove funzionalità

  • È stato aggiunto il supporto per popUpTo per utilizzare percorsi con argomenti per consentire di tornare a una voce specifica che utilizza gli stessi argomenti, in linea con il supporto disponibile in popBackStack. (I731f4, b/299255572)

Correzioni di bug

  • È stato risolto il problema per cui 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 tasto Indietro del sistema causava il mancato aggiornamento corretto di currentDestination in modo che corrispondesse al frammento visualizzato. (Id0d6c, b/289877514)
  • Il ciclo di vita di DialogFragment passerà ora correttamente allo stato RESUMED quando la finestra di dialogo soprastante viene chiusa. (I88f0d, b/301811387)

Versione 2.7.3

Versione 2.7.3

20 settembre 2023

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

Correzioni di bug

  • È stato risolto un problema nella navigazione con i frammenti che causava l'inserimento di voci errate nell'elenco visibleEntries. (I5caa9, b/288520638)
  • È stato risolto un problema che causava la mancata ricezione di un callback Lifecycle RESUMED per la destinazione della finestra mobile (ad es. Dialogs, Bottomsheets e così via). (I3b866, b/287505132)

Versione 2.7.2

Versione 2.7.2

6 settembre 2023

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

Correzioni di bug

  • La navigazione ora dipende da 2.6.2 del ciclo di vita, correggendo un'interazione tra rememberSaveable e NavHost di Navigation Compose che impediva il ripristino corretto dello stato rememberSaveable delle destinazioni e di eventuali istanze SavedStateHandle di proprietà di ViewModel dopo l'interruzione e la ricreazione del processo. (b/298059596, b/289436035)
  • È stato risolto un problema relativo alla visualizzazione simultanea di più finestre di dialogo in Navigazione Componi, in cui le finestre di dialogo parzialmente oscurate (ad es. non la finestra di dialogo più in alto) si trovavano nello stato di ciclo di vita CREATED anziché nello stato STARTED. (aosp/2728520, b/289257213)
  • È stato risolto un problema relativo alla visualizzazione di più finestre di dialogo contemporaneamente in Componi navigazione, in cui la chiusura della finestra di dialogo più in alto causava il blocco della nuova finestra di dialogo più in alto nello stato del ciclo di vita STARTED anziché passare correttamente a RESUMED. (aosp/2629401, b/286371387)
  • Navigation Safe Args non esegue più l'inizializzazione anticipata dell'attività se non viene effettivamente eseguita. (I0e385, b/260322841)

Aggiornamento delle dipendenze

  • La funzionalità di 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 rilasciato. La versione 2.7.1 contiene questi commit.

Correzioni di bug

  • Risolto un problema nella navigazione con Scrittura, per cui, quando si utilizzava un Scaffold, era possibile ricevere un errore per il tentativo di accedere 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 rilasciato. La versione 2.7.0 contiene questi commit.

Modifiche importanti dalla versione 2.6.0

Animazioni di Accompagnatore

Ora che AnimatedContent è stabile, siamo riusciti a spostare il codice da Accompanist Navigation Animation nella stessa composizione di navigazione.

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 presto ne verrà ritirato il supporto, insieme alle indicazioni su come eseguire la migrazione a Navigation Compose. Tuttavia, la procedura sarà l'inverso di quella descritta nella guida alla migrazione e non saranno necessarie altre modifiche all'API se utilizzi già la versione alpha più recente di Accompanist (0.31.2-alpha). (b/197140101)

Correzioni di bug

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

Aggiornamenti delle dipendenze

  • La navigazione ora dipende da Componi 1.5.0 da 1.1.0.

Versione 2.7.0-rc01

26 luglio 2023

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

Correzioni di bug

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

Problemi noti

  • Nella versione 2.6.x di Navigation si verifica un problema 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 rilasciato. La versione 2.7.0-beta02 contiene questi commit.

Correzioni di bug

  • La funzionalità Scrittura guidata della navigazione 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 rilasciato. La versione 2.7.0-beta01 contiene questi commit.

Correzioni di bug

  • NavHost in Scrivi nella navigazione ora intercetta correttamente le chiamate di ritorno del 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 rilasciato. La versione 2.7.0-alpha01 contiene questi commit.

Animazioni di Accompagnatore

Ora che AnimatedContent è stabile, siamo riusciti a spostare il codice da Accompanist Navigation Animation nella stessa composizione di navigazione.

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 presto ne verrà ritirato il supporto, insieme alle indicazioni su come eseguire la migrazione di nuovo a Navigation Compose. Tuttavia, la procedura sarà l'inverso della guida alla migrazione e non saranno necessarie altre modifiche all'API se utilizzi già la versione alpha più recente di Accompanist (0.31.2-alpha). (b/197140101)

Correzioni di bug

  • In Navigazione 2.6.0-rc02: è stato risolto un problema di navigazione nei frammenti in cui la navigazione con popUpTo e l'estrazione di un frammento dallo stack precedente senza ricreare la relativa visualizzazione causavano l'interruzione del funzionamento del pulsante Indietro del sistema. (Ieb8d4, b/281726455)

Aggiornamenti delle dipendenze

  • La navigazione ora dipende da Componi 1.5.0-beta01.

Versione 2.6.0

Versione 2.6.0

7 giugno 2023

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

Modifiche importanti a Navigazione dalla versione 2.5.0

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

Modifiche importanti a Componi navigazione dalla versione 2.5.0

  • Quando viene visualizzata l'anteprima di un composable con NavHost, ora viene mostrato per impostazione predefinita il startDestination di NavGraph.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) ora supportano tutti i percorsi con argomenti parzialmente o completamente compilati. 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 comporterà un avviso lint che indica che un link diretto deve avere un uri, un'azione e/o un mimetype per essere valido.

Modifiche importanti alla navigazione con i frammenti dalla versione 2.5.0

  • NavHostFragment non intercetta più il pulsante Indietro del sistema. In questo modo, FragmentManager sottostante può gestire il ritorno al sistema. In questo modo, il componente Fragment 1.7.0-alpha01 e versioni successive possono fornire un'animazione di ritorno in-app predittiva sui dispositivi Android U.
  • Quando utilizzi la navigazione con i frammenti, il tentativo di eseguire manualmente un FragmentTransaction che aggiunge un frammento alla pila di ritorno di FragmentManager ora genera 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 verrà compilato automaticamente con il packageName del contesto al momento dell'inflazione.
  • FragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di popup NavBackStackEntries. Ciò significa che NavBackStackEntry Lifecycle ora attenderà il completamento degli effetti speciali dei frammenti di entrata e di uscita prima di spostare il Lifecycle.State finale.
  • DialogFragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di popup 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 il NavController non appena il NavHostFragment è collegato al FragmentManager, anziché solo dopo onCreate().
  • Il supporto di Navigation per i moduli di funzionalità dinamiche ora dipende dalla libreria Play Feature Delivery granulare.
  • Navigation Safe Args ora dipende dalla versione 7.3.0 del plug-in Android per Gradle. Ciò significa che ora è compatibile solo con le versioni 7.3.0 e successive.

Modifiche importanti a NavigationUI dalla versione 2.5.0

  • Quando viene passato l'ID di un grafo di navigazione a AppBarConfiguration (ad esempio tramite un Menu), NavigationUI ora considera solo la destinazione iniziale del grafo di navigazione come destinazione di primo livello, anziché contrassegnare erroneamente ogni destinazione all'interno del grafo come destinazione di primo livello. Il comportamento di passaggio dell'ID di una singola destinazione rimane invariato. Questa stessa funzionalità è disponibile per il tuo codice tramite la nuova funzione isTopLevelDestination su AppBarConfiguration.
  • Le integrazioni di setupWithNavController in NavigationUI per l'utilizzo della barra delle app in alto ora analizzeranno i valori R.string per gli argomenti ReferenceType trovati in android:label nei relativi valori Stringa anziché in uscita l'intero della risorsa generato automaticamente.
  • NavigationUI ora fornisce i 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 rilasciato. La versione 2.6.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema di navigazione nei frammenti per cui, se si navigava con popUpTo e si estraeva un frammento dallo stack precedente senza ricrearne la visualizzazione, il pulsante Indietro del sistema smetteva di funzionare. (Ieb8d4, b/281726455)

Versione 2.6.0-rc01

10 maggio 2023

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

Correzioni di bug

  • È stato risolto un problema nella navigazione con i frammenti per cui la rimozione di un frammento tramite navigate con popUpTo nel relativo 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 rilasciato. La versione 2.6.0-beta01 contiene questi commit.

Nuove funzionalità

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

Correzioni di bug

  • Quando utilizzi la navigazione con i frammenti, il tentativo di eseguire manualmente un FragmentTransaction che aggiunge un frammento alla pila di ritorno di FragmentManager ora genera 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 voce superiore risultante nella pila posteriore ora tornerà in modo coerente a RESUMED Lifecycle.State. (Id8067, b/276495952)

Versione 2.6.0-alpha09

5 aprile 2023

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

Correzioni di bug

  • Sono stati corretti i controlli per i percorsi non validi in modo che, se un NavDestination contiene NavArgument non null, il percorso di questa destinazione deve contenere segnaposto per gli argomenti con lo stesso nome del NavArgument non null. (Ic62bf, b/274697949)
  • Le navigazioni con link diretti basate su Action/MimeType ora non andranno a buon fine se nell'operazione di navigazione manca un NavArgument non nullo richiesto dal NavDestination a cui corrisponde Action/MimeType. (Ibfa17, b/271777424)
  • Quando NavController imposta un grafo con la stessa route e le stesse destinazioni del grafo precedente, ora sostituisce correttamente i nodi del grafo corrente e le destinazioni della pila precedente con nuove istanze. In questo modo viene corretto un arresto anomalo quando si utilizza onLaunchSingleTop senza salvare lo stato in Scrittura di navigazione. Viene inoltre corretto un errore relativo alla navigazione verso le destinazioni associate alle build del grafo principale e alla pila di ritorno errata. (I5bc58, b/275258161, b/275407804)

Versione 2.6.0-alpha08

22 marzo 2023

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

Nuove funzionalità

  • NavHostFragment ora ti consente di recuperare il NavController non appena il NavHostFragment è collegato al FragmentManager, anziché solo dopo onCreate(). (Ic6382, b/220186282)

Correzioni di bug

  • È stato corretto un errore NullPointerException quando viene visualizzato un grafico nidificato che include un argomento non null. (6b3581, b/249988437)
  • Quando utilizzi il pulsante Indietro del sistema dopo aver eseguito la navigazione con popUpTo, lo stato di popUpTo verrà visualizzato nella voce corretta.NavController (I3a8ec, b/270447657)
  • FragmentNavigator ora mostrerà correttamente le voci quando la pila di ritorno viene visualizzata tramite il pulsante Indietro del sistema o popBackStack() e se la transazione utilizza o meno gli effetti per il frammento. (I81bdf)
  • L'aggiunta di frammenti al FragmentNavigator 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 rilasciato. La versione 2.6.0-alpha07 contiene questi commit.

Correzioni di bug

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

Versione 2.6.0-alpha06

22 febbraio 2023

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

Nuove funzionalità

  • Quando viene visualizzata l'anteprima di un composable con NavHost, ora viene mostrato per impostazione predefinita il startDestination di NavGraph. (I2b89f)

Modifiche all'API

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

Correzioni di bug

  • È stato corretto un arresto anomalo durante il tentativo di navigazione durante l'utilizzo della navigazione tra i frammenti dinamici. (I3ee29, b/268360479)
  • È stato corretto un bug a causa del quale il passaggio a un altro frammento tramite il pulsante Indietro di sistema non aggiornava la barra in basso con l'elemento selezionato corretto (If559f, b/269044426)

Problemi noti

  • Quando utilizzi la navigazione con i frammenti, il ciclo di vita di NavBackStackEntry non riesce a raggiungere RESUMED quando utilizzi le API Animation. (b/269646882)
  • Quando utilizzi la navigazione con i frammenti e navighi con BottomNavigation, se tenti di ripristinare una pila di ritorno con più voci, BottomMenuItem non viene aggiornato correttamente. (b/270447657)
  • Quando utilizzi la navigazione con i frammenti, dopo il ripristino dello stato NavBackStackEntry Lifecycle non riceve DESTROYED quando il suo frammento è DESTROYED . (b/270610768)

Versione 2.6.0-alpha05

8 febbraio 2023

androidx.navigation:navigation-*:2.6.0-alpha05 viene rilasciato. 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 parzialmente o completamente compilati. 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 popup NavBackStackEntries. Ciò significa che NavBackStackEntry Lifecycle ora attenderà il completamento degli effetti speciali dei frammenti di entrata e di uscita prima di spostare il Lifecycle.State finale. (I3cb19, b/238686802)
  • DialogFragmentNavigator ora utilizza le API di transizione durante la navigazione e la visualizzazione di popup NavBackStackEntries. Ciò significa che NavBackStackEntry Lifecycle ora attenderà che DialogFragment Lifecycle passi a DESTROYED prima di passare a DESTROYED. (I53ee5, b/261213893)

Modifiche all'API

  • NavigatorState ora fornisce l'API prepareForTransition per consentire ai Navigator di spostare i NavBackStackEntries in Lifecycle.State intermedi. (I42c21, b/238686802)
  • Ora puoi accedere alla pila di ritorno associata a un NavGraphNavigator o a un ComposeNavigator tramite una proprietà backstack. ComposeNavigator ora espone anche il callback onTransitionComplete() per contrassegnare come completato un NavBackStackEntry che ha eseguito un'operazione di navigazione o popBackStack. (I02062, I718db, b/257519195)

Correzioni di bug

  • Lo stato del navigatore ora non eseguirà alcuna operazione quando utilizzi le API push/popWithTransition e la voce è già in fase di elaborazione. (Iadbfa, b/261213893)
  • Quando utilizzi launchSingleTop con un NavGraph nidificato, tutte le destinazioni che partono dalla destinazione originale fino al relativo startDestination verranno aggiunte correttamente solo nella parte superiore del backstack. (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)
  • SafeArgs di navigazione non causerà più un errore di compilazione quando vengono utilizzati argomenti di esattamente 19 caratteri. (Id60bc, b/257110095)

Versione 2.6.0-alpha04

9 novembre 2022

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

Nuove funzionalità

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

Correzioni di bug

  • Ora i link diretti di navigazione vengono analizzati in modo lazy anziché all'inizializzazione del grafico, il che potrebbe migliorare il rendimento dell'app all'avvio. (Iab0ab)
  • È stato corretto un arresto anomalo causato dal passaggio in alto dopo il link diretto a una destinazione con argomenti predefiniti null. (I51c24, b/243183636)

Aggiornamento delle dipendenze

  • Il supporto di Navigation per i moduli di funzionalità dinamiche ora dipende dalla libreria Play Feature Delivery granulare. (Ib4ddc)
  • Navigation Safe Args ora dipende dalla versione 7.3.0 del plug-in Android per Gradle. 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 rilasciato. La versione 2.6.0-alpha03 contiene questi commit.

Correzioni di bug

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

Aggiornamenti delle dipendenze

Versione 2.6.0-alpha02

5 ottobre 2022

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

Modifiche al comportamento

  • Quando viene passato l'ID di un grafo di navigazione a AppBarConfiguration (ad esempio tramite un Menu), NavigationUI ora considera solo la destinazione iniziale del grafo di navigazione come destinazione di primo livello, anziché contrassegnare erroneamente ogni destinazione all'interno del grafo come destinazione di primo livello. Il comportamento di passaggio dell'ID di una singola destinazione rimane invariato. 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 del frammento 1.5.2. (I00ba4)
  • Il menu selezionato non verrà più aggiornato 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 rilasciato. La versione 2.6.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Le integrazioni di setupWithNavController in NavigationUI per l'utilizzo della barra delle app in alto ora analizzeranno i valori R.string per gli argomenti ReferenceType trovati in android:label nei relativi valori Stringa anziché in uscita l'intero della risorsa generato automaticamente. (I5f803, b/167959935)
  • NavDeepLink ora supporta i valori predefiniti per gli array, il che consente di supportare i parametri di query ripetuti che verranno mappati al tipo di array dell'argomento. NavType ora include anche un metodo predefinito che può essere sostituito 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 verrà compilato automaticamente con il packageName del contesto al momento dell'inflazione. (Iaabde, b/234223561)
  • Il tentativo di creare un NavDeepLink vuoto utilizzando il DSL Kotlin navDeepLink ora comporterà un avviso lint che indica che un link diretto deve avere un uri, un'azione e/o un mimetype per essere valido. (I08d2f, b/154038883)

Modifiche all'API

  • È stata aggiunta una nuova funzione di estensione NavDestination per analizzare le etichette dinamiche con argomenti sotto forma di android:label="{arg}" in Stringa. 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 eseguito la navigazione fino alla destinazione. Ciò significa che le modifiche apportate a questi pacchetti non verranno applicate agli accessi successivi all'istanza arguments o ad altre istanze OnDestinationChangedListener. (I676f5)

Correzioni di bug

  • In Navigazione 2.5.2: la navigazione dinamica ora tenta correttamente di installare le destinazioni Attività da altri moduli prima di passare a queste. (Ia2c16, b/240292838)
  • In Navigazione 2.5.2: ora la navigazione sostituirà correttamente l'istanza del frammento quando si accede alla stessa destinazione e si imposta il flag launchSingleTop su true. (I5a2f1, b/237374580)
  • In Navigazione 2.5.2: è stato corretto un problema IllegalStateException causato dal passaggio a un grafo con doppio nidificazione che condivide un nodo principale con una nuova destinazione di partenza visualizzata. (I9f7cb, b/243778589)

Versione 2.5

Versione 2.5.3

24 ottobre 2022

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

Correzioni di bug

  • NavHost non causerà più un NoSuchElementException quando non è disponibile una destinazione per la composizione del Crossfade. Ora salterà la composizione. (Ieb46e, b/253299416)
  • È stato risolto un problema per cui lo stato di Scrittura salvato (ad es. gli utilizzi di rememberSaveable) non veniva dimenticato e rimosso quando una destinazione veniva rimossa dallo stack precedente. (I64949)

Versione 2.5.2

7 settembre 2022

androidx.navigation:navigation-*:2.5.2 viene rilasciato. 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 passare a queste destinazioni. (Ia2c16, b/240292838)
  • La navigazione ora sostituirà correttamente l'istanza del frammento quando si naviga verso la stessa destinazione e si imposta il flag launchSingleTop su true. (I5a2f1, b/237374580)
  • È stato corretto un problema IllegalStateException causato dal passaggio a un grafo nidificato due volte che condivide un elemento principale con una nuova destinazione di partenza visualizzata. (I9f7cb, b/243778589)

Aggiornamento delle dipendenze

Versione 2.5.1

27 luglio 2022

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

Correzioni di bug

  • Navigation Safe Args non causerà più avvisi di ritiro nei classi generati quando vengono utilizzati 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 rilasciato. La versione 2.5.0 contiene questi commit.

Modifiche importanti dalla versione 2.4.0

  • Integrazione di CreationExtras: Navigation ora è in grado di fornire un ViewModelProvider.Factory senza stato tramite CreationExtras di Lifecycle 2.5.0.

SafeArgs di navigazione

  • Navigation Safe Args ha eseguito l'upgrade della dipendenza Android Gradle Plugin in modo che si basi su 7.0.4, eliminando la compatibilità con le versioni AGP precedenti alla 7.0.
  • È stato aggiunto il supporto per l'utilizzo dell'attributo build.gradle dello spazio dei nomi anziché 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 rilasciato. La versione 2.5.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato corretto un arresto anomalo causato dal passaggio rapido tra le destinazioni inferiori quando si utilizza la barra di navigazione Scrivi NavHost. (I3979a, b/234054916)
  • Navigation SafeArgs non avrà più arresti anomali quando viene utilizzato un applicationIdSuffix e uno spazio dei nomi senza applicationId o quando applicationId e lo spazio dei nomi sono diversi. (I754b1, b/233119646)
  • NavArgument ora dispone di 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 rilasciato. La versione 2.5.0-rc01 contiene questi commit.

Nuove funzionalità

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

Correzioni di bug

  • Gli ambiti composable in NavHost e DialogHost vengono ora eliminati nell'ordine previsto, ovvero i composable interni vengono eliminati prima di quelli esterni. (I157e6)
  • Navigation SafeArgs ora utilizza PathSensitivity.RELATIVE in ArgumentsGenerationTask per consentire la ricollocabilità della cache. Ciò significa che la voce della cache ora può 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 un oggetto NavBackStackEntry come chiave.(Ib7081, b/227382831)

Versione 2.5.0-beta01

20 aprile 2022

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

Correzioni di bug

  • DialogNavigator ora utilizza popWithTransition quando esegue una chiamata dismiss(). In questo modo viene corretta una condizione di gara quando si utilizza un ViewModel all'interno della destinazione dialog che causerebbe un IllegalStateException quando si chiude 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 da Ciclo di vita 2.5.0-beta01, correggendo un IllegalStateException quando si nidifica un NavHost all'interno di un altro NavHost in una scheda di navigazione inferiore non principale quando si utilizzano più serie di schede Indietro.

Versione 2.5.0-alpha04

6 aprile 2022

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

Modifiche all'API

Correzioni di bug

  • NavHost ora dipende da visibleEntries del NavController per determinare quali voci comporre. Ciò significa che, quando utilizzi NavHost nidificato, NavHost interno ora dovrebbe essere animato correttamente. (I4ba2b, b/225394514)
  • Il valore 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'navController è inferiore a STARTED, l'elenco delle voci visibili rimarrà 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 avrà più arresti anomali quando vengono utilizzati gli spazi dei nomi e non è presente AndroidManifest.xml. (I17ccf, b/227229815)

Versione 2.5.0-alpha03

23 febbraio 2022

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

Modifiche all'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 percorsi/link diretti. (I513d1, b/217815060)
  • CreationExtras ora funzionerà correttamente se utilizzato con NavBackStackEntries per creare ViewModel. (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 rilasciato. La versione 2.5.0-alpha02 contiene questi commit.

Correzioni di bug

  • Da Navigazione 2.4.1: ora NavHostFragment imposterà correttamente OnBackPressedDispatcher quando si utilizza il binding della vista con grafici nidificati. (Ifbb51, b/214577959)
  • Da Navigazione 2.4.1: quando esegui il collegamento diretto tramite più NavGraph nidificati, lo stack di ritorno ora includerà correttamente le destinazioni iniziali intermedie. (I504c0, b/214383060)

Versione 2.5.0-alpha01

26 gennaio 2022

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

Nuove funzionalità

Correzioni di bug

  • È stato risolto un problema per cui l'accesso a un ViewModel creato tramite by navGraphViewModels() dal onCreate() di un frammento non andava a buon fine con un IllegalStateException. (I8a14d)
  • NavDeepLink non decodificherà più inutilmente gli argomenti due volte, il che significa che gli argomenti corretti vengono ora passati alla destinazione finale. (I31b0a, b/210711399)

Safe Args

  • Safe Args ora dipende dalla versione 7.0.4 del plug-in Android per Gradle. 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 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 rilasciato. 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 rilasciato. La versione 2.4.1 contiene questi commit.

Correzioni di bug

  • Ora NavHostFragment imposterà correttamente OnBackPressedDispatcher quando si utilizza il binding della vista con grafici nidificati. (Ifbb51, b/214577959)
  • Quando esegui il collegamento diretto tramite più NavGraph nidificati, lo stack di ritorno ora includerà correttamente le destinazioni iniziali intermedie. (I504c0, b/214383060)
  • Backportato da Navigation 2.5.0-alpha01: è stato risolto un problema per cui l'accesso a un ViewModel creato tramite by navGraphViewModels() da onCreate() di un frammento non andava a buon fine con un IllegalStateException. (I8a14d)
  • Backportato da Navigation 2.5.0-alpha01: NavDeepLink non decodifica più inutilmente gli argomenti due volte, il che significa che gli argomenti decodificati correttamente vengono ora passati alla destinazione finale. (I31b0a, b/210711399)
  • Backportato da Navigation 2.5.0-alpha01: Safe Args ora dipende dalla versione 7.0.4 del plug-in Android per Gradle. 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 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 rilasciato. La versione 2.4.0 contiene questi commit.

Modifiche importanti dalla versione 2.3.0

  • Tutti gli elementi di navigazione sono stati riscritti in Kotlin. In questo modo è stata migliorata la nullabilità delle classi che utilizzano i generici (ad esempio le sottoclassi NavType). Tutte le funzioni di estensione Kotlin che facevano parte degli elementi -ktx sono state spostate nei rispettivi elementi principali. Gli elementi -ktx continueranno a essere pubblicati, ma sono completamente vuoti.
  • L'elemento 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 tua sottoclasse) e un riquadro dei dettagli, che utilizza un NavHostFragment come implementazione, come mostrato nella nostra implementazione di esempio.
  • Il metodo currentBackStackEntryAsFlow() in NavController fornisce un Flow che viene emesso ogni volta che cambia l'attuale NavBackStackEntry. Questo flusso può essere utilizzato come 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 il DSL Kotlin per grafici di navigazione.
  • La navigazione ora fornisce le API findStartDestination() e getHierarchy() che possono essere utilizzate per implementare NavigationUI personalizzato. findStartDestination() è una funzione di estensione di NavGraph che individua la destinazione di partenza effettiva che verrà visualizzata quando accedi al 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 rientra nella gerarchia di un'altra.

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

  • Quando gonfi 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)
    }
    

Percorsi di navigazione e DSL Kotlin

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 ti consentisse di navigate() a quella destinazione direttamente o tramite un'azione. Sebbene questo approccio continui a essere valido e utile, in particolare nei casi in cui definisci il grafo di navigazione in XML e puoi utilizzare costanti R.id generate automaticamente o Safe Args (che utilizzano queste costanti per generare codice in fase di compilazione), questo sistema di numeri interi univoci non ha acquisito il significato semantico e l'espressività necessari per supportare grafici completamente dinamici costruiti in modo programmatico in fase di esecuzione tramite il DSL Kotlin Navigation.

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

Ogni percorso deve essere considerato 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 del percorso, seguendo le stesse regole dei link diretti impliciti.

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

Ciò ha avuto alcune implicazioni per le API:

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

A differenza della navigazione per ID, la navigazione per percorso segue le stesse regole dei link diretti impliciti in quanto puoi passare direttamente a qualsiasi destinazione in qualsiasi grafico nidificato, assicurandoti che questi percorsi siano utilizzabili nei progetti multi-modulo senza aggiungere esplicitamente un link diretto visibile all'esterno a ogni destinazione.

Composizione di navigazione

L'elemento navigation-compose fornisce l'integrazione tra il componente di navigazione e Jetpack Compose. Utilizza le funzioni @Composable come destinazioni nell'applicazione.

Questa release fornisce:

  • Un composable NavHost che ti consente di costruire il grafo di navigazione tramite un DSL Kotlin, utilizzando le destinazioni composable e dialog, oltre al supporto di navigatori facoltativi come quelli del materiale di navigazione di Accompanist.
  • Supporto obbligatorio per la transizione tra le destinazioni. Animazione di navigazione dell'accompagnatore può essere utilizzata per controllare le transizioni di entrata e di uscita utilizzando le API Compose sperimentali.
  • Scoping di un Lifecycle per ogni destinazione componibile. Ogni destinazione raggiunge lo stato RESUMED solo al termine di eventuali transizioni in entrata e passa immediatamente a STARTED all'inizio di eventuali transizioni in uscita, consentendoti così di evitare tutti i problemi di IllegalStateException e multi-touch attivando una chiamata navigate solo quando Lifecycle è RESUMED.
  • Scoping 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 di configurazione e all'essere nello stack secondario (quando i contenuti Composable vengono altrimenti eliminati) e un indicatore in onCleared() del ViewModel che indica l'eliminazione permanente e la pulizia dello stato associato a quel NavBackStackEntry.
  • Definizione dell'ambito dello stato rememberSaveable a livello di destinazione, in modo che tutto lo stato composable venga salvato e ripristinato automaticamente quando torni a una destinazione.
  • Supporto completo per il salvataggio e il ripristino dello stato di NavController e della relativa destinazione dopo l'interruzione e la ricreazione del processo.
  • Integrazione automatica con il pulsante Indietro del sistema.
  • Supporto per il passaggio di argomenti, l'associazione di link diretti alle destinazioni e il ritorno di un risultato alle destinazioni precedenti.

  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire il sollevamento dello stato e la connessione del NavController ai composabili esterni al 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 nella composizione.

Più serie di foto simili

NavController è responsabile della gestione della pila di destinazione precedente, aggiungendo le destinazioni quando navigate() e rimuovendole 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 stati espansi per supportare il salvataggio e il ripristino della pila di ritorno.

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

Le API sottostanti per il salvataggio e il ripristino dello stato sono esposte tramite una serie di 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 eventuali 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 navOptions, puoi aggiungere la proprietà booleana restoreState e la proprietà booleana saveState al compilatore popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Per creare manualmente un oggetto NavOptions tramite NavOptions.Builder, puoi utilizzare setRestoreState() e il nuovo sovraccarico di 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 eventuali istanze di ViewModel basate sulla 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 comportamento

  • NavDeepLinkBuilder ora aggiunge PendingIntent.FLAG_IMMUTABLE a PendingIntent restituito da createPendingIntent(), garantendo che questa API funzioni come previsto quando si sceglie come target Android 12.
  • La navigazione ora dipende da Lifecycle 2.3.1 e ora contrassegna setGraph(), popBackStack(), navigateUp() e navigate(), i metodi che aggiornano il NavBackStackEntry Lifecycle, come @MainThread, allineando la navigazione all'applicazione del thread principale introdotta in Lifecycle 2.3.0.
  • Ora i link diretti verificano che tutti gli argomenti obbligatori (quelli senza valori predefiniti) siano presenti in Uri.
  • NavDeepLink Gli argomenti analizzati ora considerano i simboli di cancelletto nello stesso modo dei punti interrogativi come separatori tra i segmenti del percorso, impedendo a un argomento di estendersi oltre il simbolo di cancelletto.
  • Quando generi azioni, il codice Kotlin generato da Safe Args ora inserisce gli argomenti senza valori predefiniti prima di quelli con valori predefiniti come parametri.
  • Quando genera gli 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ù ricevere l'avviso relativo all'utilizzo di applicationIdTextResource.

Problemi noti

  • Risolto in Navigazione 2.5.0-alpha01: l'accesso a un ViewModel creato tramite by navGraphViewModels() da onCreate() di un frammento non andrà a buon fine con un IllegalStateException. (b/213504272)
  • Risolto in Navigazione 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)
  • I link diretti con più grafici di navigazione nidificati non creano correttamente il backstack completo. (b/214383060)

Versione 2.4.0-rc01

15 dicembre 2021

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

Modifiche al comportamento

  • NavDeepLink Gli argomenti analizzati ora considerano i simboli di cancelletto nello 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 avrà più arresti anomali quando viene visualizzata una destinazione nidificata utilizzando le transizioni dopo il ripristino di NavController. (I0f7c9, b/205021623)
  • Il messaggio di errore visualizzato quando viene utilizzato un startDestination non valido ora corrisponderà per impostazione predefinita al percorso della destinazione di partenza, se disponibile. (I86b9d, b/208041894)

Correzioni di bug di Scrittura di navigazione

  • È stato corretto un potenziale arresto anomalo causato dal passaggio rapido tra la destinazione di partenza e un'altra utilizzando i menu di navigazione in basso. (Ic8976, b/208887901)
  • La destinazione della finestra di dialogo viene ora ripristinata correttamente nella parte superiore dello schermo dopo le modifiche alla configurazione o l'interruzione del processo. (I4c0dc, b/207386169)
  • È stato risolto un problema per cui il tentativo di recuperare un ViewModel da un NavBackStackEntry di una finestra di dialogo non andava a buon fine quando la finestra di dialogo veniva chiusa. (I6b96d, b/206465487)
  • È stato risolto un problema relativo all'utilizzo delle destinazioni activity con NavHost di Composizione di navigazione che causava ricostruzioni infinite. (I8f64c)
  • È stato corretto un problema di perdita in Navigation Compose, che conservava 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 durante il tentativo di ripristinare gli array parcelable personalizzati 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 rilasciato. La versione 2.4.0-beta02 contiene questi commit.

Modifiche all'API

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

Modifiche al comportamento

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

Correzioni di bug

  • È stato risolto un problema per cui gli elementi NavBackStackEntries venivano spostati 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 gara in cui la destinazione DialogFragment veniva rimossa dalla pila di ritorno prima che la finestra di dialogo venisse effettivamente visualizzata, senza che la finestra di dialogo venisse effettivamente chiusa, causando un arresto anomalo quando la finestra di dialogo errata veniva chiusa manualmente dall'utente. (I687e5)
  • È stato risolto un problema per cui l'API onNavDestinationSelected su NavigationUI restituiva true anche se non navigate() al grafo di navigazione. Ora utilizza la stessa logica impiegata 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 rilasciato. La versione 2.4.0-beta01 contiene questi commit.

Nuove funzionalità

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

Modifiche all'API

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

Correzioni di bug

  • I ViewModel non verranno più distrutti quando le transizioni vengono interrotte passando da una schermata all'altra (Id52d8, b/200817333)
  • Gli argomenti NavDeepLink con valori null non richiedono più un valore predefinito quando aggiungi link diretti ai NavDestination. (I5aad4, b/201320030)
  • Ora NavBackStackEntries con cicli di vita diversi non sono più considerati uguali. Ciò significa che NavHost ricomporrà correttamente tutte le destinazioni durante la navigazione con singleTop e la selezione di nuovo degli elementi del menu inferiore. (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)
  • Ora lo stato visivo delle destinazioni della finestra di dialogo rimane correttamente sincronizzato con lo stato di DialogFragmentNavigator. Ciò significa che la chiamata manuale dell'API dismiss() asincrona per DialogFragment ora cancella correttamente tutte le destinazioni della finestra di dialogo sopra la finestra di dialogo ora ignorata. Questo non influisce sui casi in cui utilizzi popUpTo o popBackStack() per chiudere la finestra di dialogo. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener ora offre messaggi di errore più chiari per onDestinationChanged(). (Ie742d)

Versione 2.4.0-alpha10

29 settembre 2021

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

Nuove funzionalità

  • NavController ora offre la possibilità di recuperare un elenco di tutte le istanze NavBackStackEntry visibili tramite visibleEntries StateFlow (Ia964e)
  • rememberNavController() ora accetta un insieme facoltativo di istanze Navigator che verranno aggiunte al NavController restituito per supportare meglio i navigatori facoltativi, come quelli del materiale di navigazione per l'accompagnatore. (I4619e)

Correzioni di bug

  • La navigazione dinamica non avrà più arresti anomali quando l'attività viene rielaborata. (Ifa6a3, b/197942869)
  • È stato risolto un problema relativo al pulsante Indietro di sistema che si verifica solo dopo il ritorno 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 rilasciato. 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 generatore del grafo di navigazione nidificato, che verranno aggiunti automaticamente al grafo risultante. (I8a470, b/182545357)

Modifiche all'API

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

Modifiche al comportamento

  • Quando genera gli 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 facoltativi non richiedono più un valore predefinito. (Ia14ef, b/198689811)
  • La chiamata a setGraph() con un nuovo grafico ora cancella anche le eventuali serie di elementi precedenti salvate, oltre al comportamento precedente di estrazione della serie di elementi precedenti. (I97f96)
  • Risolto un problema per cui le istanze OnDestinationChangedListener e il currentBackStackEntryFlow non venivano notificate quando si utilizzava launchSingleTop. (Iaaebc)

Aggiornamenti delle dipendenze

Versione 2.4.0-alpha08

1° settembre 2021

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

Nuove funzionalità

Modifiche al comportamento

  • Quando generi 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)
  • Ora i link diretti 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(), in combinazione con remember(), non causerà più un'eccezione per l'assenza di una destinazione nello stack precedente. (I75138, b/194313238)
  • La composizione di navigazione ora si ricomponie correttamente quando si ripristinano gli argomenti di stack e si utilizza launchSingleTop=true. (Iebd69, b/186392337)
  • Non sarà più presente 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 a ospixd per aver verificato che i link diretti garantiscano 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 rilasciato. La versione 2.4.0-alpha07 contiene questi commit.

Correzioni di bug

  • La funzionalità di composizione della navigazione ora salva correttamente lo stato dopo le modifiche alla configurazione e quando si modificano i grafici durante l'utilizzo della funzionalità di più livelli di immissione. (If5a3d, b/195141957)
  • La selezione di nuovo della stessa scheda quando si utilizza la composizione della navigazione con più serie di tasti Indietro non comporterà più una schermata vuota. (I860dc, b/194925622)
  • NavHost ora rileva le modifiche nel Lifecycle.State di NavBackStackEntry, il che significa che l'utilizzo di un 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à (ad esempio dopo una modifica della configurazione). (Icd72b)
  • È stato risolto un problema per cui l'apertura di una destinazione della finestra di dialogo non aggiornava la gestione del pulsante Indietro di sistema di NavController, con il potenziale rischio che NavController intercettasse il pulsante Indietro anche se non aveva una pila Indietro da aprire. (If3b34)
  • Ora Safe-args 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 rilasciato. La versione 2.4.0-alpha06 contiene questi commit.

Modifiche all'API

  • I metodi requireSlidingPaneLayout() e requireDetailPaneNavHostFragment() in 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 ora raggiungerà il RESUMED solo al termine dell'animazione. (If0543, b/172112072, b/194301889)
  • Ora NavHost di Componi navigazione imposta il grafico come parte della prima composizione. (Ieb7be)

Correzioni di bug

  • L'apertura dell'ultima destinazione di un grafo 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)
  • È stato risolto un problema in Componi navigazione per cui un NavBackStackEntry con link diretto non raggiungeva lo stato RESUMED. (I192c5)
  • È stato risolto un problema per cui l'apertura di una destinazione della finestra di dialogo non aggiornava la gestione del pulsante Indietro di sistema di NavController, con il potenziale rischio che NavController intercettasse il pulsante Indietro anche se non aveva una pila Indietro da aprire. (aosp/1782668)

Versione 2.4.0-alpha05

21 luglio 2021

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

Modifiche al comportamento

  • NavHost di Componi navigazione ora utilizza sempre le transizioni tra le destinazioni. (I07049, b/172112072)
  • Ora puoi apportare modifiche al grafo di un NavHost. I grafici con la stessa destinazione iniziale e le stesse destinazioni nel grafico verranno considerati uguali e non cancelleranno la pila di ritorno NavController. (I0b8db, b/175392262)

Correzioni di bug

  • È stato corretto un NoSuchElementException quando si chiama popBackStack() da un LifecycleObserver collegato a un NavBackStackEntry causato da aggiornamenti ricorsivi dello 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 in modo che due oggetti con gli stessi valori vengano considerati uguali. (I166eb, b/175392262)

Versione 2.4.0-alpha04

1° luglio 2021

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

Nuove funzionalità

  • L'elemento 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 tua sottoclasse) e un riquadro dei dettagli, che utilizza un NavHostFragment come implementazione, come mostrato nella nostra implementazione di esempio. (Iac4be, b/191276636)
  • L'elemento NavHost dell'elemento navigation-compose ora supporta le destinazioni dialog, oltre a quelle composable. Ognuna di queste destinazioni della finestra di dialogo verrà visualizzata in un componente 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 all'API

  • La funzione add in NavigatorState è stata rinominata in push. Tutte le chiamate attuali a add() dovranno essere modificate in push(). (Ie89fc, b/172112072)
  • Ora le istanze Navigator personalizzate possono utilizzare le API pushWithTransaction e popWithTransition su NavigatorState per inviare o ricevere 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 si sceglie come target Android 12. (If8c52)

Correzioni di bug

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

Versione 2.4.0-alpha03

16 giugno 2021

androidx.navigation:navigation-*:2.4.0-alpha03 viene rilasciato. 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)
  • È stata risolta una regressione introdotta in Navigazione 2.4.0-alpha01 per cui setupActionBarWithNavController() non rimuoveva correttamente l'icona Alza quando si trovava in una destinazione di primo livello. (I5d443, b/189868637)
  • È stato corretto un errore IllegalStateException quando si chiama popBackStack() dopo aver precedentemente visualizzato il grafico principale del NavController. (I2a330, b/190265699)
  • Ora le regole di ProGuard per by navArgs() vengono applicate correttamente quando si utilizza by navArgs() o gli elementi correlati.navigation-common (I68800, b/190082521)
  • Un OnDestinationChangedListener che chiama navigate() la prima volta che riceve un callback ora riceve correttamente un secondo callback con la destinazione a cui è stato eseguito il passaggio. (Ie5f9e, b/190228815)
  • Safe Args non si arresta più in modo anomalo se utilizzato con moduli di funzionalità dinamici e AGP 7.0 o versioni successive. (I69518, b/189966576)

Problema noto

  • Safe Args non andrà a buon fine con un errore Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ quando utilizzi Gradle 6.7.0 a causa di una dipendenza da una versione precedente di Kotlin. Questo problema può essere risolto aggiornando Gradle a 7.0. (b/190739257)

Versione 2.4.0-alpha02

2 giugno 2021

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

Nuove funzionalità

  • Le route sono ora supportate per le destinazioni Activity, Fragment e Dialog, nonché nell'intero DSL Kotlin di DynamicNavigation. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI ha aggiunto temporaneamente API sperimentali per consentire la disattivazione del salvataggio dello stato. Sebbene il salvataggio dello stato sia il comportamento corretto, esistono ancora utilizzi di librerie ritirate (ad es. frammenti mantenuti) che non possono essere supportati durante il salvataggio dello stato, pertanto questa opzione offre alle app la possibilità di eseguire lentamente la conversione da qualsiasi API non supportata. (Idf93c)
  • La navigazione ora fornisce le API findDestination() e getHierarchy() che possono essere utilizzate per implementare NavigationUI personalizzato. findDestination() è una funzione di estensione di NavGraph che consente di individuare una destinazione all'interno del grafico. getHierarchy() è una funzione di NavDestination che può essere utilizzata per verificare se una determinata destinazione rientra nella 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 in modo da accettare il superclasse introdotto in Material 1.4.0, NavigationBarView. In questo modo, questi metodi possono essere utilizzati con NavigationRailView. (Ib0b36, b/182938895)

  • Quando gonfi 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 all'API

  • I builder DSL Kotlin 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 di riavvio del sistema o facendo clic al di fuori, assicurandosi che lo stato di NavController sia sempre in sincronia con lo stato del navigatore. (I2ead9)
  • La navigazione non restituisce più un ConcurrentModificationException quando si manipola l'elenco di OnDestinationChangedListeners con un callback onDestinationChanged. (Ib1707, b/188860458)

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

  • Il metodo setId su NavDestination ora è correttamente annotato con @IdRes, pertanto 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ù ricevere 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 rilasciato. La versione 2.4.0-alpha01 contiene questi commit.

Nuove funzionalità

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

Più serie di foto simili

NavController è responsabile della gestione della pila di destinazione precedente, aggiungendo le destinazioni quando navigate() e rimuovendole quando chiami popBackStack() o attivi il pulsante Indietro del sistema. La classe NavOptions esistente e l'integrazione nelle voci <action> del file XML del grafico di navigazione sono state ampliate per supportare il salvataggio e il ripristino della pila di ritorno. (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 poppate, consentendo il supporto di più stack di ritorno senza alcuna modifica al codice. Quando utilizzi Navigation con i frammenti, questo è il modo consigliato per l'integrazione con più stack di ritorno. (Ie07ca)

Le API sottostanti per il salvataggio e il ripristino dello stato sono esposte tramite una serie di 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 eventuali 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 navOptions, puoi aggiungere la proprietà booleana restoreState e la proprietà booleana saveState al compilatore popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Per creare manualmente un oggetto NavOptions tramite NavOptions.Builder, puoi utilizzare setRestoreState() e il nuovo sovraccarico di 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 eventuali istanze di ViewModel basate sulla destinazione di navigazione. Le API Navigator sono state aggiornate per consentire a ogni Navigator di supportare il salvataggio e il ripristino del proprio stato.

ComposeNavigator utilizzato per le destinazioni composable in Navigation Compose e FragmentNavigator e DynamicFragmentNavigator utilizzati per le destinazioni <fragment> in Navigation con i frammenti sono stati entrambi 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 fa parte delle API di navigazione di base. Questa è un'alternativa all'utilizzo di ID interi durante la costruzione del grafico tramite il DSL Kotlin di navigazione. (b/172823546)

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

Ciò ha avuto alcune implicazioni per le API:

  • La proprietà popUpTo kotlin nel DSL Kotlin è stata ritirata a favore di popUpToId. (I59c73, b/172823546)
  • L'API getStartDestination() è stata ritirata in 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 le seguenti importazioni nei metodi di estensione non sono più necessarie e devono essere rimosse:

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 in NavDestination, il che ti consente di chiamare direttamente navBackStackEntry.destination.route.

Modifiche all'API

  • Tutti gli elementi di navigazione sono stati riscritti in Kotlin. In questo modo è stata migliorata la nullabilità delle classi che utilizzano i generici (ad esempio le sottoclassi NavType). Tutte le funzioni di estensione Kotlin che facevano parte degli elementi -ktx sono state spostate nei rispettivi elementi principali. Gli elementi -ktx continueranno a essere pubblicati, ma sono completamente vuoti. (b/184292145)
  • NavDeepLinkBuilder ora supporta l'aggiunta di più destinazioni distinte allo stack back generato. (I3ee0d, b/147913689)
  • Aggiungi funzioni di fabbrica per DynamicNavHostFragment (Icd515, b/175222619)
  • L'ID univoco di un NavBackStackEntry ora è esposto nell'ambito 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 il NavBackStackEntry ai locali 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 da Lifecycle 2.3.1 e ora contrassegna setGraph(), popBackStack(), navigateUp() e navigate(), i metodi che aggiornano il NavBackStackEntry Lifecycle, come @MainThread, allineando la navigazione all'applicazione del thread principale introdotta in Lifecycle 2.3.0. (b/171125856)
  • L'analisi degli argomenti Enum dai link diretti ora è insensibile alle maiuscole, il che consente 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 Componi

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

Correzioni di bug

  • È stato 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 i navigatori personalizzati che utilizzano lo stesso @Navigator.Name("dialog") del 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 generando un metodo fromSavedStateHandle() per ogni classe NavArgs. (#122, b/136967621)
  • Grazie a Bradleycorn per aver reso la sintassi di analisi degli argomenti Enum dai link diretti non sensibile alle maiuscole. (#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 a 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 a jossiwolf per aver introdotto una nuova estensione NavBackStackEntry#provideToCompositionLocals che fornisce il NavBackStackEntry ai locali delle composizioni pertinenti. (#175, b/187229439)
  • Grazie a jossiwolf per aver migliorato il comportamento di NavigatorProvider#addNavigator per assicurarsi che la chiamata ripetuta 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 rilasciato. La versione 1.0.0-alpha10 contiene questi commit.

Modifiche all'API

  • NavHost ora accetta un Modifier, che viene trasmesso al contenitore composable che racchiude i composable di destinazione. (I85aca, b/175125483)

Correzioni di bug

  • NavHost ora funziona anche quando non viene trovato un OnBackPressedDispatcherOwner, ad esempio durante l'anteprima del NavHost. (I7d8b4)
  • La compilazione della navigazione ora dipende da 2.3.5 di navigazione, risolvendo un problema relativo all'utilizzo di 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 rilasciato. La versione 1.0.0-alpha09 contiene questi commit.

Modifiche all'API

  • LocalViewModelStoreOwner.current ora restituisce un valore ViewModelStoreOwner facoltativo per determinare meglio se un valore ViewModelStoreOwner è disponibile nella composizione corrente. Le API che richiedono un ViewModelStoreOwner, come 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 rilasciato. La versione 1.0.0-alpha08 contiene questi commit.

Nuove funzionalità

  • NavHost ora compila LocalSavedStateRegistryOwner CompositionLocal con NavBackStackEntry della destinazione, garantendo 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 rilasciato. 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 rilasciato. La versione 1.0.0-alpha06 contiene questi commit.

Modifiche all'API

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

Versione 1.0.0-alpha05

13 gennaio 2021

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

Aggiornato in modo da dipendere da Compose 1.0.0-alpha10.

Versione 1.0.0-alpha04

16 dicembre 2020

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

  • Aggiornamento 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 rilasciato. 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 rilasciato. La versione 1.0.0-alpha02 contiene questi commit.

Modifiche all'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 prende un percorso anziché un ID che consente di creare grafici nidificati nel DSL di composizione della navigazione. (I1661d)
  • startDestination ora precede il percorso nell'elenco dei parametri per un NavHost (Ie620e)
  • Ora puoi creare un grafo utilizzando il percorso come destinazione iniziale 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 rilasciato. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

L'elemento navigation-compose fornisce l'integrazione tra il componente di navigazione e Jetpack Compose. Utilizza le funzioni @Composable come destinazioni nell'applicazione.

Questa release iniziale fornisce:

  • Un composable NavHost che ti consente di costruire il grafico di navigazione tramite un DSL Kotlin.
  • 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'associazione di link diretti alle destinazioni e il ritorno di un risultato alle destinazioni precedenti.
  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire il sollevamento dello stato e la connessione del NavController ai composabili esterni al NavHost (ad esempio una barra di navigazione in basso).

Per ulteriori informazioni, consulta la guida alla navigazione nella composizione.

Versione 2.3.5

Versione 2.3.5

7 aprile 2021

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

Nuove funzionalità

  • Quando navighi utilizzando un NavDeepLinkRequest o un Uri, ora puoi accedere al Uri, all'azione e al tipo MIME nella destinazione risultante recuperando l'intent dagli argomenti tramite KEY_DEEP_LINK_INTENT, rispecchiando la funzionalità già disponibile per i link diretti esterni. (I975c3, b/181521877)

Correzioni di bug

  • OnBackPressedCallbacks aggiunto a un dispatcher con NavBackStackEntry come LifecycleOwner ora intercetta correttamente il ritorno dopo che il ciclo di vita dell'attività è STOPPED, quindi STARTED (Iff94f, b/182284739)
  • L'analisi del dominio dei link diretti ora non è sensibile alle maiuscole, pertanto www.example.com corrisponde sia a www.example.com che a www.Example.com. Tieni presente che i nomi dei parametri di query sono ancora sensibili alle maiuscole. (#144, b/153829033)
  • È stato corretto un NullPointerException che poteva verificarsi quando una destinazione ha più argomenti predefiniti non null e si accede a quella destinazione sostituendo solo un sottoinsieme di questi argomenti. (aosp/1644827)

Aggiornamenti delle dipendenze

Contributo esterno

  • Grazie a bentrengrove per la pull request che rende la parsing del dominio dei link diretti insensibile alle maiuscole. (#144, b/153829033)

Versione 2.3.4

Versione 2.3.4

10 marzo 2021

androidx.navigation:navigation-*:2.3.4 viene rilasciato. 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. Sono supportati sia il valore intero non elaborato sia i valori esadecimali con prefisso 0x. (#127, b/179166693)
  • android:defaultValue per un argomento con app:argType="float" ora supporta i valori predefiniti interi, il che ti consente di utilizzare android:defaultValue="0" anziché 0.0. (#117, b/173766247)

Correzioni di bug

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

Contributi esterni

  • Grazie a JvmName per la pull request che ha permesso di 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 a tatocaster per la richiesta pull che consente a defaultValue per un argomento con app:argType=”float” di supportare ora 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 rilasciato. 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 la navigazione a un'attività con un valore della risorsa animazione pari a 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 rilasciato. La versione 2.3.2 contiene questi commit.

Correzioni di bug

  • È stata corretta una regressione in NavigationUI per 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 consentiva di accedere alla destinazione appena installata più volte. (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 a un grafo di navigazione nidificato non creava una nuova istanza del grafo nella pila precedente. (Ifc831)
  • È stato risolto un problema per cui l'utilizzo di navigate() con un popUpTo che rimuoveva l'ultima destinazione in un grafo di navigazione non distruggeva e rimuoveva immediatamente il grafo di navigazione stesso dallo stack precedente. (I910a3)
  • Navigation SafeArgs ora utilizza la versione 1.7.2 di KotlinPoet, che aggiunge il supporto per la modalità API esplicita di Kotlin. (I918b5)
  • NavHostFragment.findNavController(Fragment) ora controlla anche la vista decor principale di un DialogFragment, oltre ai controlli esistenti della gerarchia dei frammenti e della gerarchia delle viste dei frammenti. In questo modo puoi 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 rilasciato. 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 sostituisce i 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 dell'argomento generato è più lungo di 100 caratteri. (b/168584987)

Modifiche alle dipendenze

  • navigation-ui ora dipende da DrawerLayout 1.1.1, in modo da garantire che NavigationUI sia in grado di aprire il riquadro a scomparsa 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 rilasciato. La versione 2.3.0 contiene questi commit.

Modifiche principali dalla versione 2.2.0

  • Integrazione dei moduli delle funzionalità: gli elementi navigation-dynamic-features-runtime e navigation-dynamic-features-fragment ti consentono di accedere alle destinazioni definite nei moduli delle funzionalità, gestendo automaticamente l'installazione dei moduli delle funzionalità in base alle esigenze. Per ulteriori informazioni, consulta Navigare con i moduli di funzionalità.
  • Test di navigazione: l'elemento navigation-testing fornisce un TestNavHostController che consente di impostare la destinazione corrente e verificare la pila di ritorno dopo le operazioni di navigazione. Per ulteriori informazioni, consulta Testare la navigazione.
  • Restituzione di un risultato: il NavBackStackEntry associato a ogni destinazione nella pila di navigazione ora consente di accedere a un SavedStateHandle adatto per memorizzare piccole quantità di stato salvato da associare a una determinata voce della pila di navigazione. Per saperne di più, consulta Restituire un risultato alla 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 Action e Mime Type nei link diretti: i link diretti sono stati estesi per supportare app:action e app:mimeType, oltre a app:uri, disponibile in precedenza. NavController ora supporta la navigazione in base a qualsiasi combinazione di questi campi tramite la nuova classe NavDeepLinkRequest. Per ulteriori informazioni, vedi Eseguire la navigazione utilizzando NavDeepLinkRequest.

Problemi noti

  • Il supporto per le azioni dei link diretti e i tipi MIME non è ancora disponibile in Manifest Merger. Fino al completamento di questo lavoro, tutti gli elementi <intent-filter> generati dall'elemento <nav-graph> nel manifest non includeranno il tipo MIME nell'elemento <data> o il <action> personalizzato. 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 rilasciato. La versione 2.3.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema relativo a NullPointerException quando si sostituisce un'istanza di una destinazione senza argomenti con un'altra istanza con argomenti con singleTop. (b/158006669)
  • Tutte le eccezioni destination is unknown lanciate 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 sono state rilasciate. La versione 2.3.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui il Lifecycle del NavBackStackEntry non veniva aggiornato correttamente dopo l'interruzione del processo. (b/155218371)
  • Le istanze OnDestinationChangedListener registrate prima di chiamare setGraph() ora ricevono correttamente la destinazione ripristinata dopo l'interruzione di un processo. (b/155218371)
  • Quando utilizzi singleTop, gli argomenti di NavBackStackEntry vengono ora 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 rilasciato. (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 disponibili. NavController ora supporta la navigazione in base a qualsiasi combinazione di questi campi tramite la nuova classe NavDeepLinkRequest. (b/136573074, b/135334841)

Modifiche all'API

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

Correzioni di bug

  • Risolto un problema per cui gli intent dei link diretti 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 rilasciato. La versione 2.3.0-alpha05 contiene questi commit.

Nuove funzionalità

  • Per le inclusioni di grafici dinamici che utilizzano <include-dynamic>, non è più necessario specificare app:graphPackage e verrà utilizzato un valore predefinito aggiungendo il suffisso moduleName a applicationId dopo un punto. Se devi personalizzare graphPackage, ora è supportato un segnaposto graphPackage.${applicationId} (b/152696768)
  • Il DSL Kotlin del grafo 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 Navigation 2.2.2: è stato corretto un problema IllegalStateException relativo al link diretto 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 rilasciato. La versione 2.3.0-alpha04 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto il supporto per l'attività del modulo di funzionalità e le destinazioni dei frammenti nel DSL Kotlin di Navigation. (b/148969800)

Modifiche all'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 suo costruttore anziché un Activity. (aosp/1250252)

Correzioni di bug

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

Aggiornamenti delle dipendenze

  • Gli elementi 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 rilasciato. La versione 2.3.0-alpha03 contiene questi commit.

Modifiche all'API

  • Anziché fare affidamento sulla classe DrawerLayout concreta, 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 ProGuard per navigation-common-ktx ora mantengono correttamente solo le classi navigation-common-ktx utilizzate anziché tutte le istanze navigation-common-ktx.NavArgsNavArgs (b/150213558)

Modifiche alle dipendenze

  • La navigazione ha ripristinato la 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 rilasciato. La versione 2.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • NavBackStackEntry ora consente di accedere a un SavedStateHandle adatto per memorizzare piccole quantità di stato salvato da associare a una determinata voce della pila di ritorno. Per un esempio di caso d'uso, consulta Restituire un risultato. (b/79672220)

Modifiche all'API

  • Sono stati aggiunti metodi di comodità per getCurrentBackStackEntry() e getPreviousBackStackEntry() per semplificare il recupero di un NavBackStackEntry per le destinazioni correnti 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 rilasciato. 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 NavController simulato durante il test di navigazione che consente di impostare la destinazione corrente e verificare la pila di ritorno dopo le operazioni di navigazione. (b/140884273)
  • Il nuovo navigation-dynamic-features-fragment (e la relativa dipendenza transitiva, navigation-dynamic-features-runtime) ti consente di includere destinazioni o interi grafici di navigazione (tramite <include-dynamic>) dai moduli delle funzionalità, garantendo un'installazione senza problemi dei moduli delle funzionalità on demand quando navighi verso queste destinazioni. Per ulteriori informazioni, consulta Navigare con i moduli di funzionalità. (b/132170186)

Correzioni di bug

  • In 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 ProGuard navigation-ui per DrawerArrowDrawable sono state aggiornate per garantire che android.enableJetifier=true non sia obbligatorio. (b/147610424)
  • In 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 sono state rilasciate. La versione 2.2.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema relativo al IllegalStateException quando si crea un link diretto alla destinazione iniziale del grafico se nella tua attività sono presenti più istanze di NavHostFragment. (b/147378752)
  • NavigationUI non ignora più le etichette vuote (ad es. 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 ProGuard per navigation-common-ktx ora mantengono correttamente solo le classi navigation-common-ktx utilizzate anziché tutte le istanze navigation-common-ktx.NavArgsNavArgs 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 rilasciato. La versione 2.2.1 contiene questi commit.

Correzioni di bug

  • I link diretti senza parametri di query ora ignorano correttamente i parametri di query anziché aggiungerli agli elementi {argument} finali o non corrispondere al link diretto. (b/147447512)
  • Le regole di ProGuard navigation-ui per DrawerArrowDrawable sono state aggiornate per garantire che android.enableJetifier=true non sia obbligatorio. (b/147610424)
  • 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.0

Versione 2.2.0

22 gennaio 2020

androidx.navigation:navigation-*:2.2.0 viene rilasciato. 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 grafo di navigazione nella pila di ritorno. Il valore NavBackStackEntry restituito fornisce un LifecycleOwner basato sulla navigazione, ViewModelStoreOwner (lo stesso restituito da NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner, oltre a fornire gli argomenti utilizzati per avviare la destinazione.
  • Integrazione di SavedState con ViewModel del ciclo di vita: SavedStateViewModelFactory è ora la fabbrica 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 query per i link diretti: i link diretti con parametri di query ora supportano i parametri di query riordinati; gli argomenti che hanno un valore predefinito o sono nullable ora sono facoltativi per la corrispondenza dei link diretti.
  • Miglioramento del supporto delle animazioni: NavHostFragment ora utilizza FragmentContainerView dal Frammento 1.2.0, risolvendo i problemi di ordinamento Z delle animazioni e l'invio di insiemi di riquadri ai frammenti.

Versione 2.2.0-rc04

18 dicembre 2019

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

Correzioni di bug

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

Versione 2.2.0-rc03

4 dicembre 2019

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

Correzioni di bug

  • È stato risolto un problema di analisi del link diretto quando vengono utilizzati 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 della configurazione se 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, se opportuno.

Versione 2.2.0-rc02

7 novembre 2019

androidx.navigation:navigation-*:2.2.0-rc02 viene rilasciato. 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 rilasciato. La versione 2.2.0-beta01 contiene questi commit.

Nuove funzionalità

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

Modifiche al comportamento

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

Correzioni di bug

  • Risolto un problema per cui gli argomenti nel percorso di un link diretto venivano ignorati se erano specificati anche i parametri di query. (b/141505755)
  • L'estensione Kotlin di navArgs() su Activity ora ha un messaggio di errore migliore quando non sono presenti extra. (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 viene utilizzato 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 rilasciato. La versione 2.2.0-alpha03 contiene questi commit.

Modifiche al comportamento

  • La chiamata a setViewModelStore() dopo la chiamata a setGraph ora genera un 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 problema relativo a ConcurrentModificationException quando si utilizzano istanze ViewModel collegate a più istanze ViewModelStore basate su diversi grafici di navigazione. (aosp/1112257)

Versione 2.2.0-alpha02

5 settembre 2019

androidx.navigation:navigation-*:2.2.0-alpha02 viene rilasciato. 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 nullable sono ora facoltativi per la corrispondenza dei link diretti. (b/133273839)
  • Ora puoi chiamare NavController.getBackStackEntry() passando l'ID di una destinazione o di un grafo di navigazione nello stack precedente. Il valore NavBackStackEntry restituito fornisce un LifecycleOwner basato sulla navigazione, ViewModelStoreOwner (lo stesso restituito da NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner, oltre a fornire gli argomenti utilizzati per avviare la destinazione. (aosp/1101691, aosp/1101710)

Correzioni di bug

  • È stato risolto un problema per cui l'aggiunta di un NavHostFragment a ViewPager2 non andava a buon fine con un IllegalArgumentException. (b/133640271)
  • Ora NavInflater evita di chiamare getResourceName() inutilmente, accelerando il tempo di inflazione fino al 40%. (b/139213740)

Versione 2.2.0-alpha01

7 agosto 2019

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

Nuove funzionalità

  • SavedStateViewModelFactory è ora il valore predefinito utilizzato 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 incavi della finestra ai frammenti. (b/137310379)

Versione 2.1.0

Versione 2.1.0

5 settembre 2019

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

Modifiche importanti dalla versione 2.0.0

  • Definizione dell'ambito dei ViewModel in base a un grafo di navigazione: ora puoi creare ViewModel con ambito a livello di grafo 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 scoprire di più, consulta Condividere dati relativi all'interfaccia utente tra le destinazioni.
  • Destinazioni di dialogo: ora puoi creare destinazioni <dialog> che mostrino un DialogFragment quando navigate a queste destinazioni. NavHostFragment supporta le destinazioni della finestra 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, consulta la sezione Eseguire la navigazione utilizzando Uri.
  • NavHostController: le API utilizzate specificamente per la costruzione di un NavHost personalizzato sono state spostate in NavHostController, consentendo alle implementazioni di collegare 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 rilasciato. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

  • L'API getViewModelStore() deprecata 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 rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stata rimossa la dipendenza da JaCoCo non intenzionale introdotta in 2.1.0-beta01. (b/137782950)

Versione 2.1.0-beta01

17 luglio 2019

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

Nuove funzionalità

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

Correzioni di bug

  • È stato risolto un problema di temporizzazione 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 rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • L'attributo app:navGraph utilizzato da NavHostFragment è stato spostato nell'elemento navigation-runtime. I navigatori personalizzati che possono essere aggiunti tramite XML devono utilizzare questo attributo per ottenere l'integrazione con il riquadro Organizzatore di Navigation Editor. (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 di finestre mobili, come le destinazioni <dialog>, è stata generalizzata in un'interfaccia di indicatore, FloatingWindow, che ora viene implementata da tutte le destinazioni <dialog>. I metodi NavigationUI per interagire con la barra delle app in alto ora ignorano le destinazioni FloatingWindow. (b/133600763)

Modifiche al comportamento

  • La navigazione ora mantiene correttamente lo stato in sincronia con ciò che viene visualizzato sullo schermo quando si utilizza una destinazione <dialog>. Di conseguenza, ora la navigazione mostra automaticamente le destinazioni <dialog> quando vai a una destinazione non di dialogo e non di attività, ad esempio una destinazione <fragment>. (b/134089818)

Correzioni di bug

  • La navigazione ora elimina l'animazione che si verifica durante la ricreazione dell'attività quando si gestisce un link diretto, correggendo un lampo visivo. (b/130362979)
  • È stato corretto un bug per cui la pila di navigazione a ritroso non era sincronizzata quando veniva visualizzato un frammento durante l'aggiunta del frammento iniziale. (b/133832218)

Versione 2.1.0-alpha05

5 giugno 2019

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

Modifiche all'API

  • Le API correlate all'hosting su NavController sono state rinominate e spostate in una nuova sottoclasse di NavController, NavHostController. (aosp/966091)
  • Il metodo NavController setHostOnBackPressedDispatcherOwner() è stato sostituito con il 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 restituita in precedenza da setHostOnBackPressedDispatcherOwner(). (aosp/966091)

Correzioni di bug

  • È stato risolto un problema per cui la pila di ritorno non era corretta dopo la navigazione tramite URI. (b/132509387)
  • I link diretti gestiti automaticamente da NavController ora vengono attivati una sola volta. (b/132754763)

Versione 2.1.0-alpha04

16 maggio 2019

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

Correzioni di bug

  • NavHostFragment rispetta correttamente app:defaultNavHost quando intercetta gli eventi del pulsante Indietro di sistema, correggendo una regressione nella 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 la navigazione ripetuta tra grafici nidificati. b/131733658

Versione 2.1.0-alpha03

7 maggio 2019

androidx.navigation:*:2.1.0-alpha03 viene rilasciato. 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 mostrino un DialogFragment quando navigate. NavHostFragment supporta le destinazioni della finestra di dialogo per impostazione predefinita. b/80267254
  • Oltre a chiamare navigate con un ID risorsa o un'istanza NavDirections, ora puoi eseguire la navigazione tramite un Uri, che utilizza il <deepLink> che hai aggiunto a una destinazione per passare alla destinazione corretta. b/110412864

Modifiche al comportamento

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

Modifiche all'API

  • Il metodo createFragmentNavigator() di NavHostFragment è stato ritirato e la relativa funzionalità è stata spostata nel nuovo metodo onCreateNavController() per chiarire che questo è il punto di contatto corretto per l'aggiunta di Navigator personalizzati quando si esegue il sottoclassamento di NavHostFragment. b/122802849
  • A NavDestination è stato aggiunto un metodo hasDeepLink() per consentirti di verificare se un determinato Uri può essere gestito da quella destinazione o, nel caso di un NavGraph, da qualsiasi destinazione nel grafo di navigazione. b/117437718

Correzioni di bug

  • Gli argomenti predefiniti ora vengono passati correttamente alle istanze OnDestinationChangedListener. b/130630686
  • NavHostFragment ora intercetta gli eventi di sistema Indietro utilizzando OnBackPressedDispatcher, risolvendo un problema relativo alla navigazione condizionale nei metodi del ciclo di vita del frammento al ritorno a un frammento. 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 rilasciato. 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 un Class 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 all'API

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

Correzioni di bug

  • La navigazione non invia più un Bundle nullo quando sono associati argomenti a una destinazione, risolvendo un problema relativo all'utilizzo di android:defaultValue="@null". b/128531879
  • Safe Args ora dipende da KotlinPoet 1.1.0, risolvendo un problema con i 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 elementi con l'ID gruppo androidx.navigation e modifica le dipendenze in modo che corrispondano a quelle di AndroidX.

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

Per poter utilizzare le release 2.X di Navigation, il progetto deve aver eseguito la migrazione ad AndroidX. La versione stabile di Navigation 1.0 sarà l'ultima release che utilizza le dipendenze della libreria di supporto. Tutto lo sviluppo futuro oltre la versione 1.0 si baserà su AndroidX e sulla release stabile 2.0.

Dipendenze precedenti ad AndroidX

Per le versioni di Navigation precedenti ad AndroidX, 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

Questa è la seconda release candidate per la release stabile 1.0.0 di Navigazione. Questa release contiene una serie di correzioni di bug.

Correzioni di bug

  • Risolto un problema per cui popBackStack() veniva ignorato se il grafo principale 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 alla mancata applicazione dell'animazione di uscita pop corretta da parte di ActivityNavigator.applyPopAnimationsToPendingTransition 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

Si tratta di un candidato per la release stabile 1.0.0 di Navigazione. Questa release contiene una correzione di bug.

Correzioni di bug

  • È stato risolto un problema relativo all'utilizzo di frammenti e operazioni di navigazione singleTop b/124294805

Versione 1.0.0-beta02

12 febbraio 2019

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

Nuove funzionalità

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

Modifiche al comportamento

  • Le corrispondenze dei link diretti esatte ora hanno la priorità sui link diretti con corrispondenze degli argomenti .* o . b/123969518

Correzioni di bug

  • popBackStack() e navigateUp ora restituiscono correttamente false quando viene estratta l'ultima destinazione dalla pila di ritorno, 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 durante l'utilizzo di classi personalizzate nello stato salvato di Navigator o negli argomenti inviati a un NavDestination. b/123893858
  • Le classi NavArgs generate da Safe Args non si arrestano più in modo anomalo durante il ripristino di un argomento Parcelable[] dallo stato dell'istanza salvato. b/123963545
  • Safe Args ora ripulisce correttamente le classi Kotlin generate non necessarie. b/124120883

Versione 1.0.0-beta01

4 febbraio 2019

Questa è la 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 al comportamento.

Modifiche al comportamento

  • 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 rimanda a un'altra risorsa (ad esempio @color/colorPrimary). Il tentativo di utilizzare un valore predefinito di riferimento con un app:argType diverso comporterà un'eccezione durante la lettura del file 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 librerie e funzionalità su tutte le versioni del plug-in Android per Gradle. b/121304903
  • È stata corretta una regressione che causava il recupero di tutte le copie di una destinazione dalla parte superiore della pila posteriore con una singola operazione popBackStack(), anziché solo una singola destinazione alla volta. b/123552990
  • È stato risolto un problema per cui lo stato FragmentNavigator si disaccoppiava con lo stato di NavController, causando un IllegalStateException quando si tentava di ripristinare la pila precedente. b/123803044
  • È stato risolto un problema per cui la freccia Indietro gestita NavigationUI non veniva visualizzata quando si utilizzava ProGuard con l'oscuramento. b/123449431
  • Il codice generato da Safe Args ora gestisce correttamente l'utilizzo di un app:argType che rimanda 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 modo approfondito. b/123347762

Versione 1.0.0-alpha11

23 gennaio 2019

Questa è una release hotfix di 1.0.0-alpha10 che corregge un problema relativo a Safe Args.

Correzioni di bug

  • Risolto 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 alle API che causano interruzioni; consulta la sezione Modifiche che causano interruzioni di seguito.

Nuove funzionalità

  • Ora gli utenti di Kotlin possono utilizzare il delegato della proprietà by navArgs() per recuperare in modo lazy 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-inandroidx.navigation.safeargs.kotlin. Il codice Kotlin viene compilato specificamente per i moduli solo Kotlin, utilizzando argomenti predefinite e classi immutabili rispetto al pattern di builder che è ancora disponibile tramite il plug-in androidx.navigation.safeargs precedente. b/110263087

Modifiche al comportamento

  • I link diretti corrispondenti ora sono orientati verso il link diretto con il maggior numero di argomenti corrispondenti. b/118393029
  • Ora, chiamare setGraph() su un NavController reimposta lo stack di ritorno. 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 animazioni pop a un'attività è stato spostato in ActivityNavigator. b/122413117
  • Ora Safe Args evita di duplicare classi identiche per azioni senza argomenti. Il tipo di ritorno per i metodi senza argomenti nelle classi NavDirections generate ora è NavDirections. b/123233147
  • I classi Directions generati 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 constructor pubblico: devono essere generate solo tramite i metodi statici nelle classi Directions generate. b/122963206
  • Il valore Bundle restituito da NavDirections e 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 passi per determinare l'unicità. b/120042732
  • NavController ora gestisce correttamente le operazioni popBackStack() quando viene utilizzato un NavHostFragment nidificato o altri frammenti secondari con una pila di ritorno. 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 in una destinazione. b/122962504
  • Le classi NavDirections generate da Safe Args ora hanno correttamente valori hashCode() uguali quando equals() restituisce true. b/123043662
  • FragmentNavigator ora genera un messaggio di errore migliore se tenti di eseguire FragmentTransactions personalizzato sul FragmentManager di NavHostFragment. Devi sempre utilizzare getChildFragmentManager(). b/112927148

Versione 1.0.0-alpha09

18 dicembre 2018

Questa release contiene modifiche alle API che causano interruzioni; consulta la sezione Modifiche che causano interruzioni di seguito.

Abbiamo scelto di non continuare lo sviluppo dell'elemento android.arch.navigation:navigation-testing. Sebbene sia stato dimostrato utile per i test interni di NavController, consigliamo vivamente di utilizzare strategie di test alternative, ad esempio simulare l'istanza NavController per verificare che vengano eseguite le chiamate navigate() corrette. Questo approccio è discusso in dettaglio nel talk sull'attività singola all'AndroidDevSummit 2018 e stiamo lavorando a ulteriore documentazione specifica sui test con Navigation.

Nuove funzionalità

  • I MenuItem con menuCategory="secondary" non apriranno più la pila precedente se utilizzati con i metodi NavigationUI. b/120104424
  • Ora AppBarConfiguration consente di impostare un'istanza di fallback OnNavigateUpListener 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", 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 aprire la pila precedente. aosp/852869
  • I metodi fromBundle() delle classi Args generate ora accettano un valore non nullo Bundle anziché un valore nullable Bundle aosp/845616

Correzioni di bug

  • Ora gli argomenti vengono analizzati correttamente dai link diretti come argType corretto invece che 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 alle API che causano interruzioni; consulta la sezione Modifiche che causano interruzioni di seguito.

Nuove funzionalità

  • Le etichette di destinazione, se utilizzate con i metodi NavigationUI, ora sostituiranno automaticamente le istanze {argName} in 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 di argomenti aosp/837142
  • Gli attributi app:clearTask e app:launchDocument e i relativi metodi associati 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 eventuali flag Intent.FLAG_ACTIVITY_. aosp/828140
  • NavController.onHandleDeepLink è stato rinominato in handleDeepLink aosp/836063
  • Molte classi e metodi non pensati per la sottoclassificazione, come NavOptions, NavInflater, NavDeepLinkBuilder e AppBarConfiguration, sono stati resi final aosp/835681
  • Il metodo NavHostFragment.setGraph() deprecato è stato rimosso aosp/835684
  • Il metodo NavigationUI.navigateUp(DrawerLayout, NavController) obsoleto è stato rimosso. aosp/835684
  • La creazione di frammenti è stata spostata in FragmentNavigator, semplificando la delega a un FragmentFactory. b/119054429
  • Il costruttore di NavGraphNavigator non accetta più un Context aosp/835340
  • NavigatorProvider ora è una classe anziché un'interfaccia. La funzionalità di NavigatorProvider restituito da getNavigatorProvider() non è cambiata. aosp/830660
  • NavDestination.navigate() è stato rimosso. Chiamate navigate() al numero Navigator. aosp/830663
  • Rifacimenti significativi di Navigator, che eliminano la necessità di OnNavigatorNavigatedListener e fanno in modo che navigate restituisca il NavDestination a cui è stato eseguito il passaggio.
  • Le istanze Navigator non possono più inviare eventi pop a NavController. Valuta la possibilità di utilizzare un OnBackPressedCallback per intercettare le pressioni del tasto 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 una serie di bug che causavano un errore IllegalArgumentException quando si utilizzavano grafici nidificati b/118713731 b/113611083 b/113346925 b/113305559
  • L'attributo dataPattern delle destinazioni <activity> ora completerà gli argomenti da argomenti non String chiamando toString() b/120161365

Safe Args

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

Versione 1.0.0-alpha07

29 ottobre 2018

Nuove funzionalità

Modifiche che provocano un errore

  • Il modulo navigation-testing-ktx è stato incorporato in navigation-testing artifact e non verrà più pubblicato.
  • L'elemento navigation-testing ora ha una dipendenza dalla libreria standard di 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
  • Non è più possibile associare le azioni alle destinazioni <activity>. aosp/785539

Correzioni di bug

  • I link diretti ora analizzano correttamente i parametri di query. b/110057514
  • Le destinazioni delle attività ora applicano correttamente tutte le animazioni di entrata e di 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

  • Gli argomenti sicuri ora hanno 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 grafo <include>. b/116542123

Versione 1.0.0-alpha06

20 settembre 2018

Nuove funzionalità

Modifiche all'API

  • Modifica non compatibile: 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ù visualizzazioni se utilizzato con le visualizzazioni di singole destinazioni b/111961977
  • Navigator onSaveState() ora viene chiamato una sola volta b/112627079

Safe Args

  • Le classi Indicazioni per le destinazioni di navigazione ora estendono la classe Indicazioni del relativo elemento principale, se esistente b/79871405
  • Le classi Directions e Args ora hanno un'implementazione utile di toString() b/111843389

Versione 1.0.0-alpha05

10 agosto 2018

Correzioni di bug

  • È stato corretto un bug che causava un comportamento errato della pila di ritorno. b/111907708
  • Correzione di un bug in equals() delle classi Generated Args. b/111450897
  • Correzione di un errore di compilazione in Safe Args. b/109409713
  • Correggere una conversione da identificatori di risorse a nomi Java b/111602491
  • Correggere i messaggi di errore relativi alla nullità nel plug-in Safe Args.
  • Aggiungi le annotazioni di nullità mancanti.

Versione 1.0.0-alpha04

19 luglio 2018

Navigation 1.0.0-alpha04 e il plug-in Gradle Safe Args associato contengono una serie di modifiche all'API, ai comportamenti e alle correzioni di bug.

Modifiche all'API / al comportamento

  • NavHostFragment imposterà sempre il frammento corrente come frammento di navigazione principale, assicurandosi che i gestori dei frammenti secondari vengano rimossi prima del gestore 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 cliccabili b/111534438
  • Le classi Args ora confermano che gli attributi NonNull non sono effettivamente null b/111451769
  • Sono state aggiunte annotazioni NonNull aggiuntive alle classi NavDirections e Args generate b/111455455 b/111455456

Correzioni di bug

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

Versione 1.0.0-alpha03

12 luglio 2018

Navigation 1.0.0-alpha03 e il plug-in Gradle Safe Args associato contengono una serie di modifiche all'API, al comportamento e correzioni di bug.

Modifiche all'API / al comportamento

  • È 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 la pila di ritorno è vuota o quando l'ID destinazione specificato non è presente nella pila di ritorno b/110893637
  • FragmentNavigator ora ignora le operazioni di navigazione dopo che FragmentManager ha salvato lo stato, evitando le eccezioni "Impossibile eseguire questa azione dopo onSaveInstanceState" b/110987825

Safe Args

  • Modifica non compatibile: i caratteri non alfanumerici nei nomi di azioni e argomenti verranno sostituiti da lettere maiuscole nei rispettivi nomi dei metodi NavDirections.
    • Ad esempio, DemoController.index diventerà setDemoControllerIndex b/79995048
    • Ad esempio, action_show_settings diventerà actionShowSettings b/79642240
  • Modifica che comporta una interruzione del servizio:ora gli argomenti sono considerati non null per impostazione predefinita. Per consentire valori null per gli argomenti stringa e parcelable, aggiungi app:nullable="true" b/79642307
  • Ora puoi utilizzare app:type="long" con valori predefiniti sotto forma di "123L" b/79563966
  • Gli argomenti Parcelable sono ora supportati, 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 librerie b/80036553
  • Il plug-in Safe Args ora può essere applicato ai progetti di funzionalità b/110011752

Correzioni di bug

  • Sono stati corretti i problemi di navigazione durante i metodi di ciclo di vita dei frammenti b/109916080
  • Sono stati risolti i problemi relativi alla navigazione tra grafici nidificati più volte 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 app:defaultValue venivano passati come stringhe b/110710788
  • aapt2 in bundle con il plug-in Android Gradle 3.2 Beta 01 ora aggiunge regole keep per ogni attributo android:name nei file XML di navigazione b/79874119
  • È stata corretta la perdita di memoria durante la sostituzione del 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 di ciclo di vita di Fragment. b/79632233

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

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

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

  • È stato corretto un IllegalArgumentException quando si torna a un grafico nidificato. b/80453447

  • È stato risolto un problema relativo all'accatastamento dei frammenti quando si utilizza launchSingleTop. b/79407969

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

  • NavigationUI ora evidenzierà l'elemento corretto quando viene utilizzato un grafico nidificato come MenuItem. b/109675998

Modifiche all'API

  • L'attributo clearTask per le azioni e l'API associata in NavOptions è stato ritirato. b/80338878

  • L'attributo launchDocument per le azioni e l'API associata in NavOptions è stato ritirato. b/109806636

Versione 1.0.0-alpha01

8 maggio 2018

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