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
30 ottobre 2024 2.8.3 - - 2.9.0-alpha02

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:

Alla moda

dependencies {
  def nav_version = "2.8.0"

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

}

Kotlin

dependencies {
  val nav_version = "2.8.0"

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

}

Safe Args

Per aggiungere arg. sicuri al tuo progetto, includi i seguenti classpath nel file build.gradle di primo livello:

Alla moda

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

Kotlin

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

Devi inoltre applicare uno dei due plug-in disponibili.

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

Alla moda

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Alla moda

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

Kotlin

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

Devi avere android.useAndroidX=true nel tuo gradle.properties file in base a 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. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne uno nuovo. 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-alpha02

30 ottobre 2024

Viene rilasciato androidx.navigation:navigation-*:2.9.0-alpha02. 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, è possibile RESUMED più destinazioni 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 delle estensioni NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • 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 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.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 lint per i moduli navigation-common, navigation-runtime e navigation-compose per identificare le route sicure per il tipo tramite 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

  • Quando si tenta di eseguire il lint con Lint 16 (AGP 8.7) o versioni successive, viene generato un errore di controllo lint personalizzato obsoleto. (b/371926651)

Versione 2.8.2

2 ottobre 2024

Viene rilasciato androidx.navigation:navigation-*:2.8.2. 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

Viene rilasciato androidx.navigation:navigation-*:2.8.1. 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 reinventata quando si tenta di popBackStack utilizzando API type-safe. (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 facoltative 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 navigare verso la route di una destinazione solo con il sovraccarico della funzione di navigazione che utilizza una route stringa. Questa operazione corregge una vulnerabilità che consentiva il collegamento diretto a una destinazione potenzialmente protetta. (Ie30e6)

Aggiornamento delle dipendenze

  • Navigazione Safe Args ora dipende da Kotlin 1.9.24, piuttosto che da Kotlin 2.X, garantendo che gli sviluppatori non siano costretti a 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 di Kotlin per la 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 compilazione di 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

  • Navigazione Compose 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

Viene rilasciato androidx.navigation:navigation-*:2.8.0-rc01. 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

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

Correzioni di bug

  • È stato corretto l'arresto anomalo di navigazione di singleTop quando gli elementi NavGraphs nidificati condividono lo stesso percorso startDestination. (I17b94, b/294408596)

Versione 2.8.0-beta04

26 giugno 2024

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

Correzioni di bug

  • La navigazione ora supporta la navigazione con stringhe vuote negli argomenti del percorso. (Ic5dbd, b/339481310)
  • Migliora il messaggio di errore per i serializzatori personalizzati dichiarati direttamente nei campi della classe tramite @Serializable(with =...) per chiarire che 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 predittivo con Scrittura navigazione, la destinazione che viene visualizzata ora avrà l'ordine Z corretto, che si anima correttamente sopra la destinazione in arrivo. (I2077b, b/345993681)

Versione 2.8.0-beta03

12 giugno 2024

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

Modifiche alle API

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

Correzioni di bug

  • È stata aggiunta la documentazione su NavType.serializeAsValue e serializeAsValues per evidenziare che gli output finali devono utilizzare la codifica URI. (Ida6bd, b/344943214)
  • È stato risolto l'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é le route sono supportate da ID, sono state interessate anche le destinazioni create con route. 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

Viene rilasciato androidx.navigation:navigation-*:2.8.0-alpha08. 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, leggi il post del blog su Compose Navigazione e sulla sicurezza dei tipi.

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 di primo livello, senza argomento @Composable, il cui nome completo viene utilizzato come attributo android:name su 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

  • Il supporto di Safe Args in Navigation Compose tramite un approccio basato sulla serializzazione di Kotlin è continuato. 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.

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 alle 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 argomenti a startDestination di NavGraph direttamente nella route startDestination senza fare affidamento su defaultValue. Questo vale anche per NavGraph startDestinations nidificati. (I0e0b5, b/109505019, b/188693139)

Modifiche alle API

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

Correzioni di bug

  • I parametri di query nei link diretti ora ammettono valori sotto forma di parentesi graffe intorno al nome dell'argomento (ad es. {argName}) come valori validi per NavTypes basato su stringhe. 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

Viene rilasciato androidx.navigation:navigation-*:2.8.0-alpha04. 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 nella navigazione di 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 di navigazione a causa del quale NavGraph ViewModel diventava DESTROYED troppo presto perché il valore 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

Viene rilasciato androidx.navigation:navigation-*:2.8.0-alpha01. 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)
  • È stato risolto un problema per cui gli argomenti non stringa non venivano visualizzati correttamente quando si utilizzavano gli helper NavigationUI per compilare il titolo delle barre dell'app. (#636, b/316676794)

