Navigazione

La navigazione è un framework per navigare tra "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.
Aggiornamento più recente Release stabile Candidato per l'uscita Versione beta Release alpha
26 giugno 2024 2.7.7 - 2.8.0-beta04 -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza a Navigazione, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

trendy

dependencies {
  def nav_version = "2.7.7"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

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

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

Kotlin

dependencies {
  val nav_version = "2.7.7"

  // Java language implementation
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

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

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

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

Safe Args

To add Safe Args to your project, include the following classpath in your top level build.gradle file:

Groovy

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

Kotlin

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

You must also apply one of two available plugins.

To generate Java language code suitable for Java or mixed Java and Kotlin modules, add this line to your app or module's build.gradle file:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Alternatively, to generate Kotlin code suitable for Kotlin-only modules add:

Groovy

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

Kotlin

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

You must have android.useAndroidX=true in your gradle.properties file as per Migrating to AndroidX.

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

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

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se scopri 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 stella.

Crea un nuovo numero

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 2.8

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)
  • Ora l'API test SavedStateHandleFactory può essere utilizzata in test non Android, ma richiederà Robolectric per supportare l'analisi degli argomenti con i bundle. (I76cdc, b/340966212)
  • È stato risolto l'arresto anomalo del ripristino dello stato durante la ripresa dell'app dopo la morte del processo con l'utilizzo della Navigazione sicura per i tipi in Compose. (Ia8f38, b/341801005)
  • Risolto un problema di Navigazione in Compose per cui, dopo aver annullato il gesto Indietro predittivo, il NavBackStackEntry a cui l'utente tornava non torna più allo stato del ciclo di vita di RESUMED. In questo modo, inoltre, la destinazione di ritorno si anima di nuovo correttamente anziché agganciarsi in posizione dopo uno scorrimento. (I97a0c, b/346608857)
  • Quando si utilizza predittivo con Scrittura navigazione, la destinazione 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 corretto 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 è presente un valore predefinito. (I84158, Id630f, b/342672856)

Versione 2.8.0-beta02

29 maggio 2024

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

Correzioni di bug

  • È stato corretto l'arresto anomalo di ClassCastException durante l'utilizzo di NavBackStackEntry.toRoute con un elemento NavType personalizzato con valori null. (I1c29b, b/342239473)
  • Sono stati risolti i problemi di ripristino dello stato dello stack posteriore della navigazione causati dal tentativo di ripristinare una voce dello stack posteriore che non è raggiungibile tramite ID dalla destinazione corrente. Poiché le route sono supportate da ID, sono state interessate anche le destinazioni create con route. Inoltre, è stato corretto un arresto anomalo causato dalla chiamata a clearBackStack() con lo stesso problema di fondo. (I423c3, b/339908057)

Versione 2.8.0-beta01

14 maggio 2024

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

Modifiche alle API

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

Correzioni di bug

  • Sono stati aggiunti i documenti relativi ai parametri mancanti per le funzioni DSL di Navigation Kotlin. (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.

Arg sicuri in Compose Navigazione

  • Il lavoro per supportare la sicurezza del tipo di tempo di compilazione per Navigator Compose e per gli utenti del Navigatore Kotlin DSL basato sulla serializzazione Kotlin è terminato e le API precedentemente sperimentali sono ora stabili. (<br-10-12<br-10-12<br-1-0<br-1-0<br-10-1<br-class="ph-1-1">1I0ph-1-0I0.

Questa funzionalità utilizza la serie di serie di Kotlin per consentirti di definire le destinazioni nel grafico di navigazione tramite classi di dati e oggetti sicuri di 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, leggi il post del blog su Compose Navigazione e sulla sicurezza dei tipi.

Nuove funzionalità

  • L'artefatto navigation-fragment-compose ora fornisce una composizione LocalFragment locale a metodi componibili all'interno di un ComposableFragment. (If35e5).
  • Ora in NavType è integrato il supporto per elenchi di tipo Int, String, Boolean, Float e Long. (I4b6dd, Ia914c, b/188693139)

Versione 2.8.0-alpha07

17 aprile 2024

Viene rilasciato androidx.navigation:navigation-*:2.8.0-alpha07. 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 ti consente di aggiungere destinazioni composable ai tuoi file XML di navigazione. Ogni destinazione composable deve essere espressa come metodo @Composable di primo livello, senza argomento, il cui nome completo viene utilizzato come attributo android:name su ogni destinazione. Quando si accede a una di queste destinazioni, viene creato un frammento contenitore per visualizzare il contenuto componibile. (I0ef2e, b/265480755)

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

Modifiche alle API

  • Il supporto di Safe Args in Navigation Compose tramite un approccio basato sulla serializzazione di Kotlin è continuato. Queste API non sono completate e sono contrassegnate con l'annotazione ExperimentalSafeArgsApi. Questa annotazione verrà rimossa al termine dell'intera piattaforma dell'API in una release futura. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73}1913b75151813}

Versione 2.8.0-alpha06

3 aprile 2024

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

Modifiche alle API

  • È iniziato il supporto di Safe Args in Navigation Compose tramite un approccio basato sulla serializzazione di Kotlin. Queste API non sono completate e sono contrassegnate con l'annotazione ExperimentalSafeArgsApi. Questa annotazione verrà rimossa al termine dell'intera piattaforma dell'API in una release futura. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e

Correzioni di bug

  • NavHost ora utilizza Alignment.TopStart come argomento contentAllineament predefinito. Questo lo allinea con l'impostazione predefinita per AnimatedContent e corregge alcune istanze di scalabilità imprevista dalla transizione dal centro. (I09e72, b/330111602)
  • Quando fai scorrere il gesto Indietro predittivo durante l'utilizzo di Scrittura di navigazione, ora NavHost completerà correttamente la transizione personalizzata anziché terminarla immediatamente. (I99017, b/327292110)

Versione 2.8.0-alpha05

20 marzo 2024

Viene rilasciato androidx.navigation:navigation-*:2.8.0-alpha05. 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 gli elementi NavGraph startDestinations nidificati. (I0e0b5, b/109505019, b/188693139)

Modifiche alle API

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

Correzioni di bug

  • I parametri di query nei link diretti ora consentono i valori sotto forma di parentesi graffe attorno al nome dell'argomento (ad es. {argName}) come valori validi per NavTypes basato su stringa. In questo modo è stato risolto il problema per cui un valore di questo tipo veniva considerato non valido (o assenza di un valore) per tutti i tipi. (I18302, b/327274038)
  • Le funzioni di NavController che supportano route come navigate o popBackStack ora possono corrispondere correttamente alle route riempite con 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 il SizeTranform per le transizioni in Navigation Compose definendole come parte dell'inizializzazione delle funzioni composable e/o navigation. (I91062, b/296912651)

Correzioni di bug

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

Versione 2.8.0-alpha03

21 febbraio 2024

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

Modifiche alle API

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

Correzioni di bug

  • È stato risolto un problema della 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

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

Nuove funzionalità

  • Navigazione Compose ora fornisce il supporto per predittivo in-app tramite le nuove API SeekableTransitionState da write-animation. In questo modo puoi utilizzare il gesto Indietro per visualizzare la destinazione precedente con la transizione personalizzata prima di decidere se eseguire la transazione tramite il gesto completato o annullarla. (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

  • È stata corretta la fuga di dati di BackStackState per 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 SimonMarquis per aver risolto il problema di visualizzazione degli argomenti non-String quando utilizzi gli helper NavigationUI per compilare il titolo delle barre dell'app.

Versione 2.7.7

Versione 2.7.7

7 febbraio 2024

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

Correzioni di bug

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

Contributo esterno

  • Grazie SimonMarquis per aver risolto il problema di visualizzazione degli argomenti non-String quando utilizzi gli helper NavigationUI per compilare il titolo delle barre dell'app.

Versione 2.7.6

Versione 2.7.6

13 dicembre 2023

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

Correzioni di bug

  • La funzione NavGraph equals() ora considera correttamente i nodi dell'altro grafico anziché solo quello che chiama. In questo modo i grafici con nodi con ID diversi non saranno 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

  • Ha migliorato enormemente il rendimento (sia in termini di tempo che di numero di allocazioni) dal 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 Michał Z per l'analisi approfondita che ha portato a questo miglioramento. (I6ad62).
  • Ora NavHost mostrerà la destinazione di inizio sul primo passaggio della composizione, invece di dover attendere che il secondo passaggio legga lo stato aggiornato. (I439a7, b/304852206)

Correzioni di bug

  • È stato risolto un problema per cui il tuo back stack veniva popolato se chiamassi setGraph più di una volta con lo stesso identico grafico solo se nel grafico era presente una destinazione che conteneva un'azione che collega due destinazioni. (Ieaed7)
  • Le finestre di dialogo che sono state visitate e ignorate in rapida successione non verranno più mostrate 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)
  • Risolto un problema per cui NavController poteva gestire lo stesso link diretto più di una volta se lo stack posteriore era completamente vuoto prima di una modifica alla configurazione o di una chiamata a setGraph solo quando per l'intent in entrata era impostato il flag FLAG_ACTIVITY_NEW_TASK. (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

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

Nuove funzionalità

  • È stato aggiunto il supporto di popUpTo per usare route con argomenti per consentire di tornare a una voce specifica che utilizza questi argomenti esatti, in base al supporto trovato in popBackStack. (I731f4, b/299255572)

Correzioni di bug

  • Risolvi 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 retropressione del sistema causava l'aggiornamento non corretto di currentDestination in modo che corrispondesse al frammento visualizzato. (Id0d6c, b/289877514)
  • Il ciclo di vita di DialogFragment ora verrà spostato correttamente nello stato RESUMED quando la finestra di dialogo sopra viene ignorata. (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 della navigazione con frammenti che causava la presenza di voci errate nell'elenco visibleEntries. (I5caa9, b/288520638)
  • Risolto un problema per cui la destinazione della finestra mobile (ad es. Dialogs, Bottomsheets e così via) non riceveva mai un callback del ciclo di vita RESUMED. (I3b866, b/287505132)

Versione 2.7.2

Versione 2.7.2

6 settembre 2023

Viene rilasciato androidx.navigation:navigation-*:2.7.2. 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 Scrittura navigazione, in cui le finestre di dialogo parzialmente oscurate (ad esempio non quella più in alto) si trovavano nello stato 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 della nuova finestra di dialogo più in alto nello stato Ciclo di vita STARTED anziché essere correttamente spostata in RESUMED. (aosp/2629401, b/286371387)
  • Navigazione sicura Args non crea più un'istanza con entusiasmo della sua attività se non viene effettivamente eseguita. (I0e385, b/260322841)

Aggiornamento delle dipendenze

  • Navigazione Compose ora dipende da Compose 1.5.1.

Versione 2.7.1

Versione 2.7.1

23 agosto 2023

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

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

Modifiche importanti dalla versione 2.6.0

Animazioni dell'accompagnatore

Ora che AnimatedContent è stabile, abbiamo potuto spostare il codice da Animazione di navigazione accompagnata a Compose di navigazione.

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

Non verranno apportate ulteriori modifiche all'animazione della navigazione accompagnata e la ritireremo formalmente a breve, insieme alle indicazioni su come eseguire la migrazione di nuovo a Navigation Compose, ma sarà l'opposto della guida alla migrazione e non saranno necessarie altre modifiche all'API se utilizzi già la versione più recente di Accompanist alpha (0.31.2-alpha). (b/197140101).

Correzioni di bug

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

Aggiornamenti delle dipendenze

  • La navigazione ora dipende dalla funzionalità Scrivi 1.5.0 in alto da 1.1.0.

Versione 2.7.0-rc01

26 luglio 2023

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

Correzioni di bug

  • È stato risolto un problema per cui le lambda EnterTransition e ExitTransition create come parte di NavHost potevano potenzialmente rimanere in memoria anche dopo la rimozione di NavHost dalla composizione. (I893d0)

Problemi noti

  • Navigazione 2.6.x presenta un problema che causa un problema di IllegalArgumentException durante la navigazione con popUpTo. È possibile che questa eccezione possa essere evitata riorganizzando il grafico, in modo simile ai consigli suggeriti qui. (b/287133013)

Versione 2.7.0-beta02

28 giugno 2023

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

Correzioni di bug

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

Versione 2.7.0-beta01

7 giugno 2023

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

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

Animazioni dell'accompagnatore

Ora che AnimatedContent è stabile, abbiamo potuto spostare il codice da Animazione di navigazione accompagnata a Compose di navigazione.

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

Non verranno apportate ulteriori modifiche all'animazione della navigazione accompagnata e la ritireremo formalmente a breve, insieme alle indicazioni su come eseguire la migrazione di nuovo a Navigation Compose, ma sarà l'opposto della guida alla migrazione e non saranno necessarie altre modifiche all'API se utilizzi già la versione più recente di Accompanist alpha (0.31.2-alpha). (b/197140101).

Correzioni di bug

  • Da Navigazione 2.6.0-rc02: è stato risolto un problema relativo alla Navigazione in Frammenti per cui la navigazione con popUpTo e lo spostamento di un frammento dallo stack posteriore senza ricreare la relativa visualizzazione causava l'interruzione del funzionamento del sistema. (Ieb8d4, b/281726455)

Aggiornamenti delle dipendenze

  • La navigazione ora dipende da Scrivi 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 alla 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 si rifletteranno nei successivi accessi all'istanza arguments o ad altre istanze di OnDestinationChangedListener.
  • NavDeepLink ora supporta i valori predefiniti per gli array, in modo da supportare i parametri di query ripetute 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 interamente incapsulate nella classe NavType. Ora StringType esegue l'override di questo metodo per chiamare Uri.encode sul criterio String specificato.

Modifiche importanti a Navigation Compose dalla versione 2.5.0

  • Durante l'anteprima di un componibile con NavHost, ora per impostazione predefinita verrà visualizzato startDestination di NavGraph.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) ora supportano tutte le route con argomenti compilati parzialmente o completamente. Tieni presente che gli argomenti devono corrispondere esattamente a quelli della voce.
  • Se provi a creare un campo NavDeepLink vuoto utilizzando l'DSL Kotlin navDeepLink, ora verrà visualizzato un avviso di lint che indica che un link diretto richiede un URI, un'azione e/o un tipo MIME 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 Frammento 1.7.0-alpha01 e versioni successive possono fornire un'animazione di Indietro predittivo in-app sui dispositivi Android U.
  • Quando utilizzi la navigazione con frammenti, se tenti di eseguire manualmente un'FragmentTransaction che aggiunge un frammento allo stack posteriore di FragmentManager, ora verrà generato 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 di attività di un file XML di navigazione, il segnaposto viene 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 l'Lifecycle NavBackStackEntry attenderà il completamento degli effetti speciali del frammento in entrata e in uscita prima di spostare l'ultimo Lifecycle.State.
  • DialogFragmentNavigator ora utilizza le API di transizione durante la navigazione e la creazione di NavBackStackEntries. Ciò significa che l'Lifecycle di NavBackStackEntry attenderà che l'elemento Lifecycle di DialogFragment si sposti su DESTROYED prima di spostarsi su DESTROYED stesso.
  • NavHostFragment ora ti consente di recuperare NavController non appena NavHostFragment viene collegato a FragmentManager, anziché solo dopo onCreate().
  • Il supporto della navigazione per i moduli delle funzionalità dinamiche ora dipende dalla libreria granulare di Play Feature Delivery.
  • Navigazione Safe Args ora dipende dal plug-in Android Gradle versione 7.3.0. Ciò significa che ora è compatibile solo con le versioni 7.3.0+.

Modifiche importanti a NavigationUI dalla versione 2.5.0

  • Quando passi l'ID di un grafico di navigazione a AppBarConfiguration (ad esempio tramite un Menu), NavigationUI ora considera solo la destinazione di partenza di quel grafico di navigazione come destinazione di primo livello, anziché contrassegnare erroneamente ogni destinazione all'interno del grafico come destinazione di primo livello. Il comportamento della trasmissione 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 setupWithNavController in NavigationUI per l'utilizzo della barra delle app in alto analizzeranno ora i valori R.string per gli argomenti ReferenceType trovati in android:label nei relativi valori stringa, invece di restituire il numero 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

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

Correzioni di bug

  • È stato risolto un problema relativo alla Navigazione in Frammenti per cui la navigazione con popUpTo e lo spostamento di un frammento dallo stack posteriore senza ricreare la relativa visualizzazione causava l'interruzione del funzionamento del sistema. (Ieb8d4, b/281726455)

Versione 2.6.0-rc01

10 maggio 2023

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

Correzioni di bug

  • È stato risolto un problema in Navigazione con frammenti per cui la rimozione di un frammento tramite la navigazione con popUpTo nel callback del ciclo di vita onResume() causava un IllegalStateException. (I21884, b/279644470)

Versione 2.6.0-beta01

19 aprile 2023

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

Nuove funzionalità

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

Correzioni di bug

  • Quando utilizzi la navigazione con frammenti, se tenti di eseguire manualmente un'FragmentTransaction che aggiunge un frammento allo stack posteriore di FragmentManager, ora verrà generato un IllegalArgumentException. Devi sempre aggiungere i frammenti tramite l'API navigate(). (I6d38e)
  • Quando c'è un navigate che aggiunge una voce e una 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

Viene rilasciato androidx.navigation:navigation-*:2.6.0-alpha09. 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 riusciranno se nell'operazione di navigazione manca un NavArgument con valore nullo richiesto dalla NavDestination con cui Action/MimeType corrisponde. (Ibfa17, b/271777424)
  • Quando NavController imposta un grafico con la stessa route e le stesse destinazioni del grafico precedente, ora sostituisce correttamente i nodi del grafico attuali e le destinazioni dello stack precedente con nuove istanze. Questo corregge un arresto anomalo durante l'utilizzo di onLaunchSingleTop senza salvataggio dello stato in Compose 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 NavController non appena NavHostFragment viene collegato a FragmentManager, anziché solo dopo onCreate(). (Ic6382, b/220186282)

Correzioni di bug

  • È stato corretto un valore NullPointerException durante la comparsa di un grafico nidificato che include un argomento non nullo. (6b3581, b/249988437)
  • Se riutilizzi il sistema dopo aver eseguito una 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 FragmentManager di FragmentNavigator senza utilizzare la navigazione non causerà più un arresto anomalo. (b17204, b/274167493)

Aggiornamenti delle dipendenze

Versione 2.6.0-alpha07

8 marzo 2023

Viene rilasciato androidx.navigation:navigation-*:2.6.0-alpha07. 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 la chiamata a clearBackStack() da NavController non cancellava lo stato salvato nel gestore di frammenti associato allo stack posteriore cancellato. (Ic1cce, b/271190202)
  • È stata corretta una regressione nella versione 2.6.0-alpha06 che causava l'evidenziazione dell'errore MenuItem errato in BottomNavigationView quando si utilizzava di nuovo il 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

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

Nuove funzionalità

  • Durante l'anteprima di un componibile con NavHost, ora per impostazione predefinita verrà visualizzato startDestination di NavGraph. (I2b89f)

Modifiche alle API

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

Correzioni di bug

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

Problemi noti

  • Quando utilizzi la navigazione con frammenti, il ciclo di vita di NavBackStackEntry non riesce a raggiungere RESUMED quando vengono utilizzate 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 Navigazione con frammenti, dopo il ripristino dello stato NavBackStackEntry Lifecycle non ottiene DESTROYED quando il frammento è DESTROYED . (b/270610768)

Versione 2.6.0-alpha05

8 febbraio 2023

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

Nuove funzionalità

  • NavController.popBackStack(route), NavController.getBackStackEntry(route) e NavController.clearBackStack(route) ora supportano tutte le route con argomenti compilati parzialmente o completamente. Tieni presente che gli argomenti devono corrispondere esattamente a quelli della voce. (Iebd28, Ic678c, I3b37b, b/257514373)
  • FragmentNavigator ora utilizza le API di transizione durante la navigazione e la creazione di 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 creazione di NavBackStackEntries. Ciò significa che l'Lifecycle di NavBackStackEntry attenderà che l'elemento Lifecycle di DialogFragment si sposti su DESTROYED prima di spostarsi su DESTROYED stesso. (I53ee5, b/261213893)

Modifiche alle API

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

Correzioni di bug

  • Ora lo stato del navigatore non sarà operativo quando si utilizzano le API push/popWithTransition e la voce è già in fase di gestione. (Iadbfa, b/261213893)
  • Quando utilizzi launchSingleTop con un NavGraph nidificato, tutte le destinazioni che partono dalla destinazione originale al suo startDestination verranno aggiunte correttamente solo all'inizio del backstack. (Id4bea, b/253256629)
  • Ora la navigazione sostituirà correttamente l'istanza DialogFragment quando si accede alla 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

Viene rilasciato androidx.navigation:navigation-*:2.6.0-alpha04. 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 interamente incapsulate nella classe NavType. Ora StringType esegue l'override di questo metodo per chiamare Uri.encode sul criterio 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 risolto il problema di arresto anomalo causato dalla navigazione verso l'alto dopo il deep linking a una destinazione con argomenti predefiniti null. (I51c24, b/243183636)

Aggiornamento delle dipendenze

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

Versione 2.6.0-alpha03

24 ottobre 2022

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

Correzioni di bug

  • Da Navigazione 2.5.3: NavHost non causerà più un NoSuchElementException se non è disponibile una destinazione per la composizione di Crossfade. Ora salterà solo la composizione. (Ieb46e, b/253299416)
  • Da Navigazione 2.5.3: è stato risolto un problema per cui lo stato di Compose salvato (ad esempio l'utilizzo di rememberSaveable) non veniva dimenticato e veniva rimosso quando una destinazione veniva estratta dallo stack posteriore. (I64949)

Aggiornamenti delle dipendenze

Versione 2.6.0-alpha02

5 ottobre 2022

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

Cambiamenti del comportamento

  • Quando passi l'ID di un grafico di navigazione a AppBarConfiguration (ad esempio tramite un Menu), NavigationUI ora considera solo la destinazione di partenza di quel grafico di navigazione come destinazione di primo livello, anziché contrassegnare erroneamente ogni destinazione all'interno del grafico come destinazione di primo livello. Il comportamento della trasmissione 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)
  • La voce di menu selezionata non verrà più aggiornata durante la navigazione verso una destinazione FloatingWindow, ad esempio in 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 setupWithNavController in NavigationUI per l'utilizzo della barra delle app in alto analizzeranno ora i valori R.string per gli argomenti ReferenceType trovati in android:label nei relativi valori stringa, invece di restituire il numero intero della risorsa generato automaticamente. (I5f803, b/167959935)
  • NavDeepLink ora supporta i valori predefiniti per gli array, in modo da supportare i parametri di query ripetute 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 di attività di un file XML di navigazione, il segnaposto viene compilato automaticamente con il packageName del contesto al momento dell'inflazione. (Iaabde, b/234223561)
  • Se provi a creare un campo NavDeepLink vuoto utilizzando l'DSL Kotlin navDeepLink, ora verrà visualizzato un avviso di lint che indica che un link diretto richiede un URI, un'azione e/o un tipo MIME per essere valido. (I08d2f, b/154038883)

Modifiche alle 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)

Cambiamenti del comportamento

  • arguments di NavBackStackEntry e arguments passati a un OnDestinationChangedListener ora sono solo una copia degli argomenti immutabili creati quando hai raggiunto la destinazione. Ciò significa che le modifiche apportate a questi pacchetti non si rifletteranno nei successivi accessi all'istanza arguments o ad altre istanze di OnDestinationChangedListener. (I676f5)

Correzioni di bug

  • Da Navigazione 2.5.2: ora la navigazione dinamica tenta correttamente di installare le destinazioni Attività da altri moduli prima di accedervi. (Ia2c16, b/240292838)
  • Da Navigazione 2.5.2: ora la navigazione sostituirà correttamente l'istanza Fragment quando si naviga alla stessa destinazione e si imposta il flag launchSingleTop su true. (I5a2f1, b/237374580)
  • In Navigazione 2.5.2: è stato risolto il problema IllegalStateException causato dal passaggio a un grafico con doppio nidificato che condivide un elemento padre con una nuova destinazione di inizio attivata. (I9f7cb, b/243778589)

Versione 2.5

Versione 2.5.3

24 ottobre 2022

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

Correzioni di bug

  • NavHost non causerà più un NoSuchElementException se non è disponibile una destinazione per la scrittura di Crossfade. Ora salterà solo la composizione. (Ieb46e, b/253299416)
  • Risolto un problema per cui lo stato di Compose salvato (ad esempio l'utilizzo di rememberSaveable) non veniva dimenticato e veniva rimosso quando una destinazione veniva estratta dallo stack precedente. (I64949)

Versione 2.5.2

7 settembre 2022

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

Correzioni di bug

  • La navigazione dinamica ora tenta correttamente di installare le destinazioni attività da altri moduli prima di accedervi. (Ia2c16, b/240292838)
  • Ora la navigazione sostituirà correttamente l'istanza Fragment quando accedi alla stessa destinazione e imposti il flag launchSingleTop su true. (I5a2f1, b/237374580)
  • È stato risolto il problema di IllegalStateException causato dall'accesso a un grafico con doppio nidificato che condivide un elemento padre con una nuova destinazione di inizio attivata. (I9f7cb, b/243778589)

Aggiornamento delle dipendenze

Versione 2.5.1

27 luglio 2022

Viene rilasciato androidx.navigation:navigation-*:2.5.1. 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 CreationExtras: Navigation ora è in grado di fornire un ViewModelProvider.Factory stateless tramite CreationExtras di Lifecycle 2.5.0.

Navigazione SafeArgs

  • Navigation Safe Args ha eseguito l'upgrade della dipendenza Android Gradle Plugin in modo che si basi su 7.0.4, eliminando la compatibilità per le versioni AGP precedenti al giorno 7.0.
  • Aggiunto il supporto per l'utilizzo dell'attributo build.gradle dello spazio dei nomi 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 all'elemento NavController.

Versione 2.5.0-rc02

15 giugno 2022

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

Correzioni di bug

  • È stato risolto un arresto anomalo causato dal passaggio rapido tra le destinazioni in basso durante l'utilizzo di Scrittura di navigazione 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 include una funzione toString() personalizzata per mostrare i valori interni dell'argomento. (I900a8)

Versione 2.5.0-rc01

11 maggio 2022

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

Nuove funzionalità

  • È stata aggiunta una nuova regola lint per mettere in guardia contro il posizionamento di elementi <deeplink> all'interno di elementi <activity> nel file navigation.xml.(Ic15a5, b/178403185)

Correzioni di bug

  • Gli ambiti componibili in NavHost e DialogHost vengono ora eliminati nell'ordine previsto, ovvero gli ambiti componibili interni vengono eliminati prima degli componibili esterni. (I157e6)
  • Navigazione SafeArgs ora utilizza PathSensitivity.RELATIVE in ArgumentsGenerationTask per consentire la riposizionabilità della cache. Ciò significa che ora la voce della cache 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

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

Correzioni di bug

  • DialogNavigator ora utilizza popWithTransition quando esegue una chiamata dismiss(). Questo corregge una condizione di gara quando si utilizza un ViewModel all'interno della destinazione dialog che causava un IllegalStateException quando si chiude la finestra di dialogo utilizzando il sistema indietro o toccando all'esterno della finestra di dialogo per uscire. (Id7376, b/226552301)

Aggiornamenti delle dipendenze

  • La navigazione ora dipende dal Ciclo di vita 2.5.0-beta01, correggendo un IllegalStateException quando un NavHost viene nidificato all'interno di un altro NavHost in una scheda di navigazione inferiore non principale quando vengono utilizzati più gruppi arretrati.

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 alle API

Correzioni di bug

  • NavHost ora dipende da visibleEntries da NavController per determinare quali voci scrivere. Ciò significa che, quando utilizzi NavHost nidificato, ora l'elemento NavHost interno dovrebbe animarsi correttamente. (I4ba2b, b/225394514)
  • L'elemento visibleEntries StateFlow fornito da NavController ora si basa sullo stato massimo del ciclo di vita della voce anziché sullo stato attuale del ciclo di vita. Ciò significa che anche se il ciclo di vita dell'host di navController scende sotto AVVIATO, l'elenco degli elementi visibili rimarrà lo stesso. (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)
  • Ora NavDeepLink può analizzare gli URI con un singolo parametro di query senza valore. (I0efe8, b/148905489)
  • Le stringhe vuote ora sono considerate come argomenti validi nei link diretti. (I70a0d, b/217399862)
  • Navigation Safe Args non avrà più un arresto anomalo quando utilizzi gli spazi dei nomi e non è presente AndroidManifest.xml. (I17ccf, b/227229815)

Versione 2.5.0-alpha03

23 febbraio 2022

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

Modifiche alle API

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

Correzioni di bug

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

Versione 2.5.0-alpha02

9 febbraio 2022

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

Correzioni di bug

  • Da Navigazione 2.4.1: NavHostFragment ora imposterà correttamente OnBackPressedDispatcher quando si utilizza l'associazione 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

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

Nuove funzionalità

Correzioni di bug

  • Risolto un problema per cui l'accesso a un ViewModel creato tramite by navGraphViewModels() da un elemento onCreate() di un frammento non riusciva 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)

Arg sicuri

  • Safe Args ora dipende dal plug-in Android Gradle versione 7.0.4. 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.2

Versione 2.4.2

6 aprile 2022

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

Correzioni di bug

Versione 2.4.1

Versione 2.4.1

9 febbraio 2022

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

Correzioni di bug

  • NavHostFragment ora imposterà correttamente il OnBackPressedDispatcher quando si utilizza l'associazione della vista con grafici nidificati. (Ifbb51, b/214577959)
  • Quando i link diretti attraverso più NavGraph nidificati, il back stack ora include correttamente le destinazioni di partenza 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() dall'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)
  • Backporting da Navigazione 2.5.0-alpha01: Safe Args ora dipende dalla versione 7.0.4 del plug-in Android 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

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

Modifiche importanti dalla versione 2.3.0

  • Tutti gli artefatti di navigazione sono stati riscritti in Kotlin. In questo modo è stato migliorato il valore null delle classi che utilizzano valori generici (come 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 sottoclasse) e un riquadro di dettagli, che utilizza NavHostFragment come implementazione, come mostrato nell'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 in alternativa alla gestione manuale di un OnDestinationChangedListener.
  • NavController ora offre la possibilità di recuperare un elenco di tutte le istanze NavBackStackEntry visibili come StateFlow tramite la proprietà sperimentale visibleEntries.
  • Ora è possibile estendere la classe NavType per creare NavType personalizzati. I tipi personalizzati sono supportati solo quando crei il tuo grafico di navigazione in modo programmatico, ad esempio tramite il Navigator Graph Kotlin DSL.
  • 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 si trova nella gerarchia di un'altra.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • I metodi NavigationUI che hanno utilizzato un BottomNavigationView sono stati aggiornati in modo da includere la superclasse introdotta in Material 1.4.0, NavigationBarView. In questo modo è possibile utilizzare questi metodi con NavigationRailView.

  • Durante il gonfiaggio di un elemento <action> tramite XML, gli attributi dell'animazione possono utilizzare attributi estratti dal tuo tema con la sintassi app:enterAnim="?attr/transitionEnter".

  • Ora Safe Args genera un metodo fromSavedStateHandle() per ogni classe NavArgs. (N. 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 Kotlin DSL

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

Questa versione introduce una nuova opzione per identificare in modo univoco una destinazione in un grafico di navigazione in base al suo percorso. Un route è un String che definisce il percorso univoco di una destinazione. Tutti i metodi DSL Kotlin che utilizzavano un ID destinazione sono ora deprecati e sostituiti con un'API equivalente che utilizza una route.

Ogni percorso deve essere considerato la parte del "percorso" di un Uri che definisce quella 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 di NavController 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 relative all'API:

  • La proprietà Kotlin popUpTo sulla rete DSL Kotlin è stata ritirata e sostituita da 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 è possibile passare direttamente a qualsiasi destinazione in qualsiasi grafico nidificato, garantendo che questi percorsi siano utilizzabili in progetti multimodulo senza aggiungere esplicitamente un link diretto visibile esternamente a ogni destinazione.

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 dissolvenza incrociata tra destinazioni. Puoi utilizzare l'animazione di navigazione accompagnata per controllare le transizioni di entrata e 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 delle transizioni in entrata e passa immediatamente a STARTED all'inizio di qualsiasi transizione in uscita. In questo modo, puoi evitare tutti i problemi relativi a IllegalStateException e multi-touch attivando una chiamata navigate solo quando Lifecycle è RESUMED.
  • Ambito di ViewModel (tramite l'API viewModel() di Lifecycle ViewModel Compose 2.4.0 o hiltViewModel() di Hilt Navigation Compose 1.0.0 a livello di destinazione, fornendo un ambito che sopravvive alle modifiche di configurazione e allo stato precedente (quando il contenuto componibile viene eliminato in altro modo) e un segnale in onCleared() di ViewModel che indica lo smaltimento e la pulizia permanente dello stato associato a NavBackStackEntry.
  • Determinazione dell'ambito dello stato rememberSaveable a livello di destinazione, per garantire che tutto lo stato componibile venga salvato e ripristinato automaticamente quando torni a una destinazione.
  • Supporto completo per il salvataggio e il ripristino dello stato del NavController e dello stato della sua destinazione dopo la morte e la ricreazione del processo.
  • Integrazione automatica con il pulsante Indietro del sistema.
  • Supporto per la trasmissione di argomenti, l'aggiunta di link diretti alle destinazioni e la restituzione di risultati a destinazioni precedenti.

  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire lo stato di sollevamento e il collegamento di NavController a elementi componibili 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 in Scrivi.

Più stack posteriori

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 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 modifiche al codice. Quando utilizzi la navigazione con i frammenti, questo è il metodo consigliato per l'integrazione con più gruppi arretrati.

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 tutte le destinazioni inserite 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.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Nella creazione manuale di un oggetto NavOptions tramite NavOptions.Builder, puoi utilizzare setRestoreState() e il nuovo sovraccarico in setPopUpTo() che richiede 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 ulteriore parametro saveState.

  • 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 con ambito di 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.

Cambiamenti del comportamento

  • NavDeepLinkBuilder ora aggiunge PendingIntent.FLAG_IMMUTABLE alla PendingIntent restituita da createPendingIntent(), garantendo che questa API funzioni come previsto quando scegli 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.
  • Gli argomenti analizzati da NavDeepLink ora considerano il simbolo di cancelletto allo stesso modo dei punti interrogativi come separatore tra i segmenti del percorso, impedendo a un argomento di estendersi attraverso il simbolo di cancelletto.
  • Durante la generazione delle azioni, il codice Kotlin generato da Safe Args ora inserisce come parametri gli argomenti senza valori predefiniti prima di quelli con valori predefiniti.
  • Durante la generazione di argomenti, Safe Args ora inserisce i parametri senza valori predefiniti prima di quelli con valori predefiniti.
  • Safe-Args ora dipende dal plug-in Android Gradle 4.2.0. Questo significa che non dovresti più ricevere l'avviso sull'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 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.

Cambiamenti del 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 correttamente ripristinata nella parte superiore dello schermo dopo le modifiche alla configurazione o l'elaborazione della fine. (I4c0dc, b/207386169)
  • È stato risolto un problema per cui il tentativo di recuperare un ViewModel dal NavBackStackEntry di una finestra di dialogo non riusciva se la finestra di dialogo veniva chiusa. (I6b96d, b/206465487)
  • È stato risolto un problema relativo all'utilizzo di activity destinazioni con il NavHost di Compose Navigazione che comportava ricomposizioni infinite. (I8f64c)
  • È stato risolto il problema di una fuga di dati in Navigation Compose che causava il mantenimento di un riferimento della vecchia attività dopo una modifica alla configurazione o la morte di un processo. (I4efcb, b/204905432)

Correzioni di bug relativi agli argomenti sicuri

  • 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 argomenti sicuri che non consente agli array booleani di avere un valore null. (I8c396, b/174787525)

Versione 2.4.0-beta02

3 novembre 2021

Viene rilasciato androidx.navigation:navigation-*:2.4.0-beta02. 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 accede a un altro grafico, garantendo che codice come NavigationUI.setupWithNavController e codice che utilizza più stack arretrati funzionino come previsto. (Ic8807)

Cambiamenti del comportamento

  • I pattern dei link diretti vengono ora compilati in modo lento in NavDeepLink anziché durante l'inflazione. Questo dovrebbe migliorare i tempi di inflazione dei grafici di navigazione che includono link diretti. (b8d257, b/184149935)

Correzioni di bug

  • È stato risolto un problema per cui NavBackStackEntries veniva spostato verso il basso su Lifecycle.State.CREATED dopo il passaggio a Lifecycle.State.STARTED quando NavHost viene aggiunto direttamente al setContent() dell'attività. (Ia5ac1, b/203536683)
  • È stata corretta una condizione di gara per cui la visualizzazione di una destinazione DialogFragment dallo stack posteriore prima che la finestra di dialogo venisse effettivamente mostrata non comportava la chiusura della finestra di dialogo, causando un arresto anomalo quando la finestra di dialogo errata veniva chiusa manualmente dall'utente. (I687e5)
  • Risolto un problema per cui l'API onNavDestinationSelected su NavigationUI restituiva true anche se in realtà non avevi navigate() a quel grafico di navigazione. Ora utilizza la stessa logica utilizzata internamente da setupWithNavController per selezionare solo il MenuItem associato alla destinazione attuale utilizzando il hierarchy della destinazione. (I2b053).

Versione 2.4.0-beta01

27 ottobre 2021

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

Nuove funzionalità

  • Ora puoi utilizzare by navGraphViewModel con un percorso in alternativa all'utilizzo di un ID in modo da migliorare il supporto dell'utilizzo dell'DSL Navigation Kotlin con Fragments. (I901e3, b/201446416)

Modifiche alle API

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

Correzioni di bug

  • I ViewModel non verranno più eliminati quando le transizioni vengono interrotte passando da una schermata all'altra (Id52d8, b/200817333)
  • Gli argomenti NavDeepLink nulli non richiedono più un valore predefinito per l'aggiunta di link diretti a NavDestination. (I5aad4, b/201320030)
  • Le NavBackStackEntries ora con cicli di vita diversi non sono più considerate uguali. Ciò significa che NavHost ricompone correttamente tutte le destinazioni quando si naviga con singleTop e quando riselezionano le voci di menu in basso. (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)
  • Lo stato visivo delle destinazioni delle finestre di dialogo ora rimane correttamente sincronizzato con lo stato di DialogFragmentNavigator. Ciò significa che, chiamando manualmente l'API dismiss() asincrona per DialogFragment, ora verranno cancellate correttamente tutte le destinazioni delle finestre di dialogo sopra la finestra di dialogo ora ignorata. Questa azione 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

Viene rilasciato androidx.navigation:navigation-*:2.4.0-alpha10. 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 richiede un insieme facoltativo di Navigator istanze che verranno aggiunti al NavController restituito per supportare meglio i navigatori facoltativi come quelli del materiale di navigazione accompagnato. (I4619e)

Correzioni di bug

  • La navigazione dinamica non avrà più un arresto anomalo quando l'attività viene creata. (Ifa6a3, b/197942869)
  • È stato risolto un problema relativo al pulsante Indietro del sistema che si verifica solo dopo essere tornati in una destinazione componibile contenente un NavHost. (3ed148, b/195668143)
  • SafeArgs ora genera gli argomenti per fromBundle() e fromSavedStateHandle() nell'ordine dei parametri corretto. (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 verrà aggiunto automaticamente al grafico risultante. (I8a470, b/182545357)

Modifiche alle 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

  • Durante la generazione di 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 nulli 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 il back stack. (I97f96)
  • Risolto un problema per cui le istanze OnDestinationChangedListener e currentBackStackEntryFlow non ricevevano notifiche durante l'utilizzo di launchSingleTop. (Aaebc)

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 quando crei il tuo grafico di navigazione in modo programmatico, ad esempio tramite il Navigator Graph Kotlin DSL. (I78440, b/196871885)

Cambiamenti del comportamento

  • Durante la generazione delle azioni, il codice Kotlin generato da Safe Args ora inserisce come parametri gli argomenti senza valori predefiniti prima di quelli con valori predefiniti. (Idb697, b/188855904)
  • I link diretti ora verificano che tutti gli argomenti richiesti (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 ci sarà più un ArrayIndexOutOfBoundsException quando chiami setGraph con un grafico con 13 o 29 destinazioni. (I1a9f1, b/195171984)
  • Il generatore Java di SafeArgs non dovrebbe più generare avvisi lint durante la generazione delle classi Args. (I1a666, b/185843837)

Contributo esterno

  • Grazie ospixd per assicurarti che i link diretti verifichi che tutti gli argomenti obbligatori (quelli senza valori predefiniti) siano presenti in Uri. (#204, b/185527157)

Versione 2.4.0-alpha07

18 agosto 2021

Viene rilasciato androidx.navigation:navigation-*:2.4.0-alpha07. 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 nel 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 ignorare 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 dei pulsanti Indietro del sistema del NavController, causando potenzialmente l'intercettazione del pulsante Indietro anche se non presentava alcun back stack. (If3b34).
  • Safe-args ora genera automaticamente un metodo toSavedStateHandle per gli argomenti che può essere usato 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 alle API

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

Cambiamenti del comportamento

  • Quando navighi con animazioni (come Crossfade), ora il Lifecycle della nuova destinazione raggiungerà il RESUMED solo al completamento dell'animazione. (If0543, b/172112072, b/194301889)
  • L'elemento NavHost di Compose di navigazione ora imposta il grafico come parte della prima composizione. (Ieb7be)

Correzioni di bug

  • Quando viene visualizzata l'ultima destinazione di un grafico di navigazione, non viene più visualizzato un ClassCastException. (If0543, b/172112072, b/194301889)
  • È stato corretto un NullPointerException che si verificava quando si aggiungeva un link diretto senza Uri e si naviga tramite un percorso o un link diretto. (938a0c, b/193805425)
  • È stato risolto un problema in Scrittura navigazione in cui un elemento NavBackStackEntry con link diretto non raggiungeva lo stato RESUMED. (I192c5)
  • È stato risolto un problema per cui l'apertura della destinazione di una finestra di dialogo non aggiornava la gestione dei pulsanti Indietro del sistema del NavController, causando potenzialmente l'intercettazione del pulsante Indietro anche se non presentava uno stack arretrato. (aosp/1782668)

Versione 2.4.0-alpha05

21 luglio 2021

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

Cambiamenti del comportamento

  • La funzionalità NavHost di Navigation Compose ora utilizza sempre la dissolvenza incrociata durante la navigazione tra le destinazioni. (I07049, b/172112072)
  • Ora puoi apportare modifiche al grafico di un NavHost. I grafici con lo stesso valore di startDestination e di destinazioni nel grafico verranno considerati uguali e non cancelleranno il back stack 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 eliminare completamente SlidingPaneLayout dal tuo APK quando AbstractListDetailFragment non viene utilizzato. (I611ad)
  • NavGraph e NavDestination ora eseguono l'override del metodo equals, pertanto due oggetti con gli stessi valori vengono considerati uguali. (I166eb, b/175392262)

Versione 2.4.0-alpha04

1 luglio 2021

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

Nuove funzionalità

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

Modifiche alle API

  • La funzione add in NavigatorState è stata rinominata 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)

Cambiamenti del comportamento

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

Correzioni di bug

  • È stato risolto un problema con <include-dynamic> per cui gli argomenti passati al grafico non venivano trasmessi correttamente al grafico incluso dinamicamente. (I3e115).
  • È stato corretto un NullPointerException durante l'accesso a una destinazione utilizzando un argomento string[] con un valore predefinito di @null. (I1fbe8)
  • Aggiungi regole ProGuard per @Navigator.Name, risolvendo i problemi quando si utilizza la modalità completa 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

Viene rilasciato androidx.navigation:navigation-*:2.4.0-alpha03. 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 ProGuard per by navArgs() vengono applicate correttamente quando si utilizza navigation-common o qualsiasi elemento che dipende da questo. (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 indirizzato. (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 avrà esito negativo 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. Per risolvere il problema, è possibile eseguire l'aggiornamento per utilizzare Gradle 7.0. (b/190739257)

Versione 2.4.0-alpha02

2 giugno 2021

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

Nuove funzionalità

  • Le route sono ora supportate per le destinazioni Attività, Frammento e Finestra di dialogo, nonché in tutto l'ambiente DSL Dynamicnavigation Kotlin. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI ha aggiunto temporaneamente API sperimentali per consentire la disattivazione del salvataggio dello stato. Anche se salvare sempre lo stato è il comportamento corretto, esistono comunque utilizzi di librerie deprecate (ovvero frammenti conservati) che non possono essere supportati durante il salvataggio dello stato, quindi le app hanno la possibilità di effettuare lentamente la conversione da qualsiasi API non supportata. (Idf93c)
  • La navigazione ora fornisce API findDestination() e getHierarchy() che possono essere utilizzate per implementare l'UI di navigazione personalizzata. findDestination() è una funzione di estensione di NavGraph in grado 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 di navigazione dell'interfaccia utente che utilizzavano un BottomNavigationView sono stati aggiornati in modo da introdurre la superclasse in Material 1.4.0, NavigationBarView. In questo modo è possibile utilizzare questi metodi con NavigationRailView. (Ib0b36, b/182938895)

  • Durante il gonfiaggio di un elemento <action> tramite XML, gli attributi dell'animazione possono utilizzare attributi estratti dal tuo tema con la sintassi app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

Modifiche alle 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 Indietro del sistema o facendo clic all'esterno, garantendo che lo stato NavController sia sempre sincronizzato con lo stato del navigatore. (I2ead9)
  • La navigazione non fornisce più un ConcurrentModificationException quando si utilizza la manipolazione dell'elenco di OnDestinationChangedListeners con un callback onDestinationChanged. (Ib1707, b/188860458)

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

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

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

Aggiornamento delle dipendenze

  • Safe-Args ora dipende dal plug-in Android Gradle 4.2.0. Questo significa che non dovresti più ricevere l'avviso sull'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() su NavController fornisce un Flow che emette ogni volta che il valore NavBackStackEntry corrente cambia. Questo flusso può essere utilizzato in alternativa alla gestione manuale di un OnDestinationChangedListener. (I19c4a, #89, b/163947280)

Più stack posteriori

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> nel file XML del grafico di navigazione sono state ampliate per supportare il salvataggio e il ripristino dello stack precedente. (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 popolate, consentendo il supporto di più stack arretrati senza modifiche al codice. Quando utilizzi la navigazione con i frammenti, questo è il metodo consigliato per l'integrazione con più gruppi arretrati. (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 tutte le destinazioni inserite 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 in 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 con ambito di 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.

I valori ComposeNavigator utilizzati per composable destinazioni in Compose Navigator e FragmentNavigator e DynamicFragmentNavigator utilizzati per <fragment> destinazioni in Navigazione con Frammenti sono stati entrambi aggiornati per usare le nuove API Navigator e supportare il salvataggio e il ripristino dello stato.

Percorsi di navigazione

Un route è un String che identifica in modo univoco una destinazione. Sebbene in precedenza fosse utilizzato solo in Navigazione in Scrittura, questo concetto ora si è sviluppato fino a diventare parte delle API di navigazione principali. 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 relative all'API:

  • La proprietà kotlin popUpTo sulla rete DSL Kotlin è stata ritirata e sostituita da popUpToId. (I59c73, b/172823546)
  • L'API getStartDestination() è stata deprecata a favore di getStartDestinationId(). (I0887f, b/172823546)

Per gli sviluppatori che eseguono l'upgrade dalle versioni precedenti di Navigation Compose a Navigation Compose 2.4.0-alpha01, le seguenti importazioni sui 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, consentendoti di chiamare direttamente navBackStackEntry.destination.route.

Modifiche alle API

  • Tutti gli artefatti di navigazione sono stati riscritti in Kotlin. In questo modo è stato migliorato il valore null delle classi che utilizzano valori generici (come 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 di backup generato. (I3ee0d, b/147913689)
  • Aggiungi funzioni di fabbrica per DynamicNavHostFragment (Icd515, b/175222619)
  • L'ID univoco di un NavBackStackEntry è ora esposto come parte della sua API pubblica. (Ie033a).
  • I campi name e argument e le funzioni di destrutturazione di NamedNavArgument sono ora pubblici. (N. 174, b/181320559)
  • Introdotta una nuova estensione NavBackStackEntry#provideToCompositionLocals che fornisce il NavBackStackEntry ai locali composizioni pertinenti. (N. 175, b/187229439)

Arg sicuri

  • Ora Safe Args genera un metodo fromSavedStateHandle() per ogni classe NavArgs. (N. 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)
    }
    
  • Gli argomenti sicuri sono stati aggiornati in modo che dipendono da KotlinPoet 1.8.0. (N. 172, b/183990444)

Cambiamenti del comportamento

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

Compatibilità con Compose

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

Correzioni di bug

  • È stato risolto il problema per cui i segnaposto degli argomenti finali avrebbero la precedenza sui link diretti con un suffisso esatto corrispondente. (N. 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. (N. 176, b/187443146)

Contributi esterni

  • Grazie simonschiller per il supporto di Safe Args che genera un metodo fromSavedStateHandle() per ogni classe NavArgs. (N. 122, b/136967621)
  • Grazie Bradleycorn per aver reso l'analisi degli argomenti enum dei link diretti senza distinzione tra maiuscole e minuscole. (N. 152, b/135857840)
  • Grazie osipxd per aver risolto un problema per cui i segnaposto degli argomenti finali avrebbero la precedenza sui link diretti con un suffisso esatto corrispondente. (N. 153, b/184072811)
  • Grazie tatocaster per aver aggiornato Safe Args in modo che dipenda da KotlinPoet 1.8.0. (N. 172, b/183990444)
  • Grazie jossiwolf per aver reso pubblici i campi name e argument e le funzioni distruttive di NamedNavArgument. (N. 174, b/181320559)
  • Grazie jossiwolf per aver introdotto una nuova estensione NavBackStackEntry#provideToCompositionLocals che offre NavBackStackEntry alla composizione locale pertinente. (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. (N. 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 alle API

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

Correzioni di bug

  • Ora NavHost funziona anche se non viene trovato un OnBackPressedDispatcherOwner, come nel caso dell'anteprima di NavHost. (I7d8b4)
  • Scrittura in Navigazione ora dipende da Navigazione 2.3.5 e risolve un problema quando si utilizza BackHandler all'interno di una destinazione NavHost. (I7e63b, b/182284739)

Versione 1.0.0-alpha09

10 marzo 2021

Viene rilasciato androidx.navigation:navigation-compose:1.0.0-alpha09. La versione 1.0.0-alpha09 contiene questi commit.

Modifiche alle 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

  • Scrittura della navigazione ora dipende da Navigazione 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 il LocalSavedStateRegistryOwner ComposeLocal con il NavBackStackEntry di quella 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

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

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

Versione 1.0.0-alpha05

13 gennaio 2021

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

Aggiornamento eseguito in modo da dipendere da Compose 1.0.0-alpha10.

Versione 1.0.0-alpha04

16 dicembre 2020

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

  • Aggiornamento per compatibilità con Compose 1.0.0-alpha09.

Versione 1.0.0-alpha03

2 dicembre 2020

Viene rilasciato androidx.navigation:navigation-compose:1.0.0-alpha03. 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'elaborazione della morte e della nuova creazione. (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

Viene rilasciato androidx.navigation:navigation-compose:1.0.0-alpha02. La versione 1.0.0-alpha02 contiene questi commit.

Modifiche alle API

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

Versione 1.0.0-alpha01

28 ottobre 2020

Viene rilasciato android.navigation:navigation-compose:1.0.0-alpha01. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

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 iniziale fornisce:

  • Un componibile NavHost che ti consente di creare il tuo grafico di navigazione tramite una connessione 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 la trasmissione di argomenti, l'aggiunta di link diretti alle destinazioni e la restituzione di risultati a destinazioni precedenti.
  • Componi helper specifici in rememberNavController() e currentBackStackEntryAsState() per consentire lo stato di sollevamento e il collegamento di NavController a elementi componibili esterni a NavHost (ad esempio una barra di navigazione in basso).

Per ulteriori informazioni, consulta la guida alla navigazione in Scrivi.

Versione 2.3.5

Versione 2.3.5

7 aprile 2021

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

Nuove funzionalità

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

Correzioni di bug

  • OnBackPressedCallbacks aggiunto a un supervisore con NavBackStackEntry come LifecycleOwner ora correttamente intercetta dopo che il ciclo di vita dell'attività è STOPPED, quindi STARTED (Iff94f, b/182284739)
  • L'analisi del dominio dei link diretti ora non fa distinzione tra maiuscole e minuscole, garantendo che www.example.com corrisponda a www.example.com e www.Example.com. Tieni presente che i nomi dei parametri di query sono comunque sensibili alle maiuscole. (N. 144, b/153829033)
  • È stato corretto un NullPointerException che poteva verificarsi quando una destinazione aveva più argomenti predefiniti senza valori null e si raggiungeva quella destinazione, eseguendo l'override solo di 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 del dominio dei link diretti. (N. 144, b/153829033)

Versione 2.3.4

Versione 2.3.4

10 marzo 2021

Viene rilasciato androidx.navigation:navigation-*:2.3.4. 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 del link diretto. Supporta sia il valore intero non elaborato sia i valori esadecimali preceduti da 0x. (N. 127, b/179166693)
  • android:defaultValue per un argomento con app:argType="float" ora supporta valori interi predefiniti, consentendoti di utilizzare android:defaultValue="0"invece di richiedere l'uso di 0.0. (N. 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 di setViewModelStore o setLifecycleOwner con lo stesso oggetto già impostato sarà ora una modalità autonoma (Idf491, b/177825470)
  • Safe-Args ora aggiunge le annotazioni di soppressione sui metodi corretti quando si utilizza Java. (I8fbc5, b/179463137)

Contributi esterni

  • Grazie JvmName per la richiesta di pull, in modo da garantire che gli argomenti ReferenceType possano ora essere analizzati correttamente quando vengono inviati come parte dell'URI di un link diretto. (N. 127, b/179166693)
  • Grazie tatocaster per la richiesta di pull che consente a defaultValue di un argomento con app:argType=”float” ora supporta valori predefiniti interi. (N. 117, b/173766247)

Versione 2.3.3

Versione 2.3.3

27 gennaio 2021

Viene rilasciato androidx.navigation:navigation-*:2.3.3. 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, per cui il passaggio a un'attività con un valore di risorsa di animazione 0 causava un errore di ResourceNotFoundException. (I7aedb, b/176819931)

Versione 2.3.2

Versione 2.3.2

2 dicembre 2020

Viene rilasciato androidx.navigation:navigation-*:2.3.2. 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 permetteva 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 il passaggio a un grafico di navigazione nidificato non creava una nuova istanza del grafico nello stack posteriore. (Ifc831).
  • È stato risolto un problema per cui l'utilizzo di navigate() con un popUpTo che rimuoveva l'ultima destinazione in un grafico di navigazione non interrompeva e rimuoveva immediatamente il grafico di navigazione stesso dallo stack posteriore. (I910a3)
  • Navigazione SafeArgs ora utilizza KotlinPoet versione 1.7.2 che aggiunge il supporto per la modalità API esplicita di Kotlin. (I918b5)
  • Ora NavHostFragment.findNavController(Fragment) controlla anche la visualizzazione dell'arredamento principale di un DialogFragment, oltre ai controlli esistenti della gerarchia dei frammenti e della gerarchia delle visualizzazioni dei frammenti. In questo modo puoi testare i frammenti di finestre 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'UI di navigazione e sono consigliate rispetto alle risorse di animazione predefinite. (b/167430145)
  • NavOptions ora esegue l'override del codice hash e dei metodi 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 aggrega più la riga restituita, 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, per garantire che NavigationUI sia in grado di aprire il riquadro a scomparsa anche quando utilizzi 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 artefatti 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 in base alle esigenze. Per saperne di più, consulta la sezione Navigare con i moduli delle 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 la sezione Navigazione di prova.
  • Restituzione di un risultato: il NavBackStackEntry associato a ogni destinazione nella pila di navigazione posteriore ora ti consente di accedere a un SavedStateHandle adatto all'archiviazione di piccole quantità di stati salvati che devono essere associati a una determinata voce dello stack posteriore. Per ulteriori informazioni, consulta la sezione Restituzione di 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 dei tipi di azioni e MIME nei link diretti: i link diretti sono stati ampliati per supportare i criteri app:action e app:mimeType, oltre ai app:uri disponibili in precedenza. NavController ora supporta la navigazione utilizzando qualsiasi combinazione di questi campi tramite la nuova classe NavDeepLinkRequest. Per ulteriori informazioni, vedi Navigare con NavDeepLinkRequest.

Problemi noti

  • Il supporto per le azioni dei link diretti e i tipi MIME non è ancora disponibile nell'unione di file manifest. Finché non avrai completato questa operazione, tutti gli elementi <intent-filter> generati dall'elemento <nav-graph> nel file 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 NullPointerException durante la sostituzione di un'istanza di una destinazione senza argomenti con un'altra istanza con argomenti con singleTop. (b/158006669)
  • Tutte le eccezioni di destination is unknown generate da NavController ora dispongono di informazioni di debug aggiuntive per determinare lo stato di NavController. (b/157764916)

Versione 2.3.0-beta01

20 maggio 2020

Vengono rilasciate le androidx.navigation:navigation-*:2.3.0-beta01. La versione 2.3.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui Lifecycle di NavBackStackEntry non veniva aggiornato correttamente dopo la morte del processo. (b/155218371)
  • OnDestinationChangedListener istanza registrata prima di chiamare setGraph() viene ora inviata correttamente alla destinazione ripristinata dopo la morte del processo. (b/155218371)
  • Quando utilizzi singleTop, gli argomenti aggiornati per NavBackStackEntry ora vengono aggiornati correttamente e inviati a tutte le istanze OnDestinationChangeListener. (b/156545508)

Aggiornamenti delle dipendenze

Versione 2.3.0-alpha06

29 aprile 2020

Viene rilasciato androidx.navigation:navigation-*:2.3.0-alpha06. (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 utilizzando qualsiasi combinazione di questi campi tramite la nuova classe NavDeepLinkRequest. (b/136573074, b/135334841)

Modifiche alle API

  • Ha ampliato notevolmente 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

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

Nuove funzionalità

  • Per le includezioni del grafico dinamico utilizzando <include-dynamic>, non è più necessario specificare app:graphPackage e ne verrà utilizzato uno predefinito aggiungendo il suffisso moduleName a applicationId dopo un punto. Se devi personalizzare graphPackage, ora è supportato un segnaposto ${applicationId}. (b/152696768)
  • Il file DSL di Navigation Graph Kotlin ora espone un Map defaultArguments per le azioni, rispecchiando la capacità di impostare valori predefiniti per gli 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à

  • Aggiunto il supporto per l'attività dei moduli di funzionalità e le destinazioni di frammenti nella DSL di navigazione Kotlin. (b/148969800)

Modifiche alle API

  • La classe DynamicExtras non utilizza più un pattern del builder e ora può essere creata direttamente. (aosp/1253671)
  • Ora DynamicActivityNavigator prende 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

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

Modifiche alle API

  • Anziché affidarsi alla 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 di ProGuard navigation-common-ktx ora mantengono correttamente solo le classi NavArgs in uso anziché tutte le istanze NavArgs. (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

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

Nuove funzionalità

  • NavBackStackEntry ora ti consente di accedere a una SavedStateHandle adatta all'archiviazione di piccole quantità di stato salvato che devono essere associati a una particolare voce dello stack posteriore. Consulta Restituire un risultato per un caso d'uso di esempio. (b/79672220)

Modifiche alle API

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

Correzioni di bug

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

Modifiche alle dipendenze

Versione 2.3.0-alpha01

5 febbraio 2020

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

Nuove funzionalità

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

Correzioni di bug

  • Da Navigazione 2.2.1: i link diretti senza parametri di query ora ignorano correttamente tutti i parametri di query anziché aggiungerli agli elementi {argument} finali o non corrispondono 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 richiesto. (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

Vengono rilasciate le androidx.navigation:navigation-*:2.2.2. La versione 2.2.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un IllegalStateException durante il collegamento diretto alla destinazione iniziale del grafico quando nella Attività erano 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, questa funzionalità era disponibile in Navigazione 2.3.0-alpha03. (b/150213558

Aggiornamenti delle dipendenze

Versione 2.2.1

Versione 2.2.1

5 febbraio 2020

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

Correzioni di bug

  • I link diretti senza parametri di query ora ignorano correttamente tutti i parametri di query anziché aggiungerli agli elementi {argument} finali o non corrispondono 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)
  • Ora il modulo navigation-common-ktx 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

Viene rilasciato androidx.navigation:navigation-*:2.2.0. 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 del grafico di navigazione nello stack posteriore. Il valore NavBackStackEntry restituito fornisce LifecycleOwner, ViewModelStoreOwner (lo stesso restituito da NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner basati sulla navigazione, oltre a fornire gli argomenti utilizzati per iniziare quella destinazione.
  • Integrazione del ciclo di vita ViewModel SavedState: SavedStateViewModelFactory è ora il valore di fabbrica 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 che contengono valori null sono ora facoltativi in caso di corrispondenza di 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 modificate le animazioni di dissolvenza predefinite utilizzate da navigation-ui in modo che corrispondano alle animazioni di dissolvenza modificate in 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 con l'analisi dei link diretti in cui i parametri facoltativi riceverebbero "@null" anziché null. (b/141613546)
  • Ora NavHostFragment ripristina correttamente il grafico dopo una modifica alla 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

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

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

Cambiamenti del comportamento

  • I parametri di query aggiuntivi vengono ora ignorati durante la corrispondenza dei link diretti anziché causare un errore di 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 navArgs() su Activity ora presenta 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'istruzione 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

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

Cambiamenti del comportamento

  • La chiamata a setViewModelStore() dopo la chiamata al numero setGraph ora comporta la chiamata a IllegalStateException. Questo valore deve sempre essere impostato da NavHost come parte della configurazione iniziale per garantire che tutte le istanze NavBackStackEntry abbiano uno spazio di archiviazione coerente per le istanze ViewModel. (aosp/1111821)

Correzioni di bug

  • È stato corretto un ConcurrentModificationException quando si utilizzavano ViewModel istanze collegate a più istanze ViewModelStore con ambito di grafico di navigazione diverso. (aosp/1112257).

Versione 2.2.0-alpha02

5 settembre 2019

Viene rilasciato androidx.navigation:navigation-*:2.2.0-alpha02. 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 con un valore predefinito o con parametri null sono ora facoltativi quando si crea una corrispondenza con i link diretti. (b/133273839)
  • Ora puoi chiamare NavController.getBackStackEntry(), passando l'ID di una destinazione o di un grafico di navigazione nello stack posteriore. Il valore NavBackStackEntry restituito fornisce LifecycleOwner, ViewModelStoreOwner (lo stesso restituito da NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner basati sulla navigazione, oltre a fornire gli argomenti utilizzati per iniziare quella 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)
  • NavInflater ora evita di chiamare getResourceName() inutilmente, accelerando i tempi di inflazione fino al 40%. (b/139213740)

Versione 2.2.0-alpha01

7 agosto 2019

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

Nuove funzionalità

  • SavedStateViewModelFactory è ora il valore di fabbrica predefinito utilizzato quando si utilizza by navGraphViewModels() o il costruttore ViewModelProvider con un valore ViewModelStoreOwner restituito da NavController.getViewModelStoreOwner(). (b/135716331)

Modifiche alle API

Correzioni di bug

  • NavHostFragment ora utilizza FragmentContainerView, per risolvere i problemi di ordinamento Z delle animazioni e l'invio di riquadri di finestre a Frammenti. (b/137310379)

Versione 2.1.0

Versione 2.1.0

5 settembre 2019

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

Modifiche importanti dalla versione 2.0.0

  • Definizione dell'ambito ViewModels in un grafico di navigazione: ora puoi creare ViewModel con ambito a livello di grafico di navigazione utilizzando il delegato della proprietà by navGraphViewModels() per gli utenti Kotlin utilizzando le librerie -ktx o utilizzando l'API getViewModelStoreOwner() aggiunta a NavController. Per ulteriori informazioni, consulta l'articolo Condividere i dati relativi all'interfaccia utente tra destinazioni.
  • Destinazioni di dialogo: ora puoi creare <dialog> destinazioni che mostreranno un DialogFragment quando navigate. NavHostFragment supporta le destinazioni delle finestre di dialogo per impostazione predefinita. Per ulteriori informazioni, consulta 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 raggiungere la destinazione. Per saperne di più, consulta Navigare utilizzando l'URI.
  • NavHostController: le API utilizzate specificatamente per la creazione di un NavHost personalizzato sono state spostate in NavHostController, consentendo alle implementazioni di collegare il proprio NavController agli host LifecycleOwner, OnBackPressedDispatcher e ViewModelStore.

Versione 2.1.0-rc01

7 agosto 2019

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

Modifiche alle API

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

Versione 2.1.0-beta02

19 luglio 2019

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

Correzioni di bug

  • È stata rimossa la dipendenza da jacoco involontaria, 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 utilizzi setupWithNavController() con un 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 dell'editor di navigazione. (b/133880955)

Modifiche alle API

  • L'API getViewModelStore() su NavController è stata deprecata a favore del nuovo metodo getViewModelStoreOwner() che restituisce un ViewModelStoreOwner. (aosp/987010)
  • L'implementazione di destinazioni di finestre mobili, come le destinazioni <dialog>, è stata generalizzata in un'interfaccia con indicatori, FloatingWindow, che ora sono implementate in 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)

Cambiamenti del comportamento

  • Ora la navigazione mantiene correttamente sincronizzato il proprio stato con ciò che viene visualizzato sullo schermo quando utilizzi una destinazione <dialog>. Di conseguenza, la navigazione ora apre automaticamente le destinazioni <dialog> quando apri una destinazione senza finestra di dialogo e senza attività, come una destinazione <fragment>. (b/134089818)

Correzioni di bug

  • Ora la navigazione elimina l'animazione che si verifica quando si ricrea l'attività durante la gestione di un link diretto, correggendo il flash visivo. (b/130362979)
  • È stato corretto un bug per cui la pila di navigazione posteriore non sarebbe sincronizzata quando si apriva un frammento durante l'aggiunta del frammento iniziale. (b/133832218)

Versione 2.1.0-alpha05

5 giugno 2019

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

Modifiche alle API

  • Le API relative 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 lo stack posteriore non era corretto dopo la navigazione per 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

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

Problemi noti

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

Nuove funzionalità

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

Cambiamenti del 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 rendere più chiaro che questo è il punto di ingresso corretto per l'aggiunta di navigatori personalizzati durante la creazione di sottoclassi di NavHostFragment. B/122802849
  • Un metodo hasDeepLink() è stato aggiunto a NavDestination per consentirti di verificare se una determinata Uri può essere gestita da quella destinazione o, nel caso di NavGraph, da qualsiasi destinazione nel grafico di navigazione. b/117437718

Correzioni di bug

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

Versione 2.1.0-alpha02

3 aprile 2019

Viene rilasciato androidx.navigation:*:2.1.0-alpha02. 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 alle API

  • Ora puoi aggiungere 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

  • Le destinazioni android:name per <activity> non vengono più analizzate in una classe al momento dell'inflazione, impedendo ClassNotFoundExceptions quando si utilizzano le 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 alle API

  • È stato aggiunto un nuovo metodo Navigation.createNavigateOnClickListener(NavDirections) in alternativa alla creazione di un listener di clic con un ID risorsa e un bundle. b/127631752
  • FragmentNavigator.instantiateFragment è deprecato. L'implementazione predefinita ora utilizza FragmentFactory per creare un'istanza 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, che risolve un problema con nomi dei pacchetti molto lunghi. b/123654948

Versione 2.0.0

Versione 2.0.0

14 marzo 2019

La navigazione 2.0.0 viene rilasciata senza modifiche da 2.0.0-rc02.

Versione 2.0.0-rc02

6 marzo 2019

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

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

Devi aver eseguito la migrazione ad AndroidX del progetto per poter utilizzare le release 2.X di Navigazione. 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 precedenti ad AndroidX di Navigatore, 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 gli argomenti sicuri, aggiungi il seguente classpath al tuo 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 da 1.0.0-rc02.

Versione 1.0.0-rc02

26 febbraio 2019

Questa è la seconda release candidata per la release stabile 1.0.0 di Navigation. Questa release contiene una serie di correzioni di bug.

Correzioni di bug

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

Versione 1.0.0-rc01

21 febbraio 2019

Questa è una release candidata 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

Cambiamenti del comportamento

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

Correzioni di bug

  • popBackStack() e navigateUp ora restituiscono correttamente false quando vengono inseriti l'ultima destinazione nello stack posteriore, correggendo una regressione introdotta in 1.0.0-beta01. B/123933201
  • La navigazione ora imposta correttamente ClassLoader durante il ripristino dello stato dell'istanza salvato, evitando problemi quando si utilizzano 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
  • Ora Safe Args 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.

Cambiamenti del comportamento

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

Correzioni di bug

  • Ora è possibile utilizzare Safe Args in moduli di libreria e funzionalità su tutte le versioni del plug-in Android Gradle. b/121304903
  • È stato corretto un problema di regressione che causava la compilazione di tutte le copie di una destinazione dalla parte superiore dello stack posteriore, anziché di una singola destinazione alla volta, con una singola operazione popBackStack(). b/123552990
  • Risolto un problema per cui lo stato FragmentNavigator veniva desincronizzato con lo stato di NavController, causando un IllegalStateException quando si tentava di ripristinare lo stack posteriore. 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 tramite un app:argType che punta a una classe interna statica nel formato .OuterClass$InnerClass. B/123736741
  • Il codice Java generato da Safe Args ora gestisce correttamente le azioni globali e le destinazioni con un alto grado di nidificazione. b/123347762

Versione 1.0.0-alpha11

23 gennaio 2019

Questa è una release di aggiornamento rapido di 1.0.0-alpha10 che corregge un problema di 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à

  • Gli utenti Kotlin ora possono utilizzare il delegato della proprietà by navArgs() per ottenere in modo lento 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

Cambiamenti del comportamento

  • I link diretti corrispondenti ora vengono orientati verso il link diretto con il maggior numero di argomenti corrispondenti. b/118393029
  • La chiamata di setGraph() su un NavController ora reimposta il back stack. 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 l'interruzione

  • Il metodo NavOptions.applyPopAnimationsToPendingTransition() per applicare animazioni pop a un'attività è stato spostato in ActivityNavigator. B/122413117
  • Safe Args ora evita la duplicazione di classi identiche per le azioni senza argomenti. Il tipo restituito per nessun metodo di argomento nelle classi NavDirections generate è ora NavDirections. B/123233147
  • Le classi Directions generate da Safe Args non hanno più un costruttore pubblico: dovresti 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

  • Ora NavDeepLinkBuilder gestisce correttamente più PendingIntent simultanei nella stessa destinazione utilizzando gli argomenti che passi per determinare l'univocità. b/120042732
  • Ora NavController gestisce correttamente le operazioni popBackStack() quando si utilizza un elemento NavHostFragment o altri frammenti secondari nidificati con uno stack posteriore. b/122770335
  • Ora NavigationUI 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
  • Ora 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 personalizzare la FragmentTransactions sull'FragmentManager di NavHostFragment. Dovresti usare sempre getChildFragmentManager(). B/112927148

Versione 1.0.0-alpha09

18 dicembre 2018

Questa release contiene modifiche all'API che provocano errori; consulta la sezione Modifiche che provocano un errore di seguito.

Abbiamo scelto di non continuare a sviluppare l'artefatto 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 nella Discussione sull'attività singola all'AndroidDevSummit 2018 e lavoreremo a documentazione aggiuntiva in particolare sui test con Navigazione.

Nuove funzionalità

  • Gli elementi MenuItem con menuCategory="secondary" non torneranno più nello stack indietro se utilizzati con i metodi NavigationUI. b/120104424
  • AppBarConfiguration ora ti consente di impostare un'istanza OnNavigateUpListener di riserva che verrà chiamata quando navController.navigateUp() restituirà false. b/79993862 b/120690961

Modifiche che provocano l'interruzione

  • Quando utilizzi un <argument> con un argType="reference", Navigazione non analizza più il riferimento, fornendo invece l'ID risorsa non elaborato. b/111736515
  • Ora onNavDestinationSelected() torna alla destinazione iniziale del grafico di navigazione per impostazione predefinita, rendendole coerenti con i metodi setup. Aggiungi menuCategory="secondary" a MenuItem per evitare di aprire la pila posteriore. aosp/852869
  • I metodi fromBundle() delle classi Args generate ora assumono un valore Bundle non nullo invece di un valore Bundle con valore nullo aosp/845616

Correzioni di bug

  • Ora gli argomenti vengono analizzati correttamente dai link diretti come il valore argType corretto anziché 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 Gradle 3.4 Canary 4 e versioni successive b/119662045

Versione 1.0.0-alpha08

6 dicembre 2018

Questa release contiene modifiche all'API che provocano errori; consulta la sezione Modifiche che provocano un errore di seguito.

Nuove funzionalità

  • Le etichette di destinazione, se utilizzate con i metodi NavigationUI, ora sostituiranno automaticamente {argName} istanze 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 l'interruzione

  • OnNavigatedListener è stato rinominato OnDestinationChangedListener b/118670572
  • Ora OnDestinationChangedListener passa anche il Bundle degli argomenti aosp/837142
  • Gli attributi app:clearTask e app:launchDocument e i 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 qualsiasi flag Intent.FLAG_ACTIVITY_ aosp/828140
  • NavController.onHandleDeepLink è stato rinominato handleDeepLink aosp/836063
  • Molti metodi e classi non destinati alla creazione di sottoclassi, ad esempio NavOptions, NavInflater, NavDeepLinkBuilder e AppBarConfiguration, sono stati creati final aosp/835681
  • Il metodo NavHostFragment.setGraph() deprecato è stato rimosso aosp/835684
  • Il metodo NavigationUI.navigateUp(DrawerLayout, NavController) deprecato è 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 per NavGraphNavigator non richiede più Context aosp/835340
  • NavigatorProvider è ora una classe, anziché un'interfaccia. L'elemento NavigatorProvider restituito da getNavigatorProvider() non ha modificato la sua funzionalità. aosp/830660
  • L'utente NavDestination.navigate() è stato rimosso. Chiama navigate() su 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. Potresti usare un OnBackPressedCallback per intercettare le pressioni del pulsante Indietro e chiamare navController.popBackStack(). aosp/833716

Correzioni di bug

  • popUpTo ora funziona in modo coerente quando la destinazione è un elemento <navigation> b/116831650
  • Sono stati corretti una serie di bug che generavano un 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 richiamando toString() b/120161365

Arg sicuri

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

Versione 1.0.0-alpha07

29 ottobre 2018

Nuove funzionalità

Modifiche che provocano l'interruzione

  • Il modulo navigation-testing-ktx è stato integrato in navigation-testing artifact e non verrà più pubblicato.
  • L'artefatto navigation-testing ora ha una dipendenza dalla libreria standard Kotlin. L'API è stata modificata per essere più coerente con le convenzioni Kotlin, ma puoi continuare a utilizzarla per i test scritti in Java.
  • I grafici di navigazione registrati nel file manifest dei metadati non sono più supportati. b/118355937
  • Le azioni non possono più essere associate 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 l'arresto anomalo che si verificava dopo le modifiche alla configurazione quando si utilizzano navigatori personalizzati. b/110763345

Arg sicuri

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

Versione 1.0.0-alpha06

20 settembre 2018

Nuove funzionalità

Modifiche alle API

  • Modifica di interruzione: il metodo navigate() di navigazione ora richiede 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

  • Ora i corsi Directions di destinazione di navigazione estendono la classe Directions del genitore, 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

  • Correggere un bug che causava un comportamento errato del backstack. b/111907708
  • È stato corretto un bug in equals() di classi Args generate. b/111450897
  • Correggi un errore di build in Safe Args. b/109409713
  • Correggi una conversione da identificatori di risorsa a nomi Java b/111602491
  • Risolvere i problemi segnalati dai messaggi di errore relativi ai valori null nel plug-in Safe Args.
  • Aggiungi annotazioni con valore nullo mancanti.

Versione 1.0.0-alpha04

19 luglio 2018

Navigazione 1.0.0-alpha04 e il plug-in Gradle di Safe Args associato contengono una serie di modifiche dell'API, modifiche del 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 figlio vengano sbloccati prima che venga sbloccato il NavController esterno b/111345778

Arg sicuri

  • Modifica che provoca un errore: il valore di app:type è stato modificato in app:argType per evitare conflitti con altre librerie come ConstraintLayout 2.0.0-alpha1 b/111110548
  • Ora è possibile fare clic sui messaggi di errore di Safe Args b/111534438
  • Le classi Args ora confermano che gli attributi NonNull in realtà non sono nulli b/111451769
  • Sono state aggiunte altre annotazioni NonNull ai corsi generati da NavDirections e Args b/111455455 b/111455456

Correzioni di bug

  • È stato risolto un problema relativo al pulsante Indietro del sistema dopo aver creato link diretti a una destinazione di frammento b/111515685

Versione 1.0.0-alpha03

12 luglio 2018

Navigazione 1.0.0-alpha03 e il plug-in Gradle di Safe Args associato contengono una serie di modifiche dell'API, modifiche del comportamento e correzioni di bug.

Modifiche al comportamento / API

  • È stato aggiunto un metodo NavigationUI.setupWithNavController per Google Toolbar b/109868820
  • È stato aggiunto un metodo NavigationUI.setupWithNavController per CollapsingToolbarLayout b/110887183
  • popBackStack() ora restituisce false quando lo stack posteriore è vuoto o quando l'ID destinazione specificato non è nello stack posteriore 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

Arg sicuri

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

Correzioni di bug

  • Sono stati risolti i problemi durante la navigazione durante i metodi del ciclo di vita dei frammenti b/109916080
  • Sono stati risolti i problemi che si verificavano più volte durante la navigazione tra grafici nidificati b/110178671
  • Sono stati risolti i problemi relativi all'utilizzo di setPopUpTo con la prima destinazione nel grafico b/109909461
  • È stato risolto il problema per cui tutti i valori app:defaultValue venivano trasmessi 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

Cambiamenti del comportamento

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

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

Correzioni di bug

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

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

  • È stato corretto un IllegalArgumentException quando si 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 di sovrapposizione dei frammenti durante l'utilizzo di launchSingleTop. B/79407969

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

  • NavigazioneUI ora evidenzierà l'elemento corretto quando utilizzi un grafico nidificato come MenuItem. B/109675998

Modifiche alle API

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

  • L'attributo launchDocument per le azioni e l'API associata in NavOptions è stato deprecato. 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.