Aggiornamento delle dipendenze

  • Scrittura navigazione ora dipende dalla funzionalità Scrivi 1.7.0-alpha01 che risolve un problema che potrebbe causare un'animazione in scala imprevista. (b/297258205)

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

Viene rilasciato androidx.navigation:navigation-*:2.7.5. La versione 2.7.5 contiene questi commit.

Miglioramenti del rendimento

  • Sono state notevolmente migliorate le prestazioni (sia in termini di tempo che di numero di allocazioni) del confronto tra due grafici. Ciò significa che le chiamate come setGraph, che confrontano internamente il nuovo grafico con quello esistente, sono molto più veloci e comportano un minor numero di frame ignorati. 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 viene visualizzata una voce dopo una modifica alla configurazione, il valore ViewModel della voce viene cancellato correttamente se saveState è false. (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 Frammenti ora dipende da Fragment 1.6.2, che risolve il problema per cui le istanze ViewModel di frammenti nidificati non vengono cancellate durante la chiamata a 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

Viene rilasciato androidx.navigation:navigation-*:2.7.3. 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 dal Ciclo di vita 2.6.2, dalla correzione di un'interazione tra rememberSaveable e NavHost di navigazione di navigazione che causerebbe il ripristino dello stato rememberSaveable delle destinazioni e di qualsiasi istanza SavedStateHandle di proprietà di ViewModel dopo la morte 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 simultanea di più finestre di dialogo in Scrittura in Navigazione. La chiusura della finestra di dialogo più in alto causava il blocco di quest'ultima nello stato Ciclo di vita STARTED anziché essere correttamente spostata in 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

  • È stato risolto un problema della navigazione con Compose a causa del quale, quando si utilizzava un Scaffold era possibile ricevere un errore durante il tentativo di accesso a un Lifecycle.State.DESTROYED ViewModel. (I1dc11, b/268422136)

Versione 2.7.0

Versione 2.7.0

9 agosto 2023

androidx.navigation:navigation-*:2.7.0 viene 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 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

  • NavHost in Navigation Compose ora intercetta correttamente le chiamate di sistema precedenti anche dopo l'interruzione e la ripresa dell'attività. (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

  • È stato risolto un problema per cui le funzioni lambda EnterTransition e ExitTransition create nell'ambito di NavHost potevano 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

  • Ora NavHost in Compose di navigazione intercetta correttamente le chiamate di sistema successive 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 dell'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

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

Modifiche importanti a Navigazione dalla versione 2.5.0

  • I arguments di NavBackStackEntry e i arguments passati a OnDestinationChangedListener sono ora solo una copia degli argomenti immutabili creati quando hai raggiunto la destinazione. Ciò significa che le modifiche apportate a questi pacchetti non verranno applicate agli accessi successivi alle istanze 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.
  • Le sottoclassi personalizzate di NavType ora possono eseguire l'override di serializeAsValue per serializzare un valore in una stringa, consentendo sia la serializzazione sia la deserializzazione (tramite parseValue) di essere completamente incapsulate nella classe NavType. Ora StringType esegue l'override di questo metodo per chiamare Uri.encode sul criterio 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.
  • Ora NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) 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 Fragments dalla versione 2.5.0

  • NavHostFragment non intercetta più il pulsante Indietro del sistema. In questo modo l'elemento FragmentManager sottostante può gestire il 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 creazione di 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 creazione di NavBackStackEntries. Ciò significa che NavBackStackEntry Lifecycle ora attenderà che DialogFragment Lifecycle passi a DESTROYED prima di passare a DESTROYED.
  • NavHostFragment ora ti consente di recuperare il NavController non appena il NavHostFragment è collegato al FragmentManager, anziché solo dopo onCreate().
  • Il supporto della navigazione per i moduli delle funzionalità dinamiche ora dipende dalla libreria granulare di Play Feature Delivery.
  • 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+.

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 personalizzata di toString. (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 c'è un navigate che aggiunge una voce e un popBackStack che la rimuove nello stesso frame, la voce superiore risultante nello stack posteriore ora farà di nuovo regolarmente tornare alla classe 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

  • Controllo corretto della presenza di route non valide in modo che, se un NavDestination contiene NavArgument con valori non null, la route di questa destinazione deve contenere segnaposto per argomenti con lo stesso nome di 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. Questo corregge un arresto anomalo durante l'utilizzo di onLaunchSingleTop senza salvare lo stato in Scrittura di navigazione. Inoltre, è stato corretto un errore relativo alla navigazione verso le destinazioni associate alle build del grafico principale e al back stack errato. (I5bc58, b/275258161, b/275407804)

Versione 2.6.0-alpha08

22 marzo 2023

Viene rilasciato androidx.navigation:navigation-*:2.6.0-alpha08. 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 NullPointerException quando viene visualizzato un grafico nidificato che include un argomento non null. (6b3581, b/249988437)
  • Quando utilizzi il tasto Indietro del sistema dopo aver eseguito la navigazione con popUpTo, lo stato di NavController verrà visualizzato nella voce corretta. (I3a8ec, b/270447657)
  • FragmentNavigator ora mostrerà correttamente le voci quando lo stack precedente viene creato tramite system back o popBackStack() e se la transazione utilizza o meno 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 API getBackStackEntry, popBackStack e clearBackStack che accettano route ora assumono pattern di route con argomenti e parametri di query null (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 Indietro di sistema tra le schede. (I634f6, b/270447657)
  • È stata corretta la regressione nella versione 2.6.0-alpha06 che causava il mancato spostamento di NavBackStackEntry nello stato RIPRENDITO quando si utilizzavano 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 Fragments e la navigazione con BottomNavigation, se tenti di ripristinare uno stack posteriore 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à

  • Ora NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) 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 l'Lifecycle NavBackStackEntry attenderà il completamento degli effetti speciali del frammento in entrata e in uscita prima di spostare l'ultimo Lifecycle.State. (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 NavBackStackEntries ai 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 della 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)
  • Navigazione SafeArgs non causerà più un errore di compilazione quando utilizzi 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à

  • Le sottoclassi personalizzate di NavType ora possono eseguire l'override di serializeAsValue per serializzare un valore in una stringa, consentendo sia la serializzazione sia 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

  • I link diretti per la navigazione ora vengono analizzati in modo lento invece che durante l'inizializzazione del grafico, il che potrebbe migliorare le prestazioni 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à dinamici ora dipende dalla libreria granulare Play Feature Delivery. (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 di 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

Viene rilasciato androidx.navigation:navigation-*:2.6.0-alpha01. 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 argomenti ReferenceType mediante l'analisi dei 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 si rifletteranno nei successivi accessi all'istanza arguments o ad altre istanze di 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 con doppio nidificazione 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 nelle classi generate quando utilizzi tipi di argomenti personalizzati salvati in un Bundle. (Id86ed, b/237725966)

Aggiornamenti delle dipendenze

Versione 2.5.0

29 giugno 2022

Viene rilasciato androidx.navigation:navigation-*:2.5.0. 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'attributo build.gradle dello spazio dei nomi da utilizzare al posto di applicationId.

Altre modifiche

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

Versione 2.5.0-rc02

15 giugno 2022

androidx.navigation:navigation-*:2.5.0-rc02 viene 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ù un arresto anomalo se utilizzi applicationIdSuffix e uno spazio dei nomi senza applicationId o quando applicationId e 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 componibili in NavHost e DialogHost vengono ora eliminati nell'ordine previsto, ovvero gli ambiti componibili interni vengono eliminati prima degli componibili 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 lint UnrememberedGetBackStackEntryDetector è stata aggiornata per garantire che la chiamata remember relativa alla chiamata a getBackStackEntry() passi anche in un oggetto NavBackStackEntry come chiave.(Ib7081, b/227382831)

Versione 2.5.0-beta01

20 aprile 2022

androidx.navigation:navigation-*:2.5.0-beta01 viene 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

Viene rilasciato androidx.navigation:navigation-*:2.5.0-alpha04. 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, ora l'elemento NavHost interno dovrebbe animarsi correttamente. (I4ba2b, b/225394514)
  • Il valore visibleEntries StateFlow fornito da NavController si basa ora 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 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 i link diretti attraverso più NavGraph nidificati, ora lo stack posteriore includono correttamente le destinazioni di partenza intermedie. (I504c0, b/214383060)

Versione 2.5.0-alpha01

26 gennaio 2022

androidx.navigation:navigation-*:2.5.0-alpha01 viene 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 decodificano più inutilmente gli argomenti due volte, il che significa che ora vengono passati gli argomenti corretti 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)
  • Con backporting da Navigazione 2.5.0-alpha01: è stato risolto un problema per cui l'accesso a un ViewModel creato tramite by navGraphViewModels() da un elemento onCreate() di un frammento non riusciva con un IllegalStateException. (I8a14d)
  • Backporting da Navigazione 2.5.0-alpha01: i NavDeepLink non decodificano più inutilmente gli argomenti due volte, il che significa che ora gli argomenti decodificati correttamente vengono 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 Navigazione 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'artefatto navigation-fragment ora contiene un'implementazione predefinita di un layout a due riquadri tramite il nuovo AbstractListDetailFragment. Questo frammento utilizza un SlidingPaneLayout per gestire un riquadro elenco (fornito dalla tua sottoclasse) e un riquadro dei dettagli, che utilizza un NavHostFragment come implementazione, come mostrato nella nostra implementazione di esempio.
  • Il metodo currentBackStackEntryAsFlow() su NavController fornisce un Flow che emette ogni volta che il valore NavBackStackEntry corrente cambia. 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 i grafici di navigazione.
  • La navigazione ora fornisce API findStartDestination() e getHierarchy() che possono essere utilizzate per implementare l'UI di navigazione personalizzata. 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 è possibile utilizzare questi metodi 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 identificava in modo univoco dalle destinazioni gemelle e consentiva di navigate() raggiungere 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 tramite il relativo 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 contenuti specifici, 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 deprecata a favore di getStartDestinationId().

A differenza della navigazione per ID, la navigazione per percorso segue le stesse regole dei link diretti impliciti in quanto puoi 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'artefatto 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 componibile NavHost che ti consente di creare il tuo grafico di navigazione tramite una connessione DSL Kotlin, utilizzando destinazioni composable e dialog, oltre al supporto per navigatori facoltativi come quelli di Accompanist Navigation Material.
  • 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.
  • Determinazione dell'ambito 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 di NavController ai composabili esterni a 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 state ampliate per supportare il salvataggio e il ripristino del back stack.

Nell'ambito di questa modifica, i metodi NavigationUI di onNavDestinationSelected(), BottomNavigationView.setupWithNavController() e NavigationView.setupWithNavController() ora salvano e ripristinano automaticamente lo stato delle destinazioni popolate, consentendo il supporto di più stack arretrati 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 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 dal ciclo di vita 2.3.1 e ora contrassegna setGraph(), popBackStack(), navigateUp() e navigate(), i metodi che aggiornano NavBackStackEntry Lifecycle, come @MainThread, allineando la navigazione con l'applicazione del thread principale introdotta nel ciclo di vita 2.3.0.
  • I link diretti ora verificano che tutti gli argomenti richiesti (senza valori predefiniti) siano presenti in Uri.
  • NavDeepLink Gli argomenti analizzati ora considerano i simboli di cancelletto nello stesso modo dei punti interrogativi come separatore 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 il problema in Navigazione 2.5.0-alpha01: l'accesso a una ViewModel creata tramite by navGraphViewModels() da un elemento onCreate() di Framment non riuscirà 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

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

Modifiche al comportamento

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

Correzioni di bug

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

Correzioni di bug di Scrittura in navigazione

  • È stato risolto il potenziale arresto anomalo causato dal passaggio rapido tra la destinazione di partenza e un'altra destinazione utilizzando le voci del menu di navigazione nella parte inferiore. (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 quando tenta di ripristinare gli array assegnabili personalizzati dopo la morte 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 alle API

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

Modifiche al comportamento

  • I pattern dei link diretti vengono ora compilati in modo lento 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() a quel 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 alle 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 quando selezioni nuovamente gli elementi del menu inferiore. (I1b351, b/196997433)
  • È stato risolto un problema con AbstractListDetailFragment che causava la gestione o l'ignoramento degli attributi layout_width e layout_weight nel riquadro dell'elenco restituiti 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. Ciò non influisce sui casi in cui utilizzi popUpTo o popBackStack() per chiudere la finestra di dialogo. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener ora ha messaggi di errore più chiari per onDestinationChanged(). (Ie742d)

Versione 2.4.0-alpha10

29 settembre 2021

androidx.navigation:navigation-*:2.4.0-alpha10 viene 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

Viene rilasciato androidx.navigation:navigation-*:2.4.0-alpha09. 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 grafico di navigazione nidificato, che verranno aggiunti automaticamente al grafico risultante. (I8a470, b/182545357)

Modifiche all'API

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

Cambiamenti del 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, NavGraphs sarà DESTROYED solo quando tutti i loro figli avranno DESTROYED. (I86552, b/198741720)
  • Gli argomenti NavDeepLink facoltativi non richiedono più un valore predefinito. (Ia14ef, b/198689811)
  • La chiamata di setGraph() con un nuovo grafico ora cancellerà anche tutti gli eventuali back stack salvati, oltre al comportamento precedente di aprire lo stack posteriore. (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

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

Nuove funzionalità

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

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 composable(), insieme a remember(), non causerà più un'eccezione perché nessuna destinazione si trova nello stack posteriore. (I75138, b/194313238)
  • Navigazione Compose ora si ricompone correttamente quando si modificano gli argomenti dello stack di nuovo e si utilizzano 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

  • Navigazione Compose ora salva correttamente lo stato dopo le modifiche alla configurazione e quando si cambiano i grafici, utilizzando la funzionalità multiback stack. (If5a3d, b/195141957)
  • Se selezioni di nuovo la stessa scheda quando utilizzi la modalità di scrittura della navigazione con più stack precedenti, non verrà più visualizzata una schermata vuota. (I860dc, b/194925622)
  • NavHost ora osserva le modifiche in Lifecycle.State di NavBackStackEntry, il che significa che l'utilizzo di un NavHost in un frammento ora verrà ricomposto correttamente quando cambia il ciclo di vita anziché visualizzare una schermata vuota. (I4eb85, b/195864489)
  • Risolto un problema per cui la chiusura di un DialogFragment non aggiornava correttamente lo stato di NavController dopo aver ricreato l'attività (ad esempio dopo una modifica alla 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

Viene rilasciato androidx.navigation:navigation-*:2.4.0-alpha06. La versione 2.4.0-alpha06 contiene questi commit.

Modifiche all'API

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

Modifiche al comportamento

  • Quando navighi con le animazioni (ad esempio Crossfade), il Lifecycle della nuova destinazione 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.

Cambiamenti del comportamento

  • NavHost di Composizione navigazione ora utilizza sempre le transizioni tra le destinazioni quando navighi 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 durante la chiamata di popBackStack() dall'interno di un LifecycleObserver associato a un NavBackStackEntry causato da aggiornamenti rientranti allo stato del 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, pertanto due oggetti con gli stessi valori verranno considerati uguali. (I166eb, b/175392262)

Versione 2.4.0-alpha04

1° luglio 2021

androidx.navigation:navigation-*:2.4.0-alpha04 viene 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)
  • Le istanze Navigator personalizzate ora possono utilizzare le API pushWithTransaction e popWithTransition su NavigatorState per eseguire il push o pop di una destinazione in modo asincrono. Tieni presente che queste API non sono ancora utilizzate da nessuno dei navigatori inclusi. (Ic4d7c, b/172112072)

Modifiche al comportamento

  • NavDeepLinkBuilder ora aggiunge PendingIntent.FLAG_IMMUTABLE a PendingIntent restituito da createPendingIntent(), garantendo che questa API funzioni come previsto quando 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 genererà più errori durante la creazione della tua app con Kotlin versioni precedenti al giorno 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 corretta una regressione introdotta in Navigazione 2.4.0-alpha01 per cui setupActionBarWithNavController() non rimuoveva correttamente l'icona Su quando ti trovi in una destinazione di primo livello. (I5d443, b/189868637)
  • È stato risolto il problema di IllegalStateException durante la chiamata a popBackStack() dopo aver visualizzato in precedenza il grafico principale di 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à dinamiche 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 alla versione 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 Attività, Fragment e Dialogo, 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 si trova 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 è possibile utilizzare questi metodi 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 deprecati 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 da con un onDestinationChanged callback. (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

Viene rilasciato androidx.navigation:navigation-*:2.4.0-alpha01. 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

Il NavController è responsabile della gestione del back stack delle destinazioni, dell'aggiunta di destinazioni al back stack quando navigate() e della rimozione quando chiami popBackStack() o attivi il pulsante Indietro del sistema. La classe NavOptions esistente e l'integrazione nelle voci <action> 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” />
    
  • Nella navOptions Kotlin DSL, puoi aggiungere la proprietà booleana restoreState e la proprietà booleana saveState nello strumento di creazione popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Nella creazione manuale di un oggetto NavOptions tramite NavOptions.Builder, puoi utilizzare setRestoreState() e il nuovo sovraccarico per setPopUpTo() che richiede 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 ulteriore parametro saveState.

In tutti i casi, NavController salverà e ripristinerà lo stato di ogni NavBackStackEntry, incluse eventuali istanze ViewModel basate sulla destinazione di navigazione. Le API Navigator sono state aggiornate in modo da 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. Ciò fornisce un'alternativa all'utilizzo di ID interi durante la creazione del grafico tramite Navigatore Kotlin DSL. (b/172823546)

Tutte le API che utilizzavano solo un ID ora hanno un sovraccarico che richiede una route 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 da 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)
  • Introdotta una nuova estensione NavBackStackEntry#provideToCompositionLocals che fornisce il NavBackStackEntry ai locali composizioni pertinenti. (#175, b/187229439)

Arg sicuri

  • 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

  • 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. (N. 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. (N. 175, b/187229439)
  • Grazie jossiwolf per aver migliorato il comportamento di NavigatorProvider#addNavigator al fine di garantire che la chiamata ripetuta con la stessa istanza non causi problemi. (#176, b/187443146)

Versione 1.0.0-alpha10

7 aprile 2021

Viene rilasciato androidx.navigation:navigation-compose:1.0.0-alpha10. 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 ViewModelStoreOwner con valori nulli per determinare meglio se è disponibile un ViewModelStoreOwner nella composizione corrente. Le API che richiedono un ViewModelStoreOwner, come viewModel() e NavHost, generano comunque un'eccezione se non viene 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

Viene rilasciato androidx.navigation:navigation-compose:1.0.0-alpha08. 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

Viene rilasciato androidx.navigation:navigation-compose:1.0.0-alpha06. 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)
  • Passare 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.
  • Determinazione dell'ambito del ciclo di vita, ViewModel e stato memorizzato a livello di destinazione.
  • Integrazione automatica con il pulsante Indietro del sistema.
  • Supporto per il passaggio di argomenti, l'associazione di link diretti alle destinazioni e il ritorno di un risultato alle destinazioni precedenti.
  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire lo stato di sollevamento e di collegare NavController a componibili esterni a 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

  • Il plug-in Navigazione sicura Args Gradle ora dipende dal plug-in Kotlin Gradle 1.4.31. (aosp/1661058, b/181156413)

Contributo esterno

  • Grazie bentrengrove per la richiesta di pull che non fa distinzione tra maiuscole e minuscole per l'analisi dei domini dei link diretti. (#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. (N. 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

  • Risolvere i problemi di avanzamento dell'installazione bloccati 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 pull request che consente a defaultValue per un argomento con app:argType=”float” di supportare ora i valori predefiniti interi. (N. 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 apri 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)
  • Risolto un problema per cui navigation-dynamic-features-fragment comportava l'accesso più volte alla destinazione appena installata. (aosp/1486056, b/169636207)
  • Risolto un problema per cui gli argomenti predefiniti non venivano inviati alle istanze OnDestinationChangedListener quando si utilizzava launchSingleTop. (I2c5cb)
  • È stato risolto un problema per cui la navigazione 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)
  • Navigazione SafeArgs ora utilizza KotlinPoet versione 1.7.2 che aggiunge il supporto per la modalità API esplicita di Kotlin. (I918b5)
  • NavHostFragment.findNavController(Fragment) ora controlla anche la 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

Viene rilasciato androidx.navigation:navigation-*:2.3.1. 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'eccezione "Nessuna destinazione con ID", che dovrebbe migliorare l'esperienza di debug dello sviluppatore. (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, assicurando 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

Viene rilasciato androidx.navigation:navigation-*:2.3.0. 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'artefatto navigation-testing fornisce un TestNavHostController che consente di impostare la destinazione corrente e verificare lo stack posteriore 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 dall'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, consulta la sezione Eseguire la navigazione utilizzando NavDeepLinkRequest.

Problemi noti

  • Il supporto per le azioni dei link diretti e i tipi MIME non è ancora disponibile nell'unione di file manifest. 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 elemento <intent-filter> appropriato al file manifest.

Versione 2.3.0-rc01

10 giugno 2020

Viene rilasciato androidx.navigation:navigation-*:2.3.0-rc01. 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 ampliati per supportare app:action e app:mimeType, oltre ai app:uri disponibili in precedenza. 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

  • Ha notevolmente ampliato il supporto DSL di Kotlin per le destinazioni della Navigazione dinamica. (b/148969800)

Correzioni di bug

  • È stato risolto un problema per cui gli intent dei link diretti venivano ignorati quando si utilizzava una destinazione di inizio 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

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

Aggiornamenti delle dipendenze

Versione 2.3.0-alpha04

18 marzo 2020

Viene rilasciato androidx.navigation:navigation-*:2.3.0-alpha04. 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 dal core 1.2.0 e ora dipende dal core 1.1.0 per evitare di costringere gli sviluppatori a passare a una dipendenza più recente quando Navigazione non dipende da nuove API nel 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 alle 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 saperne di più, consulta la sezione Navigare con i moduli delle funzionalità. (b/132170186)

Correzioni di bug

  • In Navigazione 2.2.1: 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)
  • 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)
  • Da Navigazione 2.2.1: il modulo navigation-common-ktx ora ha un nome univoco del pacchetto manifest anziché condividere lo stesso nome del 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. In precedenza era stata rilasciata in Navigazione 2.3.0-alpha04. (b/148679860)
  • Le regole di ProGuard navigation-common-ktx ora mantengono correttamente solo le classi NavArgs in uso anziché tutte le istanze NavArgs. In precedenza era stata rilasciata in Navigazione 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 richiesto. (b/147610424)
  • Il modulo navigation-common-ktx ora ha un nome univoco del pacchetto manifest anziché condividere lo stesso nome del pacchetto manifest di navigation-runtime-ktx. (aosp/1141947)

Aggiornamenti delle dipendenze

Versione 2.2.0

Versione 2.2.0

22 gennaio 2020

androidx.navigation:navigation-*:2.2.0 viene 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 del ciclo di vita ViewModel SavedState: SavedStateViewModelFactory è ora il valore predefinito utilizzato 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 con valori null sono ora facoltativi quando si abbinano i link diretti.
  • Supporto dell'animazione migliorato: NavHostFragment ora utilizza FragmentContainerView di Fragment 1.2.0 per risolvere i problemi di ordinamento in Z delle animazioni e l'invio di riquadri di finestre ai frammenti.

Versione 2.2.0-rc04

18 dicembre 2019

Viene rilasciato androidx.navigation:navigation-*:2.2.0-rc04. 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

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

Correzioni di bug

  • È stato risolto un problema con l'analisi dei link diretti durante l'utilizzo dei parametri di query e di 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 Ciclo di vita 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Attività 1.1.0-rc03 e Frammento 1.2.0-rc03 ove appropriato.

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 le relative sottoclassi ora eseguono l'override di 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 il problema per cui gli argomenti nel percorso di un link diretto venivano ignorati se venivano 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 utilizzi un elemento Toolbar, NavigationUI non anima più la modifica del testo durante lo spostamento tra due destinazioni di primo livello. (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

  • Risolto un problema per cui l'aggiunta di un NavHostFragment a ViewPager2 non riusciva 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 <dialog> destinazioni che mostreranno una DialogFragment quando navigate. NavHostFragment supporta le destinazioni delle finestre 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

Viene rilasciato androidx.navigation:*:2.1.0-beta01. 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 tempo durante l'utilizzo di più NavHostFragments con lo stesso contenitore con findNavController(). (b/136021571)

Versione 2.1.0-alpha06

2 luglio 2019

Viene rilasciato androidx.navigation:*:2.1.0-alpha06. 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 Host 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 indicatori, FloatingWindow, che ora viene implementata da tutte le destinazioni <dialog>. I metodi di navigazione dell'interfaccia utente 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 viene gestito 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'host in NavController sono state rinominate e spostate in una nuova sottoclasse NavController, NavHostController. (aosp/966091)
  • Il metodo setHostOnBackPressedDispatcherOwner() NavController è stato sostituito con il metodo setOnBackPressedDispatcher() di NavHostController e ora è necessario 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

Viene rilasciato androidx.navigation:*:2.1.0-alpha04. 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 in 2.1.0-alpha03 di navigazione. 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 alle 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

  • Ora gli argomenti predefiniti 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 la limitazione del 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 versione 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

  • Navigazione non invia più un Bundle nullo quando sono presenti argomenti allegati a una destinazione, risolvendo un problema quando si utilizza 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 utilizzare le release 2.X di Navigazione devi aver eseguito la migrazione ad AndroidX del progetto. 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 grafico 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

  • Risolto un problema durante l'utilizzo di Frammenti e delle operazioni di navigazione di singleTop b/124294805

Versione 1.0.0-beta02

12 febbraio 2019

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

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
  • Safe Args ha generato le classi NavArgs non si arrestano più in modo anomalo durante il ripristino di un argomento Parcelable[] dallo stato dell'istanza salvata. 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 versione beta di Navigazione. In futuro, l'API di navigazione dovrebbe rimanere stabile fino alla versione successiva, a meno che non ci sia 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 esecuzione 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é di una sola 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 da NavigationUI non veniva visualizzata durante l'utilizzo di ProGuard con l'offuscamento. 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 all'API che provocano errori; consulta la sezione Modifiche che provocano un errore 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-in androidx.navigation.safeargs.kotlin. Il codice Kotlin è stato creato specificamente per i moduli solo Kotlin, utilizzando argomenti predefiniti e classi immutabili rispetto al pattern del builder ancora disponibile tramite il plug-in androidx.navigation.safeargs precedente. b/110263087

Modifiche al comportamento

  • I link diretti corrispondenti ora vengono 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 costruttore pubblico. Dovrebbero essere generate solo tramite i metodi statici nelle classi Directions generate. b/122963206
  • Il valore Bundle restituito da getArguments() di NavDirections è ora contrassegnato come @NonNull anziché come @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
  • Ora le classi Directions generate da Safe Args gestiscono correttamente le azioni globali che hanno lo stesso ID di un'azione su una destinazione. b/122962504
  • Le classi NavDirections generate da Safe Args ora hanno correttamente valori hashCode() uguali quando equals() restituisce true. b/123043662
  • FragmentNavigator ora genera un messaggio di errore migliore se tenti di eseguire FragmentTransactions personalizzato sul FragmentManager di NavHostFragment. Dovresti usare sempre 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 si sia dimostrata utile per i test interni di NavController, consigliamo vivamente strategie di test alternative, ad esempio la simulazione dell'istanza NavController, al fine di 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à

  • Gli elementi MenuItem con menuCategory="secondary" non torneranno più nello stack indietro 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, fornendo invece 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
  • Ora la navigazione esporta correttamente le proprie 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 per semplificare la delega della creazione di frammenti in 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
  • Refactoring significativo di Navigator, con conseguente rimozione della necessità di OnNavigatorNavigatedListener e navigate di restituire l'elemento NavDestination a cui era stato indirizzato.
  • Navigator istanze 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

Arg sicuri

  • Safe Args supporta gli oggetti Serializable, 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 le annotazioni @Override ove appropriato 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 uscita. b/117145284
  • È stato corretto un arresto anomalo che si verifica dopo le modifiche alla configurazione quando si utilizzano Navigator 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 fa più trapelare più visualizzazioni se utilizzato con visualizzazioni da singole destinazioni b/111961977
  • Navigator onSaveState() ora viene chiamato una sola volta b/112627079

Arg sicuri

  • 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'utile implementazione 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
  • Correggi un errore di build in Safe Args. b/109409713
  • Correggere una conversione dagli identificatori di risorse ai nomi Java b/111602491
  • Risolvere i problemi segnalati dai messaggi di errore relativi ai valori null nel plug-in Safe Args.
  • Aggiungi le annotazioni mancanti relative alla nullabilità.

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, al comportamento e correzioni di bug.

Modifiche al comportamento / API

  • 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 al comportamento / API

  • È stato aggiunto un metodo NavigationUI.setupWithNavController per la barra degli strumenti b/109868820
  • È stato aggiunto un metodo NavigationUI.setupWithNavController per CollapsingToolbarLayout b/110887183
  • popBackStack() ora restituisce false quando 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 interrompe la modifica: gli argomenti ora sono considerati non nulli 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 di conservazione 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 quando si chiama navigate dai metodi di ciclo di vita del frammento. b/79632233

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

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

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

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

  • È stato risolto un problema relativo all'accavallamento 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

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