Navigation
androidx.navigation
androidx.navigation.fragment
androidx.navigation.ui
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
11 décembre 2024 | 2.8.5 | - | - | 2.9.0-alpha04 |
Déclarer des dépendances
Pour ajouter une dépendance à Navigation, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.
Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle
de votre application ou module :
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.8.4" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.4" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
Pour ajouter Safe Args à votre projet, incluez le classpath
suivant dans votre fichier build.gradle
de premier niveau :
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Vous devez également appliquer l'un des deux plug-ins disponibles.
Pour générer un code en langage Java adapté aux modules en Java ou mixant du Java et du Kotlin, ajoutez la ligne suivante au fichier build.gradle
de votre application ou module :
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Sinon, pour générer un code Kotlin adapté aux modules exclusivement en Kotlin, ajoutez la ligne suivante :
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
android.useAndroidX=true
doit figurer dans votre fichier gradle.properties
, tel qu'indiqué sur la page Migrer vers AndroidX.
Pour en savoir plus sur l'utilisation des extensions Kotlin, consultez la documentation sur les extensions KTX.
Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de build.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 2.9
Version 2.9.0-alpha04
11 décembre 2024
Publication d'androidx.navigation:navigation-*:2.9.0-alpha04
. La version 2.9.0-alpha04 contient ces commits.
Nouvelles fonctionnalités
- Les API avec sûreté du typage qui n'étaient auparavant accessibles que via des méthodes
reified
, c'est-à-dire :composable<YourScreen>
dispose désormais de versions non réifiées qui prennent directement une instanceKClass
.(Ia7eed, Id2879, Ibf244, I17d79, Id09d2, I54696, Ia47be, I93281, Ic1bf0, Iba4ee, If56a5, Icf969, I67644, I6f788, b/382094941, b/366291612, b/381938808)
Le tableau ci-dessous fournit les API reifiées et KClass.
réifié | KClass |
---|---|
composable<TestClass> { } |
composable(TestClass::class) { } |
navigation<NestedGraph>(startDestination = TestClass::class) |
navigation(route = NestedGraph::class, startDestination = TestClass::class) |
dialog<TestClass> {} |
dialog(TestClass::class) {} |
navDeepLink<TestClass>(baseUri) |
navDeepLink(TestClass::class, baseUri) |
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) |
NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri) |
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } |
NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { } |
navController.getBackStackEntry<TestClass>() |
navController.getBackStackEntry(TestClass::class) |
navController.popBackStack<TestClass>(true) |
navController.popBackStack(TestClass::class, true) |
navController.clearBackStack<TestClass>() |
navController.clearBackStack(TestClass::class) |
NavOptions.setPopUpTo<TestClass>() |
NavOptions.setPopUpTo(TestClass::class) |
navOptions { popUpTo<TestClass> {...} } |
navOptions { popUpTo(TestClass::class) {...} } |
NavGraph.setStartDestination<TestClass>() |
NavGraph.setStartDestination(TestClass::class) |
NavGraph.findNode<TestClass>() |
NavGraph.findNode(TestClass::class) |
backStackEntry.toRoute<TestClass>() |
backStackEntry.toRoute(TestClass::class) |
savedStateHandle.toRoute<TestClass>() |
savedStateHandle.toRoute(TestClass::class) |
Modifications apportées à l'API
- La surcharge
NavGraph.setStartDestination
spécifique à Kotlin pour la sûreté de typage est masquée des sources Java. (Ic640c, b/364634035)
Correction de bugs
- À partir de Navigation
2.8.5
: correction d'un problème dans lequelNavHost
pouvait générer une exception dansPredictiveBackHandler
si la pile "Retour" était réduite à une seule entrée et qu'un retour système était déclenché dans le même frame. (I1a429, b/375343407) - À partir de Navigation
2.8.5
: correction deNavDestination
NullPointerException
lors de la mise à jour dustartDestination
d'un graphique. (I99421, b/361560785)
Version 2.9.0-alpha03
13 novembre 2024
Publication d'androidx.navigation:navigation-*:2.9.0-alpha03
. La version 2.9.0-alpha03 contient ces commits.
Nouvelles fonctionnalités
- La sécurité de type de navigation prend désormais en charge les classes de valeurs en tant que parcours ou en tant que type d'argument d'un parcours. (I9344a, b/374347483)
Correction de bugs
- Correction d'une erreur
ConcurrentModificationException
pouvant se produire lorsqu'unLifecycleObserver
associé à unNavBackStackEntry
déclenche une modification de la pile "Retour" lorsque l'LifecycleOwner
hôte, tel que l'activité ou le fragment contenant, modifie son état de cycle de vie. (Ia9494)
Version 2.9.0-alpha02
30 octobre 2024
Publication d'androidx.navigation:navigation-*:2.9.0-alpha02
. La version 2.9.0-alpha02 contient ces commits.
Contribution externe
- Nouvelle méthode
NavController.handleDeepLink(request: NavDeepLinkRequest)
courante. Merci Konstantin Tskhovrebov. (I3e228)
Version 2.9.0-alpha01
16 octobre 2024
Publication d'androidx.navigation:navigation-*:2.9.0-alpha01
. La version 2.9.0-alpha01 contient ces commits.
Nouvelles fonctionnalités
- Les navigateurs personnalisés peuvent désormais indiquer que leurs destinations implémentent l'interface
SupportingPane
, ce qui indique auNavController
que ces destinations s'afficheront à côté d'autres destinations. Grâce à cette interface, plusieurs destinations peuvent êtreRESUMED
en même temps, par exemple. (Id5559) - À partir de Navigation
2.8.3
: ajout de nouvelles vérifications lint pour les modulesnavigation-common
,navigation-runtime
etnavigation-compose
afin d'identifier les routes sécurisées par type qui ne sont pas correctement annotées avec@Serializable
. Cette vérification s'applique à toutes les fonctions d'extensionNavGraphBuilder
etNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - À partir de Navigation
2.8.3
: ajout de nouvelles vérifications lint pour les modulesnavigation-common
,navigation-runtime
etnavigation-compose
afin d'identifier les routes sécurisées par type avec des arguments Enum qui ne sont pas correctement annotés avec@Keep
. Cette vérification s'applique à toutes les fonctions d'extensionNavGraphBuilder
etNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Nouveaux comportements
- Toute tentative d'utilisation d'un
NavController
qui a déjà étéDESTROYED
génère désormais uneIllegalStateException
. (I520da, b/369616172)
Correction de bugs
- Mise à jour de l'exception "Classe Enum introuvable" pour suggérer d'utiliser l'annotation
@Keep
au cas où la classe Enum serait effacée dans les builds minifiés. (I90e79, b/358137294)
Problèmes connus
- Un problème lié aux nouvelles règles lint ajoutées dans
Navigation 2.8.*
provoque une erreurObsolete custom lint check
lors de l'exécution de lint avec le plug-in Android Gradle 8.4 ou version ultérieure. (b/368070326, b/371463741)
Version 2.8
Version 2.8.5
11 décembre 2024
Publication d'androidx.navigation:navigation-*:2.8.5
. La version 2.8.5 contient ces commits.
Correction de bugs
- Correction d'un problème qui pouvait entraîner l'affichage d'une exception dans
PredictiveBackHandler
si la pile "Retour" était réduite à une seule entrée et qu'un retour système était déclenché dans le même frame.NavHost
(I1a429, b/375343407) - Correction de
NavDestination
NullPointerException
lors de la mise à jour de l'startDestination
d'un graphique. (I99421, b/361560785) - Correction d'un problème qui entraînait une animation de mise à l'échelle inattendue lors de l'utilisation de Navigation Compose et de l'appel de navigation dans le même frame que la fin de l'animation actuelle. (I26cb1, b/353294030)
- Correction d'une erreur
ConcurrentModificationException
pouvant se produire lorsqu'unLifecycleObserver
associé à unNavBackStackEntry
déclenche une modification de la pile "Retour" lorsque l'LifecycleOwner
hôte, tel que l'activité ou le fragment contenant, modifie son état de cycle de vie. (Ia9494)
Version 2.8.4
13 novembre 2024
Publication d'androidx.navigation:navigation-*:2.8.4
. La version 2.8.4 contient ces commits.
Nouvelles fonctionnalités
- À partir de Navigation
2.9.0-alpha03
: la sécurité de type de navigation est désormais compatible avec la classe de valeurs en tant que parcours ou en tant que type d'argument d'un parcours (I9344a, b/374347483).
Correction de bugs
- À partir de Navigation
2.9.0-alpha01
: toute tentative d'utilisation d'unNavController
qui a déjà étéDESTROYED
génère désormais une exceptionIllegalStateException
. (I520da, b/369616172)
Version 2.8.3
16 octobre 2024
Publication d'androidx.navigation:navigation-*:2.8.3
. La version 2.8.3 contient ces commits.
Nouvelles fonctionnalités
- Ajout de nouvelles vérifications lint pour les modules
navigation-common
,navigation-runtime
etnavigation-compose
afin d'identifier les routes sécurisées par type qui ne sont pas correctement annotées avec@Serializable
. Cette vérification s'applique à toutes les fonctions d'extensionNavGraphBuilder
etNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Ajout de nouvelles vérifications lint pour les modules
navigation-common
,navigation-runtime
etnavigation-compose
afin d'identifier les routes sécurisées par type avec des arguments Enum qui ne sont pas correctement annotés avec@Keep
. Cette vérification s'applique à toutes les fonctions d'extensionNavGraphBuilder
etNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Correction de bugs
- Correction d'un problème qui entraînait une erreur
Obsolete custom lint check
lorsque les nouvelles règles lint ajoutées dansNavigation 2.8.*
étaient exécutées avec le plug-in Android Gradle 8.4 ou version ultérieure. (I1be3d, b/368070326, b/371463741)
Problèmes connus
- La vérification lint de navigation génère une erreur de vérification lint personnalisée obsolète lorsque vous tentez d'exécuter lint avec Lint 16 (AGP 8.7) ou version ultérieure. (b/371926651)
Version 2.8.2
2 octobre 2024
Publication d'androidx.navigation:navigation-*:2.8.2
. La version 2.8.2 contient ces commits.
Nouvelles fonctionnalités
- La sécurité de type de navigation est désormais compatible avec les classes Serializable qui incluent un
Double
,Double?
,DoubleArray
,DoubleArray?
,List<Double>
etList<Double>?
, sans nécessiter deNavType
personnalisé. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
Correction de bugs
- Amélioration du message d'erreur lorsque Navigation ne parvient pas à mapper l'argument d'un itinéraire à un
NavType
. Le nouveau message d'erreur contient le nom de l'argument, son nom complet et celui de l'itinéraire. (Id8416, b/346264232)
Version 2.8.1
18 septembre 2024
Publication d'androidx.navigation:navigation-*:2.8.1
. La version 2.8.1 contient ces commits.
Nouvelles fonctionnalités
- Ajout d'une règle lint pour garantir l'utilisation de la fonction
popBackStack
qui accepte un type de classe réifié lorsque vous essayez depopBackStack
à l'aide d'API sécurisées par type. (Ief161, b/358095343)
Correction de bugs
- La navigation nécessite désormais que le parcours transmis au
startDestination
d'unNavGraph
contienne les valeurs de tous les arguments obligatoires, y compris les arguments non nullables et sans valeur par défaut. (I18e74, b/362594265) - Les arguments sécurisés de navigation prennent désormais en charge les chaînes non nullables, de sorte que les valeurs "null" soient analysées et stockées dans le bundle telles quelles. Cela s'écarte du comportement existant, où les valeurs "null" sont analysées dans un objet null. Cette modification ne s'applique qu'aux types de chaîne non nullables. Les chaînes nullables restent inchangées. (I08b4a, b/348936238)
- Vous ne pouvez plus accéder à un
NavDestination
via un lien profond, sauf via un lien profond ajouté explicitement à la destination. Cela signifie également que vous ne pouvez accéder à l'itinéraire d'une destination qu'avec la surcharge de la fonction de navigation qui prend un itinéraire de chaîne. Cela corrige une faille qui permettait d'utiliser un lien profond vers une destination potentiellement protégée. (Ie30e6)
Mise à jour de la dépendance
- Navigation Safe Args dépend désormais de Kotlin 1.9.24, et non de Kotlin 2.X, ce qui garantit que les développeurs ne sont pas obligés de mettre à jour. (a4129a)
- Navigation Compose dépend désormais de Compose
1.7.2
.
Version 2.8.0
4 septembre 2024
Publication d'androidx.navigation:navigation-*:2.8.0
. La version 2.8.0 contient ces commits.
Changements importants depuis la version 2.7.0
Sûreté du typage dans le DSL Kotlin de navigation
- Navigation fournit désormais la sûreté du typage pour le DSL Kotlin (utilisé par Navigation Compose) à l'aide de la sérialisation Kotlin. Vous pouvez ainsi définir des destinations dans votre graphique de navigation via des objets et des classes de données sûrs:
// 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)
}
}
Pour en savoir plus, consultez l'article de blog Navigation Compose rencontre la sûreté du typage.
Navigation Compose Prévision du Retour
- Navigation Compose est désormais compatible avec la prévisualisation du Retour dans l'application via les nouvelles API
SeekableTransitionState
de compose-animation. Vous pouvez ainsi utiliser le geste Retour pour afficher la destination précédente avec votre transition personnalisée avant de décider de valider la transaction via le geste terminé ou de l'annuler.
Composable de fragment de navigation
- Ajout d'un nouvel artefact
navigation-fragment-compose
qui inclut une alternativeComposableNavHostFragment
àNavHostFragment
qui vous permet d'ajouter des destinations composables à vos fichiers XML de navigation. Chaque destinationcomposable
doit être exprimée sous la forme d'une méthode@Composable
de niveau supérieur sans argument, dont le nom complet est utilisé comme attributandroid:name
sur chaque destination. Lorsque vous accédez à l'une de ces destinations, un fragment contenant est créé pour afficher le contenu du composable.
// 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" />
Autres changements
- Navigation Compose dépend désormais de Compose 1.7.0.
- Navigation fournit désormais une nouvelle classe
CollectionNavType<T>
, une sous-classe deNavType<T>
pour les arguments basés sur des collections tels que les listes, les tableaux et les cartes. Tous les tableauxNavType
par défaut (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
etStringArrayType
) héritent désormais de cette nouvelle classe. NavType
est désormais compatible avec les listes de types Int, String, Boolean, Float et Long.
Version 2.8.0-rc01
21 août 2024
Publication d'androidx.navigation:navigation-*:2.8.0-rc01
. La version 2.8.0-rc01 contient ces commits.
Correction de bugs
- Correction du plantage de navigation lors de la transmission de classes Enum de niveau supérieur en tant qu'arguments sécurisés. (I0ba76, b/358137294)
- Navigation 2.8 fonctionne désormais correctement avec le SDK 34 et ne passera pas au SDK 35 avant la version 2.9, avec le reste des bibliothèques AndroidX. (b/358798728)
Version 2.8.0-beta07
7 août 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta07
. La version 2.8.0-beta07 contient ces commits.
Problèmes connus
- En raison de b/358137294, seuls les énumérations imbriquées dans une autre classe sont prises en charge par défaut. Les énumérations de niveau supérieur seront prises en charge dans la prochaine version.
Correction de bugs
- Lorsque vous accédez à des destinations en double ou partagées, la navigation donne la priorité à la destination la plus proche de l'emplacement actuel dans le graphique. (Ic89a4, b/352006850)
- La navigation dans les Safe Args a maintenant ajouté un nouveau
NavType.EnumType
. Cela signifie que les typesEnum
ne nécessitent plus deNavType
personnalisés. Notez que leSerialName
deEnum
doit être le nom complet par défaut. (I66d22, b/346475493) - La navigation dans les arguments sécurisés a ajouté la prise en charge intégrée des types d'arguments nullables,y compris
Int?
,Long?
,Float?
,Boolean?
etEnum<*>?
. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - Le
startDestination
deNavGraph
utilisera désormais les valeurs d'argument par défaut si la routestartDestination
transmise àNavGraph
est exactement égale àstartDestination.route
. (I13762, b/354046047)
Version 2.8.0-beta06
24 juillet 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta06
. La version 2.8.0-beta06 contient ces commits.
Correction de bugs
- Correction d'un problème qui empêchait les vérifications lint
WrongStartDestinationType
de rechercher des objets Companion sur le type de classe transmis, ce qui empêchait lint de détecter l'erreur. (I92b09)
Version 2.8.0-beta05
10 juillet 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta05
. La version 2.8.0-beta05 contient ces commits.
Correction de bugs
- Correction du plantage de la navigation
singleTop
lorsque lesNavGraphs
imbriquées partagent le même itinérairestartDestination
. (I17b94, b/294408596)
Version 2.8.0-beta04
26 juin 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta04
. La version 2.8.0-beta04 contient ces commits.
Correction de bugs
- La navigation est désormais compatible avec les chaînes vides dans les arguments de chemin d'accès. (Ic5dbd, b/339481310)
- Amélioration du message d'erreur pour les sérialiseurs personnalisés déclarés directement sur les champs de classe via
@Serializable(with =...)
afin de préciser qu'il s'agit actuellement d'une fonctionnalité non prise en charge. (I052b0, b/341319151) - L'API de test
SavedStateHandleFactory
peut désormais être utilisée dans les tests autres qu'Android, mais Robolectric doit prendre en charge l'analyse des arguments avec les bundles. (I76cdc, b/340966212) - Correction du plantage lors de la restauration de l'état lors de la reprise de l'application après la fin du processus avec la navigation avec sûreté du typage dans Compose. (Ia8f38, b/341801005)
- Correction d'un problème dans Navigation Compose. Après l'annulation du geste de prévisualisation du Retour, l'
NavBackStackEntry
à laquelle l'utilisateur revient ne revient jamais à l'état de cycle de vieRESUMED
. Cela garantit également que la destination de retour s'anime correctement au lieu de se caler en place après un balayage. (I97a0c, b/346608857) - Lorsque vous utilisez le Retour prédictif avec Navigation Compose, la destination qui est affichée aura désormais l'ordre Z approprié et s'animera correctement au-dessus de la destination entrante. (I2077b, b/345993681)
Version 2.8.0-beta03
12 juin 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta03
. La version 2.8.0-beta03 contient ces commits.
Modifications apportées à l'API
CollectionNavType
dispose d'une nouvelle méthodeemptyCollection()
abstraite. Forcez cette valeur pour gérer une collection vide transmise en tant qu'argument. (Ie4d84, b/341723133)
Correction de bugs
- Ajout de documentation sur
NavType.serializeAsValue
etserializeAsValues
pour souligner que les sorties finales doivent être encodées en URI. (Ida6bd, b/344943214) - Correction du plantage qui se produisait lors de l'appel de
toRoute<T>
avec un argumentCollectionNavType
nul. Lorsque vous naviguez avec unCollectionNavType
nul, l'argument de sortie correspond à la valeur par défaut déclarée sur votre classe Serializable ou à la valeur de retour deemptyCollection()
en l'absence de valeur par défaut. (I84158, Id630f, b/342672856)
Version 2.8.0-beta02
29 mai 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta02
. La version 2.8.0-beta02 contient ces commits.
Correction de bugs
- Correction du plantage de
ClassCastException
lors de l'utilisation deNavBackStackEntry.toRoute
avec unNavType
personnalisé nullable. (I1c29b, b/342239473) - Correction des problèmes de restauration de l'état de la pile "Retour" de navigation qui se produisaient lors de la tentative de restauration d'une entrée de pile "Retour" inaccessible via l'ID de la destination actuelle. Étant donné que les routes sont basées sur des ID, les destinations créées avec des routes ont également été affectées. Cela corrige également un plantage causé par l'appel de
clearBackStack()
qui présentait le même problème sous-jacent. (I423c3, b/339908057)
Version 2.8.0-beta01
14 mai 2024
Publication d'androidx.navigation:navigation-*:2.8.0-beta01
. La version 2.8.0-beta01 contient ces commits.
Modifications apportées à l'API
SavedStateHandle.toRoute()
accepte désormais un paramètretypeMap
pour les types d'arguments personnalisés. (Ie39fb, b/339026523)- Ajout d'une API de test à
navigation-testing
pour créer unSavedStateHandle
à partir d'un objet Serializable Kotlin. (Id4867, b/339080702)
Correction de bugs
- Les documents de paramètres manquants pour les fonctions DSL Kotlin de Navigation ont été ajoutés. (I26a36)
Version 2.8.0-alpha08
1er mai 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha08
. La version 2.8.0-alpha08 contient ces commits.
Safe Args dans Navigation Compose
- Les travaux de prise en charge de la sûreté du typage au moment de la compilation pour Navigation Compose et les utilisateurs du DSL Kotlin de navigation basé sur la sérialisation Kotlin sont terminés. Les API précédemment expérimentales sont désormais stables. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
Cette fonctionnalité utilise la sérialisation Kotlin pour vous permettre de définir des destinations dans votre graphique de navigation via des objets et des classes de données sécurisés par type:
// 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)
}
}
Pour en savoir plus, consultez l'article de blog Navigation Compose rencontre la sûreté du typage.
Nouvelles fonctionnalités
- L'artefact
navigation-fragment-compose
fournit désormais une compositionLocalFragment
locale pour les méthodes composables dans unComposableFragment
. (If35e5) NavType
est désormais compatible avec les listes de types Int, String, Boolean, Float et Long. (I4b6dd, Ia914c, b/188693139)
Version 2.8.0-alpha07
17 avril 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha07
. La version 2.8.0-alpha07 contient ces commits.
Nouvelles fonctionnalités
Ajoute un artefact
navigation-fragment-compose
qui inclut une alternativeComposableNavHostFragment
àNavHostFragment
qui vous permet d'ajouter des destinationscomposable
à vos fichiers XML de navigation. Chaque destinationcomposable
doit être exprimée sous la forme d'une méthode@Composable
de niveau supérieur sans argument, dont le nom complet est utilisé comme attributandroid:name
sur chaque destination. Lorsque vous accédez à l'une de ces destinations, un fragment contenant est créé pour afficher le contenu du composable. (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" />
Modifications apportées à l'API
- La prise en charge de Safe Args dans Navigation Compose à l'aide d'une approche basée sur la sérialisation Kotlin a continué. Ces API ne sont pas finalisées et sont marquées par l'annotation
ExperimentalSafeArgsApi
. Cette annotation sera supprimée lorsque l'ensemble de la surface de l'API sera finalisé dans une prochaine version. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
Version 2.8.0-alpha06
3 avril 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha06
. La version 2.8.0-alpha06 contient ces commits.
Modifications apportées à l'API
- La prise en charge de Safe Args dans Navigation Compose à l'aide d'une approche basée sur la sérialisation Kotlin a commencé. Ces API ne sont pas terminées et sont marquées par l'annotation
ExperimentalSafeArgsApi
. Cette annotation sera supprimée lorsque l'ensemble de la surface de l'API sera finalisé dans une prochaine version. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
Correction de bugs
NavHost
utilise désormaisAlignment.TopStart
comme argument contentAlignment par défaut. Cela le met en conformité avec la valeur par défaut deAnimatedContent
et corrige certaines instances d'échelle inattendue à partir de la transition du centre. (I09e72, b/330111602)- Lorsque vous effectuez le geste de prévisualisation du Retour lorsque vous utilisez Navigation Compose,
NavHost
termine désormais correctement la transition personnalisée au lieu de s'arrêter immédiatement. (I99017, b/327292110)
Version 2.8.0-alpha05
20 mars 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha05
. La version 2.8.0-alpha05 contient ces commits.
Nouvelles fonctionnalités
- Vous pouvez désormais transmettre des arguments à
startDestination
deNavGraph
directement dans le routagestartDestination
sans vous appuyer surdefaultValue
. Cela s'applique également auxstartDestinations
NavGraph
imbriqués. (I0e0b5, b/109505019, b/188693139)
Modifications apportées à l'API
- Ajout d'une nouvelle classe abstraite
CollectionNavType<T>
, une sous-classe deNavType<T>
pour les arguments basés sur des collections telles que les listes, les tableaux et les cartes. (Ic6d63, b/188693139) - Tous les tableaux
NavType
par défaut (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
etStringArrayType
) sont désormais de typeCollectionNavType
. (Idcf79, b/188693139) NavType
fournit désormais une nouvelle APIvalueEquals
ouverte qui détermine si deux valeurs du même type sont égales. (I6cb97, b/327229511)
Correction de bugs
- Les paramètres de requête dans les liens profonds acceptent désormais les valeurs sous la forme de crochets autour du nom de l'argument (par exemple,
{argName}
) en tant que valeurs valides pour lesNavTypes
basés sur des chaînes. Cela permet de résoudre un problème où une telle valeur était considérée comme non valide (ou absence de valeur) pour tous les types. (I18302, b/327274038) - Les fonctions
NavController
compatibles avec les routes telles quenavigate
oupopBackStack
peuvent désormais faire correspondre correctement les routes remplies d'arguments de tableauNavTypes
. (Iea805, b/327229511)
Version 2.8.0-alpha04
6 mars 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha04
. La version 2.8.0-alpha04 contient ces commits.
Nouvelles fonctionnalités
- Vous pouvez désormais spécifier le
SizeTranform
pour vos transitions dans Navigation Compose en les définissant lors de l'initialisation des fonctionscomposable
et/ounavigation
. (I91062, b/296912651)
Correction de bugs
- Correction d'un problème qui empêchait
NavHost
dans Navigation Compose d'afficher correctement la transition lors de l'utilisation de la touche Retour du système sans geste. (Iceeae, b/325998468)
Version 2.8.0-alpha03
21 février 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha03
. Liste des commits de la version 2.8.0-alpha03
Modifications apportées à l'API
NavBackStackEntry.savedStateHandle
est désormais marqué comme@MainThread
, car il utilise du code qui doit se trouver dans le thread principal de toute façon. (Ibb988, b/299523245)
Correction de bugs
- Correction d'un problème dans Navigation qui entraînait la conversion trop rapide des ViewModels
NavGraph
enDESTROYED
, car l'ViewModel
de l'entrée associée ne faisait pas partie de l'état enregistré. (Ib6bb7, b/317581849)
Mise à jour de la dépendance
- Navigation Compose dépend désormais de Compose 1.7.0-alpha03.
Version 2.8.0-alpha02
7 février 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha02
. Liste des commits de la version 2.8.0-alpha02
Nouvelles fonctionnalités
- Navigation Compose est désormais compatible avec la prévisualisation du Retour dans l'application via les nouvelles API
SeekableTransitionState
de compose-animation. Vous pouvez ainsi utiliser le geste Retour pour afficher la destination précédente avec votre transition personnalisée avant de décider de valider la transaction via le geste terminé ou de l'annuler. (I8b8e9)
Version 2.8.0-alpha01
24 janvier 2024
Publication d'androidx.navigation:navigation-*:2.8.0-alpha01
. Liste des commits de la version 2.8.0-alpha01
Correction de bugs
- Correction d'une fuite
BackStackState
où plusieurs appelssaveState
sur une destination entraînaient l'enregistrement de plusieurs états, mais seul le premier pouvait être restauré. (I598b0, b/309559751) - Correction d'un problème qui empêchait les arguments autres que des chaînes d'être correctement affichés lorsque les assistants
NavigationUI
étaient utilisés pour renseigner le titre des barres d'application. (#636, b/316676794)
Mise à jour de la dépendance
- Navigation Compose dépend désormais de Compose
1.7.0-alpha01
, ce qui résout un problème pouvant entraîner une animation de mise à l'échelle inattendue. (b/297258205)
Contribution externe
- Merci à SimonMarquis d'avoir corrigé le problème d'affichage des arguments autres que des chaînes lorsque les assistants
NavigationUI
sont utilisés pour renseigner le titre des barres d'application.
Version 2.7.7
Version 2.7.7
7 février 2024
Publication d'androidx.navigation:navigation-*:2.7.7
. Liste des commits de la version 2.7.7
Correction de bugs
- Portage à partir de Navigation
2.8.0-alpha01
: correction de la fuite deBackStackState
, qui entraînait l'enregistrement de plusieurs états en cas d'appelssaveState()
multiples sur un mêmeNavBackStackEntry
, mais seul le premier état enregistré pouvait être restauré. (I598b0, b/309559751) - Portage à partir de Navigation
2.8.0-alpha01
: correction d'un problème qui empêchait les arguments autres que des chaînes d'être correctement affichés lorsque les assistantsNavigationUI
étaient utilisés pour renseigner le titre des barres d'application. (#636, b/316676794)
Contribution externe
- Merci à SimonMarquis d'avoir corrigé le problème d'affichage des arguments autres que des chaînes lorsque les assistants
NavigationUI
sont utilisés pour renseigner le titre des barres d'application.
Version 2.7.6
Version 2.7.6
13 décembre 2023
Publication d'androidx.navigation:navigation-*:2.7.6
. Liste des commits de la version 2.7.6
Correction de bugs
- La fonction
equals()
NavGraph
prend désormais correctement en compte les nœuds de l'autre graphique au lieu de n'en tenir compte que pour l'appelant. Cela garantit que les graphiques dont les nœuds ont des ID différents ne seront plus considérés comme égaux. (I401cb, b/311414915)
Version 2.7.5
Version 2.7.5
1er novembre 2023
Publication d'androidx.navigation:navigation-*:2.7.5
. Liste des commits de la version 2.7.5
Améliorations des performances
- Amélioration considérable des performances (à la fois en termes de temps et de nombre d'allocations) de la comparaison de deux graphiques. Cela signifie que les appels tels que
setGraph
, qui comparent en interne le nouveau graphique à l'ancien, sont beaucoup plus rapides et entraînent moins d'images ignorées. Merci à Michał Z pour l'analyse approfondie qui a permis cette amélioration. (I6ad62) NavHost
affiche désormais la destination de départ lors de la première étape de composition au lieu d'attendre la deuxième étape pour lire l'état mis à jour. (I439a7, b/304852206)
Correction de bugs
- Correction d'un problème qui entraînait l'affichage de la pile "Retour" si vous appeliez
setGraph
plusieurs fois avec le même graphique uniquement si une destination de votre graphique contenait une action reliant deux destinations. (Ieaed7) - Les boîtes de dialogue auxquelles vous avez accédé et que vous avez fermées rapidement ne s'afficheront plus dans la liste
NavController.visibleEntries
. (I67586, b/287969970) - Lorsqu'une entrée est supprimée, suivie d'une modification de la configuration,
ViewModel
de l'entrée est désormais correctement effacé sisaveState
est faux. (Idf242, b/298164648) - Correction d'un problème qui pouvait entraîner la gestion du même lien profond plusieurs fois par
NavController
si la pile "Retour" était entièrement vide avant un changement de configuration ou un appel àsetGraph
uniquement lorsque l'intent entrant avait l'indicateurFLAG_ACTIVITY_NEW_TASK
défini. (I73c7f)
Mises à jour des dépendances
- La navigation avec des fragments dépend désormais de Fragment 1.6.2, ce qui résout un problème pour lequel les instances
ViewModel
des fragments imbriqués n'étaient pas effacées lors de l'appel declearBackStack
.
Version 2.7.4
Version 2.7.4
4 octobre 2023
Publication d'androidx.navigation:navigation-*:2.7.4
. Liste des commits de la version 2.7.4
Nouvelles fonctionnalités
- Ajout de la prise en charge de
popUpTo
pour utiliser des routes avec des arguments afin de pouvoir revenir à une entrée spécifique qui utilise ces arguments exacts, conformément à la prise en charge depopBackStack
. (I731f4, b/299255572)
Correction de bugs
- Correction du problème qui entraînait le plantage de
FragmentNavigator
lorsque la navigation était interrompue par une autre navigation avecpopUpTo
. (I3c848, b/301887045) - Correction d'un problème qui empêchait la mise à jour correcte de
currentDestination
pour qu'elle corresponde au fragment affiché lorsque l'utilisateur appuie sur le bouton Retour du système. (Id0d6c, b/289877514) - Le cycle de vie
DialogFragment
passe désormais correctement à l'étatRESUMED
lorsque la boîte de dialogue située au-dessus est ignorée. (I88f0d, b/301811387)
Version 2.7.3
Version 2.7.3
20 septembre 2023
Publication d'androidx.navigation:navigation-*:2.7.3
. Liste des commits de la version 2.7.3
Correction de bugs
- Correction d'un problème dans Navigation avec Fragments qui entraînait la présence d'entrées incorrectes dans la liste
visibleEntries
. (I5caa9, b/288520638) - Correction d'un problème qui empêchait la destination de fenêtre flottante (
Dialogs
,Bottomsheets
, etc.) d'obtenir un rappel de cycle de vieRESUMED
. (I3b866, b/287505132)
Version 2.7.2
Version 2.7.2
6 septembre 2023
Publication d'androidx.navigation:navigation-*:2.7.2
. Liste des commits de la version 2.7.2
Correction de bugs
- Navigation dépend désormais de Lifecycle
2.6.2
, ce qui corrige une interaction entrerememberSaveable
etNavHost
de Navigation Compose qui empêchait l'étatrememberSaveable
des destinations et toutes les instancesSavedStateHandle
appartenant àViewModel
d'être correctement restaurées après la fin et la recréation du processus. (b/298059596, b/289436035) - Correction d'un problème qui se produisait lors de l'affichage simultané de plusieurs boîtes de dialogue dans Navigation Compose. Les boîtes de dialogue partiellement masquées (par exemple, pas la boîte de dialogue la plus haute) se trouvaient alors dans l'état de cycle de vie
CREATED
plutôt que dans l'étatSTARTED
. (aosp/2728520, b/289257213) - Correction d'un problème qui se produisait lors de l'affichage simultané de plusieurs boîtes de dialogue dans Navigation Compose. Lorsque l'utilisateur fermait la boîte de dialogue la plus haute, la nouvelle boîte de dialogue la plus haute restait bloquée à l'état de cycle de vie
STARTED
au lieu de passer correctement àRESUMED
. (aosp/2629401, b/286371387) - Navigation Safe Args n'instancie plus sa tâche de manière anticipée si elle n'est pas en cours d'exécution. (I0e385, b/260322841)
Mise à jour de la dépendance
- Navigation Compose dépend désormais de Compose 1.5.1.
Version 2.7.1
Version 2.7.1
23 août 2023
Publication d'androidx.navigation:navigation-*:2.7.1
. Liste des commits de la version 2.7.1
Correction de bugs
- Correction d'un problème dans Navigation avec Compose : lorsque vous utilisiez un
Scaffold
, une erreur pouvait s'afficher lorsque vous essayiez d'accéder à unViewModel
Lifecycle.State.DESTROYED
. (I1dc11, b/268422136)
Version 2.7.0
Version 2.7.0
9 août 2023
Publication d'androidx.navigation:navigation-*:2.7.0
. Liste des commits de la version 2.7.0
Modifications importantes depuis la version 2.6.0
Animations d'Accompanist
Maintenant que AnimatedContent
est stable, nous avons pu déplacer le code d'Accompanist Navigation Animation vers Navigation Compose.
Cela signifie que toutes les fonctionnalités de définition de transitions personnalisées disponibles dans AnimatedNavHost
sont directement compatibles avec NavHost
.
Aucune modification supplémentaire ne sera apportée à l'animation de navigation Accompanist. Nous allons bientôt l'abandonner officiellement, et vous recevrez des instructions pour revenir à Navigation Compose. Il s'agira de l'inverse du guide de migration, et aucune autre modification d'API ne sera requise si vous utilisez déjà la dernière version alpha d'Accompanist (0.31.2-alpha
). (b/197140101)
Correction de bugs
- NavHost dans Navigation Compose intercepte désormais correctement les appels de retour du système, même après l'arrêt et la reprise de l'activité. (Icb6de, b/279118447)
Mises à jour des dépendances
- Navigation dépend désormais de Compose
1.5.0
à partir de1.1.0
.
Version 2.7.0-rc01
26 juillet 2023
Publication d'androidx.navigation:navigation-*:2.7.0-rc01
. Liste des commits de la version 2.7.0-rc01
Correction de bugs
- Correction d'un problème dans lequel les lambdas
EnterTransition
etExitTransition
créés dans le cadre deNavHost
pouvaient potentiellement rester en mémoire même après la suppression deNavHost
de la composition. (I893d0)
Problèmes connus
- Un problème de Navigation 2.6.x fait que la navigation avec popUpTo peut entraîner une
IllegalArgumentException
. Il est possible que vous puissiez éviter cette exception en restructurant votre graphique, comme indiqué dans les conseils ci-dessous. (b/287133013)
Version 2.7.0-beta02
28 juin 2023
Publication d'androidx.navigation:navigation-*:2.7.0-beta02
. Liste des commits de la version 2.7.0-beta02
Correction de bugs
- Navigation Compose dispose désormais de l'ordre z correct pour les transitions personnalisées qui utilisent la navigation avec l'option
popUpTo
.(/Ib1c3a, b/285153947)
Version 2.7.0-beta01
7 juin 2023
Publication d'androidx.navigation:navigation-*:2.7.0-beta01
. Liste des commits de la version 2.7.0-beta01
Correction de bugs
NavHost
dans Navigation Compose intercepte désormais correctement les appels de retour du système, même après que leActivity
a étéSTOPPED
etRESUMED
. (Icb6de, b/279118447)
Version 2.7.0-alpha01
24 mai 2023
Publication d'androidx.navigation:navigation-*:2.7.0-alpha01
. Liste des commits de la version 2.7.0-alpha01
Animations d'Accompanist
Maintenant que AnimatedContent
est stable, nous avons pu déplacer le code d'Accompanist Navigation Animation vers Navigation Compose.
Cela signifie que toutes les fonctionnalités de AnimatedNavHost
permettant de définir des transitions personnalisées sont directement compatibles avec NavHost
.
Aucune modification supplémentaire ne sera apportée à l'animation de navigation Accompanist. Nous allons bientôt l'abandonner officiellement, et vous recevrez des instructions pour revenir à Navigation Compose. Il s'agira de l'inverse du guide de migration, et aucune autre modification d'API ne sera requise si vous utilisez déjà la dernière version alpha d'Accompanist (0.31.2-alpha
). (b/197140101)
Correction de bugs
- À partir de Navigation
2.6.0-rc02
: correction d'un problème de navigation dans les fragments. Lorsque vous naviguiez avecpopUpTo
et que vous supprimez un fragment de la pile "Retour" sans recréer sa vue, le bouton "Retour" du système ne fonctionne plus. (Ieb8d4, b/281726455)
Mises à jour des dépendances
- Navigation dépend désormais de Compose
1.5.0-beta01
.
Version 2.6.0
Version 2.6.0
7 juin 2023
Publication d'androidx.navigation:navigation-*:2.6.0
. Liste des commits de la version 2.6.0
Modifications importantes apportées à la navigation depuis la version 2.5.0
- Les
arguments
deNavBackStackEntry
et lesarguments
transmis à unOnDestinationChangedListener
ne sont plus qu'une copie des arguments immuables créés lorsque vous avez accédé à la destination. Cela signifie que les modifications apportées à ces bundles ne seront pas répercutées dans les accès ultérieurs àarguments
ou à d'autres instancesOnDestinationChangedListener
. - Désormais,
NavDeepLink
prend en charge les valeurs par défaut pour les tableaux. Cela permet d'utiliser des paramètres de requête répétés qui seront mappés au type de tableau de l'argument.NavType
inclut également une méthode par défaut qui peut être remplacée pour combiner deux valeurs analysées - Les sous-classes personnalisées de
NavType
peuvent désormais remplacerserializeAsValue
pour sérialiser une valeur en chaîne, ce qui permet d'encapsuler entièrement la sérialisation et la désérialisation (viaparseValue
) dans la classeNavType
.StringType
remplace désormais cette méthode pour appelerUri.encode
sur laString
donnée.
Modifications importantes apportées à Navigation Compose depuis la version 2.5.0
- Les composables avec
NavHost
prévisualisés afficheront désormais par défaut lastartDestination
du NavGraph. NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
etNavController.clearBackStack(route)
acceptent désormais les routes dont les arguments sont partiellement ou entièrement remplis. Notez que les arguments doivent correspondre exactement aux arguments de l'entrée.- Si vous tentez de créer un
NavDeepLink
vide à l'aide du DSLnavDeepLink
en Kotlin, un avertissement d'analyse lint s'affichera, indiquant qu'un lien profond requiert un URI, une action et/ou un type MIME pour être valide
Modifications importantes apportées à la navigation avec des fragments depuis la version 2.5.0
NavHostFragment
n'intercepte plus le bouton "Retour" du système lui-même. Cela permet àFragmentManager
sous-jacent de gérer la touche Retour du système. Cela permet au fragment1.7.0-alpha01
et aux versions ultérieures de fournir une animation de prévisualisation du Retour dans l'application sur les appareils Android U.- Lorsque vous utilisez la navigation avec des fragments, une exception
IllegalArgumentException
est désormais générée si vous essayez d'effectuer manuellement uneFragmentTransaction
qui ajoute un fragment à la pile "Retour" deFragmentManager
. Vous devez toujours ajouter des fragments via l'APInavigate()
. - Lorsque vous utilisez exactement la chaîne
${applicationId}
comme espace réservé dans les attributsapp:data
etapp:dataPattern
de l'élément "activity" d'un fichier XML de navigation, l'espace réservé est automatiquement renseigné avec la valeurpackageName
du contexte en cas de gonflement FragmentNavigator
utilise désormais les API de transition lors de la navigation et de l'affichage deNavBackStackEntries
. Cela signifie que leLifecycle
deNavBackStackEntry
attend à présent que les effets spéciaux des fragments d'entrée et de sortie soient terminés avant de passer à leurLifecycle.State
final.DialogFragmentNavigator
utilise désormais les API de transition lors de la navigation et de l'affichage deNavBackStackEntries
. Cela signifie que leLifecycle
deNavBackStackEntry
attend à présent que leLifecycle
deDialogFragment
passe àDESTROYED
avant de passer lui-même àDESTROYED
.NavHostFragment
vous permet désormais de récupérerNavController
dès queNavHostFragment
est associé àFragmentManager
, et non seulement aprèsonCreate()
.- La compatibilité de Navigation avec les modules de fonctionnalités dynamiques dépend désormais de la bibliothèque Play Feature Delivery qui offre un contrôle précis.
- Safe Args de Navigation dépend désormais du plug-in Android Gradle 7.3.0. Cela signifie qu'il n'est désormais compatible qu'avec les versions 7.3.0 et ultérieures.
Modifications importantes apportées à NavigationUI depuis la version 2.5.0
- Lorsque vous transmettez l'ID d'un graphique de navigation à
AppBarConfiguration
(à l'aide d'unMenu
, par exemple),NavigationUI
considère désormais uniquement sa destination de départ comme étant de niveau supérieur, au lieu de marquer de manière incorrecte chaque destination du graphique comme destination de niveau supérieur. Le comportement de transmission de l'ID d'une destination individuelle reste inchangé. Cette même fonctionnalité est disponible pour votre propre code via la nouvelle fonctionisTopLevelDestination
surAppBarConfiguration
. - Les intégrations
setupWithNavController
deNavigationUI
permettant de travailler avec la barre d'application supérieure vont désormais analyser les valeursR.string
des argumentsReferenceType
de votreandroid:label
dans leurs valeurs de chaîne au lieu de générer automatiquement le nombre entier de la ressource généré automatiquement NavigationUI
fournit désormais des journaux lorsque la navigation via unMenuItem
sélectionné échoue.
Version 2.6.0-rc02
24 mai 2023
Publication d'androidx.navigation:navigation-*:2.6.0-rc02
. Liste des commits de la version 2.6.0-rc02
Correction de bugs
- Correction d'un problème de navigation dans les fragments. Lorsque vous naviguiez avec
popUpTo
et que vous affichez un fragment de la pile "Retour" sans recréer sa vue, le bouton "Retour" du système ne fonctionnait plus. (Ieb8d4, b/281726455)
Version 2.6.0-rc01
10 mai 2023
Publication d'androidx.navigation:navigation-*:2.6.0-rc01
. Liste des commits de la version 2.6.0-rc01
Correction de bugs
- Correction d'un problème de navigation avec des fragments, qui entraînait une
IllegalStateException
lors de la suppression d'un fragment via la navigation avecpopUpTo
dans son rappel de cycle de vieonResume()
. (I21884, b/279644470)
Version 2.6.0-beta01
19 avril 2023
Publication d'androidx.navigation:navigation-*:2.6.0-beta01
. Liste des commits de la version 2.6.0-beta01
Nouvelles fonctionnalités
NavBackStackEntry
fournit désormais une implémentationtoString
personnalisée. (Iff00b)
Correction de bugs
- Lorsque vous utilisez la navigation avec des fragments, une exception
IllegalArgumentException
est désormais générée si vous essayez d'effectuer manuellement uneFragmentTransaction
qui ajoute un fragment à la pile "Retour" deFragmentManager
. Vous devez toujours ajouter des fragments via l'APInavigate()
. (I6d38e) - Lorsqu'un
navigate
ajoute une entrée et qu'unpopBackStack
la supprime dans le même frame, l'entrée supérieure de la pile "Retour" qui en résulte renvoie désormais de manière cohérente à l'Lifecycle.State
RESUMED
. (Id8067, b/276495952)
Version 2.6.0-alpha09
5 avril 2023
Publication d'androidx.navigation:navigation-*:2.6.0-alpha09
. Liste des commits de la version 2.6.0-alpha09
Correction de bugs
- Correction des vérifications d'itinéraires non valides. Si un
NavDestination
contient unNavArgument
non nullable, l'itinéraire de cette destination doit contenir des espaces réservés pour les arguments portant le même nom que leNavArgument
non nullable. (Ic62bf, b/274697949) - Les navigations par lien profond basées sur
Action/MimeType
échouent désormais si l'opération de navigation ne comporte pas deNavArgument
non nullable requis par leNavDestination
auquelAction/MimeType
correspond. (Ibfa17, b/271777424) - Lorsque
NavController
définit un graphique avec le même itinéraire et les mêmes destinations que le graphique précédent, il remplace désormais correctement ses nœuds de graphique actuels et ses destinations de pile "Retour" par de nouvelles instances. Cela corrige un plantage lors de l'utilisation deonLaunchSingleTop
sans enregistrer l'état dans Navigation Compose. Cela corrige également une erreur qui se produisait lors de la navigation vers les destinations associées aux builds de graphique racine et à la pile "Retour" incorrecte. (I5bc58, b/275258161, b/275407804)
Version 2.6.0-alpha08
22 mars 2023
Publication d'androidx.navigation:navigation-*:2.6.0-alpha08
. Liste des commits de la version 2.6.0-alpha08
Nouvelles fonctionnalités
NavHostFragment
vous permet désormais de récupérerNavController
dès queNavHostFragment
est associé àFragmentManager
, et non seulement aprèsonCreate()
. (Ic6382, b/220186282)
Correction de bugs
- Correction d'une
NullPointerException
lors de l'affichage d'un graphique imbriqué qui inclut un argument non nullable. (6b3581, b/249988437) - Lorsque vous utilisez le bouton Retour du système après avoir effectué une navigation avec
popUpTo
, l'état deNavController
s'affiche sur la bonne entrée. (I3a8ec, b/270447657) FragmentNavigator
affiche désormais correctement les entrées lorsque la pile "Retour" est affichée via le bouton Retour du système oupopBackStack()
, et que la transaction utilise ou non des effets pour le fragment. (I81bdf)- L'ajout de fragments au
FragmentManager
deFragmentNavigator
sans utiliser la navigation ne provoque plus de plantage. (b17204, b/274167493)
Mises à jour des dépendances
- Navigation dépend désormais de Lifecycle
2.6.1
. (586fe7) - Navigation dépend désormais de SavedState
1.2.1
. (078e4e) - Navigation dépend désormais de ProfileInstaller
1.3.0
. (512f0c)
Version 2.6.0-alpha07
8 mars 2023
Publication d'androidx.navigation:navigation-*:2.6.0-alpha07
. Liste des commits de la version 2.6.0-alpha07.
Correction de bugs
- Les variantes d'API
getBackStackEntry
,popBackStack
etclearBackStack
qui acceptent des itinéraires acceptent désormais des modèles d'itinéraires avec des arguments nullables et des paramètres de requête nullables (I22294, b/269302500) - Correction d'un problème pour lequel l'appel de
clearBackStack()
à partir deNavController
n'effaçait pas l'état enregistré dans le gestionnaire de fragments associé à la pile "Retour" effacée. (Ic1cce, b/271190202) - Correction d'une régression dans la version 2.6.0-alpha06 qui entraînait la mise en surbrillance du mauvais
MenuItem
dans leBottomNavigationView
lorsque l'utilisateur utilisait le bouton "Retour" du système entre les onglets. (I634f6, b/270447657) - Correction d'une régression dans la version 2.6.0-alpha06 qui empêchait les
NavBackStackEntry
d'être déplacés vers l'état RESUMED lors de l'utilisation deAnimation
. (Ib3589, b/269646882)
Version 2.6.0-alpha06
22 février 2023
Publication d'androidx.navigation:navigation-*:2.6.0-alpha06
. Liste des commits de la version 2.6.0-alpha06
Nouvelles fonctionnalités
- Les composables avec
NavHost
prévisualisés afficheront désormais par défaut lastartDestination
du NavGraph. (I2b89f)
Modifications apportées à l'API
- Toutes les surcharges
NavController
navigate
sont désormais annotées avec@MainThread
pour s'assurer qu'elles sont appelées sur le thread principal. (I2c0b0, b/263427111)
Correction de bugs
- Correction d'un problème de plantage lié à la navigation pendant l'utilisation de la navigation dynamique entre fragments. (I3ee29, b/268360479)
- Correction d'un bug survenant lors de la navigation vers un autre fragment via le bouton "Retour" du système, qui empêchait la barre inférieure d'être bien alignée sur l'élément sélectionné. (If559f, b/269044426)
Problèmes connus
- Lorsque vous utilisez Navigation avec des fragments, le cycle de vie de
NavBackStackEntry
ne parvient pas à atteindreRESUMED
lorsque vous utilisez les APIAnimation
. (b/269646882) - Lorsque vous utilisez Navigation avec des fragments et que vous naviguez avec
BottomNavigation
, si vous essayez de restaurer une pile "Retour" avec plusieurs entrées,BottomMenuItem
n'est pas correctement mis à jour. (b/270447657) - Lorsque vous utilisez Navigation avec les fragments, après la restauration de l'état, le
Lifecycle
NavBackStackEntry
n'obtient pasDESTROYED
lorsque son fragment estDESTROYED
. (b/270610768)
Version 2.6.0-alpha05
8 février 2023
Publication d'androidx.navigation:navigation-*:2.6.0-alpha05
. Liste des commits de la version 2.6.0-alpha05
Nouvelles fonctionnalités
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
etNavController.clearBackStack(route)
acceptent désormais les routes dont les arguments sont partiellement ou entièrement remplis. Notez que les arguments doivent correspondre exactement aux arguments de l'entrée. (Iebd28, Ic678c, I3b37b, b/257514373)FragmentNavigator
utilise désormais les API de transition lors de la navigation et de l'affichage deNavBackStackEntries
. Cela signifie que leLifecycle
deNavBackStackEntry
attend à présent que les effets spéciaux des fragments d'entrée et de sortie soient terminés avant de passer à leurLifecycle.State
final. (I3cb19, b/238686802)DialogFragmentNavigator
utilise désormais les API de transition lors de la navigation et de l'affichage deNavBackStackEntries
. Cela signifie que leLifecycle
deNavBackStackEntry
attend à présent que leLifecycle
deDialogFragment
passe àDESTROYED
avant de passer lui-même àDESTROYED
. (I53ee5, b/261213893)
Modifications apportées à l'API
NavigatorState
fournit désormais l'APIprepareForTransition
pour permettre auxNavigator
de déplacerNavBackStackEntries
vers desLifecycle.State
intermédiaires. (I42c21, b/238686802)- Vous pouvez désormais accéder à la pile "Retour" associée à un
NavGraphNavigator
ou à unComposeNavigator
via une propriétébackstack
.ComposeNavigator
expose désormais également le rappelonTransitionComplete()
pour marquer comme terminée uneNavBackStackEntry
qui a exécuté une opération de navigation oupopBackStack
. (I02062, I718db, b/257519195)
Correction de bugs
- L'état du navigateur est désormais no-op lorsque vous utilisez les API
push/popWithTransition
et que l'entrée est déjà gérée. (Iadbfa, b/261213893) - Lorsque vous utilisez
launchSingleTop
avec un élémentNavGraph
imbriqué, toutes les destinations commençant de la destination d'origine à sastartDestination
sont ajoutées correctement en haut de la pile "Retour". (Id4bea, b/253256629) - Navigation remplacera désormais correctement l'instance
DialogFragment
lorsque vous accédez à la même destination et définissez l'indicateurlaunchSingleTop
sur "true". (I45b5a, b/149572817) - Les Navigation Safe Args n'entraîne plus d'erreur de compilation lorsque vous utilisez des arguments comportant exactement 19 caractères. (Id60bc, b/257110095)
Version 2.6.0-alpha04
9 novembre 2022
Publication d'androidx.navigation:navigation-*:2.6.0-alpha04
. Liste des commits de la version 2.6.0-alpha04
Nouvelles fonctionnalités
- Les sous-classes personnalisées de
NavType
peuvent désormais remplacerserializeAsValue
pour sérialiser une valeur en chaîne, ce qui permet d'encapsuler entièrement la sérialisation et la désérialisation (viaparseValue
) dans la classeNavType
.StringType
remplace désormais cette méthode pour appelerUri.encode
sur laString
donnée. (Ie5213, b/247637434) NavigationUI
fournit désormais des journaux lorsque la navigation via unMenuItem
sélectionné échoue. (I2af5a, b/247730357)
Correction de bugs
- Les liens profonds de Navigation sont désormais analysés en différé, plutôt que lors de l'initialisation du graphique, ce qui peut améliorer les performances de l'application au démarrage. (Iab0ab)
- Correction du plantage causé par une navigation vers le haut après l'établissement d'un lien profond vers une destination avec des arguments de valeur "null" par défaut. (I51c24, b/243183636)
Mise à jour de la dépendance
- La compatibilité de Navigation avec les modules de fonctionnalités dynamiques dépend désormais de la bibliothèque Play Feature Delivery qui offre un contrôle précis. (Ib4ddc)
- Safe Args de Navigation dépend désormais du plug-in Android Gradle 7.3.0. Cela signifie qu'il n'est désormais compatible qu'avec les versions 7.3.0 et ultérieures. (I47e49)
Version 2.6.0-alpha03
24 octobre 2022
Publication d'androidx.navigation:navigation-*:2.6.0-alpha03
. Liste des commits de la version 2.6.0-alpha03.
Correction de bugs
- À partir de Navigation
2.5.3
:NavHost
ne génère plus d'exceptionNoSuchElementException
lorsqu'aucune destination n'est disponible pour la composition duCrossfade
. La composition est désormais ignorée. (Ieb46e, b/253299416) - À partir de Navigation
2.5.3
: correction d'un problème dans lequel l'état de Compose enregistré (utilisations derememberSaveable
, par exemple) n'était pas oublié et supprimé lorsqu'une destination était retirée de la pile "Retour". (I64949)
Mises à jour des dépendances
- Navigation dépend désormais de Fragment
1.5.4
(Icd424)
Version 2.6.0-alpha02
5 octobre 2022
Publication d'androidx.navigation:navigation-*:2.6.0-alpha02
. Liste des commits de la version 2.6.0-alpha02
Nouveaux comportements
- Lorsque vous transmettez l'ID d'un graphique de navigation à
AppBarConfiguration
(à l'aide d'unMenu
, par exemple),NavigationUI
considère désormais uniquement sa destination de départ comme étant de niveau supérieur, au lieu de marquer de manière incorrecte chaque destination du graphique comme destination de niveau supérieur. Le comportement de transmission de l'ID d'une destination individuelle reste inchangé. Cette même fonctionnalité est disponible pour votre propre code via la nouvelle fonctionisTopLevelDestination
surAppBarConfiguration
. (Ie936e, b/238496771)
Correction de bugs
- Le composant
navigation:navigation-fragment
dépend désormais de la version1.5.2
de Fragment. (I00ba4) - L'élément de menu sélectionné ne sera plus mis à jour lorsque vous accéderez à une destination
FloatingWindow
comme une boîte de dialogue. (I4cde8, b/240308330)
Version 2.6.0-alpha01
7 septembre 2022
Publication d'androidx.navigation:navigation-*:2.6.0-alpha01
. Liste des commits de la version 2.6.0-alpha01.
Nouvelles fonctionnalités
- Les intégrations
setupWithNavController
deNavigationUI
permettant de travailler avec la barre d'application supérieure vont désormais analyser les valeursR.string
des argumentsReferenceType
de votreandroid:label
dans leurs valeurs de chaîne au lieu de générer automatiquement le nombre entier de la ressource généré automatiquement (I5f803, b/167959935). - Désormais,
NavDeepLink
prend en charge les valeurs par défaut pour les tableaux. Cela permet d'utiliser des paramètres de requête répétés qui seront mappés au type de tableau de l'argument.NavType
inclut également une méthode par défaut qui peut être remplacée pour combiner deux valeurs analysées (Id68c3, b/209977108). - Lorsque vous utilisez exactement la chaîne
${applicationId}
comme espace réservé dans les attributsapp:data
etapp:dataPattern
de l'élément "activity" d'un fichier XML de navigation, l'espace réservé est automatiquement renseigné avec la valeurpackageName
du contexte en cas de gonflement (Iaabde, b/234223561). - Si vous tentez de créer un
NavDeepLink
vide à l'aide du DSLnavDeepLink
en Kotlin, un avertissement d'analyse lint s'affichera, indiquant qu'un lien profond requiert un URI, une action et/ou un type MIME pour être valide (I08d2f, b/154038883).
Modifications apportées à l'API
- Ajout d'une fonction d'extension
NavDestination
pour analyser des libellés dynamiques avec des arguments sous la formeandroid:label="{arg}"
à la chaîne. Prise en charge des argumentsReferenceType
en analysant les valeursR.string
dans leurs valeurs de chaîne (I07d89, b/236269380).
Nouveaux comportements
- Les
arguments
de NavBackStackEntry et lesarguments
transmis à unOnDestinationChangedListener
ne sont plus qu'une copie des arguments immuables créés lorsque vous avez accédé à la destination. Cela signifie que les modifications apportées à ces bundles ne seront pas répercutées dans les accès ultérieurs àarguments
ou à d'autres instancesOnDestinationChangedListener
(I676f5).
Correction de bugs
- À partir de Navigation
2.5.2
, Dynamic Navigation tente correctement d'installer des destinations d'Activity depuis d'autres modules avant d'y accéder (Ia2c16, b/240292838). - À partir de Navigation
2.5.2
, Navigation remplace correctement l'instance Fragment lorsque vous accédez à la même destination et définissez l'indicateurlaunchSingleTop
sur "true" (I5a2f1, b/237374580). - À partir de Navigation
2.5.2
, l'erreurIllegalStateException
causée par un double graphique imbriqué partageant un parent avec une nouvelle destination de départ affichée a été corrigée (I9f7cb, b/243778589).
Version 2.5
Version 2.5.3
24 octobre 2022
Publication d'androidx.navigation:navigation-*:2.5.3
. Liste des commits de la version 2.5.3
Correction de bugs
NavHost
ne génère plus d'exceptionNoSuchElementException
lorsqu'aucune destination n'est disponible pour la composition duCrossfade
. La composition est désormais ignorée. (Ieb46e, b/253299416)- Correction d'un problème dans lequel l'état de Compose enregistré (utilisations de
rememberSaveable
, par exemple) n'était pas oublié et supprimé lorsqu'une destination était retirée de la pile "Retour". (I64949)
Version 2.5.2
7 septembre 2022
Publication d'androidx.navigation:navigation-*:2.5.2
. Liste des commits de la version 2.5.2
Correction de bugs
- Désormais, Dynamic Navigation tente d'installer correctement les destinations Activity depuis d'autres modules avant d'y accéder (Ia2c16, b/240292838).
- Désormais, Navigation remplace correctement l'instance Fragment lorsque vous accédez à la même destination et que vous définissez l'indicateur
launchSingleTop
sur "true" (I5a2f1, b/237374580). - Correction de l'erreur
IllegalStateException
causée par un double graphique imbriqué partageant un parent avec une nouvelle destination de départ affichée (I9f7cb, b/243778589).
Mise à jour de la dépendance
- Navigation
2.5.2
dépend désormais de Fragment1.5.2
(aosp/2178734).
Version 2.5.1
27 juillet 2022
Publication d'androidx.navigation:navigation-*:2.5.1
. Liste des commits de la version 2.5.1.
Correction de bugs
Navigation Safe Args
n'entraînera plus d'avertissements d'abandon dans les classes générées lorsque vous utilisez des types d'arguments personnalisés enregistrés dans unBundle
(Id86ed, b/237725966).
Mises à jour des dépendances
- La bibliothèque Navigation dépend désormais de Lifecycle
2.5.1
(Ib4451). - La bibliothèque Navigation dépend désormais d'Activity
1.5.1
(I3efe8). - La bibliothèque Navigation dépend désormais de Fragment
1.5.1
(I56177).
Version 2.5.0
29 juin 2022
Publication d'androidx.navigation:navigation-*:2.5.0
. Liste des commits de la version 2.5.0
Modifications importantes depuis la version 2.4.0
- Intégration de CreationExtras :
Navigation
peut désormais fournir unViewModelProvider.Factory
sans état via lesCreationExtras
de Lifecycle2.5.0
.
SafeArgs de Navigation
Navigation Safe Args
a mis à niveau la dépendanceAndroid Gradle Plugin
pour s'appuyer sur7.0.4
, abandonnant la compatibilité pour les versions d'AGP antérieures à7.0
.- Prise en charge de l'attribut d'espace de noms build.gradle, à utiliser à la place d'applicationId.
Autres changements
- L'API
visibleEntries
n'est plus expérimentale et fournit une fonction permettant de récupérer toutes les entrées dont la destination est actuellement visible selonNavController
.
Version 2.5.0-rc02
15 juin 2022
Publication d'androidx.navigation:navigation-*:2.5.0-rc02
. Liste des commits de la version 2.5.0-rc02
Correction de bugs
- Correction d'un plantage causé par un basculement rapide d'une destination à une autre lors de l'utilisation du
NavHost
de Navigation Compose (I3979a, b/234054916). - Correction du plantage de
Navigation SafeArgs
lorsque vous utilisezapplicationIdSuffix
et un espace de noms sansapplicationId
, ou lorsqueapplicationId
et l'espace de noms diffèrent (I754b1, b/233119646). - Ajout d'une fonction
toString()
personnalisée àNavArgument
pour afficher les valeurs internes de l'argument (I900a8).
Version 2.5.0-rc01
11 mai 2022
Publication d'androidx.navigation:navigation-*:2.5.0-rc01
. Liste des commits de la version 2.5.0-rc01
Nouvelles fonctionnalités
- Ajout d'une règle d'analyse lint pour éviter de placer des éléments
<deeplink>
dans les éléments<activity>
de votre fichiernavigation.xml
(Ic15a5, b/178403185).
Correction de bugs
- Rétablissement du bon ordre des champs d'application composables dans
NavHost
etDialogHost
: les composables internes sont placés avant les composables externes (I157e6). - Utilisation de
PathSensitivity.RELATIVE
dansArgumentsGenerationTask
par les SafeArgs de Navigation pour changer l'emplacement du cache. L'entrée de cache peut ainsi être réutilisée d'un build de CI vers un build local (I5f67c, b/173420454). - Mise à jour de la règle lint
UnrememberedGetBackStackEntryDetector
pour garantir que l'appelremember
encadrant l'appel degetBackStackEntry()
transmet aussi un objetNavBackStackEntry
en tant que clé (Ib7081, b/227382831).
Version 2.5.0-beta01
20 avril 2022
Publication d'androidx.navigation:navigation-*:2.5.0-beta01
. Liste des commits de la version 2.5.0-beta01
Correction de bugs
DialogNavigator
utilise désormaispopWithTransition
lors de l'exécution d'un appeldismiss()
. Cela corrige une condition de concurrence lors de l'utilisation d'unViewModel
dans la destinationdialog
, ce qui entraînait uneIllegalStateException
si l'utilisateur ferme la boîte de dialogue en utilisant le système en arrière-plan ou en appuyant en dehors de celle-ci pour en sortir (Id7376, b/226552301).
Mises à jour des dépendances
- Navigation dépend désormais du Lifecycle
2.5.0-beta01
, ce qui corrige uneIllegalStateException
lors de l'imbrication d'unNavHost
dans un autreNavHost
dans un onglet de navigation inférieur secondaire lorsque plusieurs piles "Retour" sont utilisées.
Version 2.5.0-alpha04
6 avril 2022
Publication d'androidx.navigation:navigation-*:2.5.0-alpha04
. Liste des commits de la version 2.5.0-alpha04.
Modifications apportées à l'API
visibleEntries
n'est plus au stade expérimental (I4829f, b/225394514).
Correction de bugs
- NavHost dépend désormais de
visibleEntries
dansNavController
pour déterminer les entrées à composer. Cela signifie que lorsque vous utilisez des objets NavHost imbriqués, leNavHost
interne doit désormais s'animer correctement (I4ba2b, b/225394514). - La valeur
StateFlow
devisibleEntries
fournie parNavController
est désormais basée sur l'état du cycle de vie maximal de l'entrée au lieu de l'état actuel du cycle de vie. Cela signifie que même si le cycle de vie de l'hôtenavController
est inférieur à STARTED, la liste des entrées visibles restera la même (I9e2a8, b/225394514). SavedStateViewFactory
est désormais compatible avecCreationExtras
, même lorsqu'ils ont été initialisés avec unSavedStateRegistryOwner
. Les arguments initialisés sont ignorés si des éléments supplémentaires sont fournis. (I6c43b, b/224844583).NavDeepLink
peut désormais analyser les URI à l'aide d'un seul paramètre de requête sans valeur (I0efe8, b/148905489).- Les chaînes vides sont maintenant considérées comme des arguments valides dans les liens profonds (I70a0d, b/217399862).
- Correction du problème de plantage de
Navigation Safe Args
lorsqu'il utilise des espaces de noms et qu'aucunAndroidManifest.xml
n'est présent. (I17ccf, b/227229815)
Version 2.5.0-alpha03
23 février 2022
Publication d'androidx.navigation:navigation-*:2.5.0-alpha03
. Liste des commits de la version 2.5.0-alpha03
Modifications apportées à l'API
- Vous pouvez maintenant transmettre
CreationExtras
àby navGraphViewModels
pour créer unViewModel
(I29217, b/217618359).
Correction de bugs
- Désormais,
NavDeepLinks
prend correctement en charge les nouveaux caractères de ligne encodés dans les URI de routes/liens profonds (I513d1, b/217815060). - Désormais,
CreationExtras
fonctionne correctement lorsqu'il est utilisé avecNavBackStackEntries
pour créer des ViewModels (I69161, b/217617710). - Navigation Safe Args prend en charge l'utilisation de l'espace de noms défini dans
build.gradle
à la place du package dans le fichier AndroidManifest (I659ef, b/217414933).
Version 2.5.0-alpha02
9 février 2022
Publication d'androidx.navigation:navigation-*:2.5.0-alpha02
. Liste des commits de la version 2.5.0-alpha02
Correction de bugs
- À partir de Navigation
2.4.1
, l'élémentNavHostFragment
définit désormais correctementOnBackPressedDispatcher
lorsque vous utilisez la liaison de vue avec des graphiques imbriqués (Ifbb51, b/214577959). - À partir de Navigation
2.4.1
, lorsque des liens profonds sont créés dans plusieurs élémentsNavGraph
imbriqués, la pile "Retour" inclut désormais correctement des destinations de début intermédiaires (I504c0, b/214383060).
Version 2.5.0-alpha01
26 janvier 2022
Publication d'androidx.navigation:navigation-*:2.5.0-alpha01
. Liste des commits de la version 2.5.0-alpha01
Nouvelles fonctionnalités
NavBackStackEntry
s'intègre désormais avec ViewModel CreationExtras, qui a été introduit dans Lifecycle2.5.0-alpha01
(Ib9fe2, b/207012490).
Correction de bugs
- Correction d'un problème qui renvoyait une
IllegalStateException
lors de l'accès à unViewModel
créé viaby navGraphViewModels()
à partir de l'onCreate()
d'un fragment. (I8a14d) - Correction du problème de décodage double inutile des arguments effectué par les
NavDeepLink
. Les arguments appropriés sont désormais transmis à votre destination finale (I31b0a, b/210711399).
Safe Args
- Safe Args dépend désormais du plug-in Android Gradle 7.0.4. En conséquence, Navigation Safe Args ne sera plus compatible avec les versions d'Android Studio antérieures à la version 7.0, mais il est désormais compatible avec le plug-in Android Gradle 7.1.0 et versions ultérieures. (I41c88, b/213086135, b/207670704)
Version 2.4.2
Version 2.4.2
6 avril 2022
Publication d'androidx.navigation:navigation-*:2.4.2
. Liste des commits de la version 2.4.2
Correction de bugs
- Rétroportage à partir de Navigation
2.5.0-alpha03
:NavDeepLinks
prend correctement en charge les nouveaux caractères de ligne encodés intégrés dans les URI de routes/liens profonds (I513d1, b/217815060). - Rétroportage à partir de Navigation
2.5.0-alpha03
: SafeArgs de Navigation prend désormais en charge l'utilisation de l'espace de noms défini dans lebuild.gradle
à la place du package dans le fichier AndroidManifest (I659ef, b/217414933). - Rétroportage à partir de Navigation
2.5.0-alpha04
: correction du plantage deNavigation Safe Args
lorsque des espaces de noms sont utilisés et qu'aucun élémentAndroidManifest.xml
n'est présent. (I17ccf, b/227229815) - Rétroportage à partir de Navigation
2.5.0-alpha04
: les chaînes vides sont désormais considérées comme des arguments valides dans les liens profonds (I70a0d, b/217399862).
Version 2.4.1
Version 2.4.1
9 février 2022
Publication d'androidx.navigation:navigation-*:2.4.1
. Liste des commits de la version 2.4.1
Correction de bugs
- Désormais,
NavHostFragment
définit correctementOnBackPressedDispatcher
lors de l'utilisation de la liaison de vue avec des graphiques imbriqués (Ifbb51, b/214577959). - Lorsque des liens profonds sont créés via plusieurs
NavGraph
imbriqués, la pile "Retour" inclut désormais correctement des destinations de départ intermédiaires (I504c0, b/214383060). - Rétroportage à partir de Navigation
2.5.0-alpha01
: correction d'une erreurIllegalStateException
lors de l'accès à un ViewModel créé viaby navGraphViewModels()
à partir duonCreate()
d'un fragment. (I8a14d) - Rétroportage à partir de Navigation
2.5.0-alpha01
: correction du problème de décodage double inutile des arguments effectué par lesNavDeepLink
. Les arguments décodés appropriés sont désormais transmis à votre destination finale (I31b0a, b/210711399). - Rétroportage à partir de Navigation
2.5.0-alpha01
: Safe Args dépend désormais de la version 7.0.4 du plug-in Android Gradle. En conséquence, Navigation Safe Args ne sera plus compatible avec les versions d'Android Studio antérieures à la version 7.0, mais il est désormais compatible avec le plug-in Android Gradle 7.1.0 et versions ultérieures. (I41c88, b/213086135, b/207670704)
Version 2.4.0
Version 2.4.0
26 janvier 2022
Publication d'androidx.navigation:navigation-*:2.4.0
. Liste des commits de la version 2.4.0.
Changements importants depuis la version 2.3.0
- Tous les artefacts de Navigation ont été réécrits en Kotlin. Cela a amélioré la possibilité de valeur nulle des classes à l'aide d'éléments génériques (comme les sous-classes
NavType
). Toutes les fonctions de l'extension Kotlin qui faisaient partie des artefacts-ktx
ont été déplacées vers leurs artefacts principaux respectifs. Les artefacts-ktx
continueront d'être publiés, mais ils seront complètement vides. - L'artefact
navigation-fragment
contient désormais une implémentation prédéfinie d'une mise en page à deux volets via le nouvelAbstractListDetailFragment
Ce fragment utilise unSlidingPaneLayout
pour gérer un volet de liste (fourni par votre sous-classe) et un volet Détails, qui utilise unNavHostFragment
comme implémentation, tel qu'illustré dans notre exemple d'implémentation. - La méthode
currentBackStackEntryAsFlow()
surNavController
fournit unFlow
qui émet chaque fois que laNavBackStackEntry
actuelle change. Ce flux peut être utilisé pour vous éviter d'avoir à gérer manuellement unOnDestinationChangedListener
. - NavController vous permet désormais de récupérer la liste de toutes les instances
NavBackStackEntry
visibles en tant queStateFlow
via la propriété expérimentalevisibleEntries
. - Il est maintenant possible d'étendre la classe
NavType
pour créer des NavTypes personnalisés. Les types personnalisés sont uniquement pris en charge lorsque vous créez votre graphique de navigation par programmation, par exemple via le DSL Kotlin pour graphiques de navigation. Navigation fournit désormais les API
findStartDestination()
etgetHierarchy()
pour faciliter l'implémentation d'une méthode NavigationUI personnalisée.findStartDestination()
est une fonction d'extension deNavGraph
qui permet de localiser la destination de départ réelle affichée lorsque vous accéderez au graphique, même sistartDestination
est lui-même unNavGraph
imbriqué.getHierarchy()
est une fonction deNavDestination
qui permet de vérifier si une destination donnée se trouve dans la hiérarchie d'une autre destination.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
Les méthodes
NavigationUI
qui auparavant prenaient uneBottomNavigationView
ont été mises à jour pour prendre à la place sa super-classeNavigationBarView
introduite dans Material1.4.0
. Cela permet d'utiliser ces méthodes avecNavigationRailView
.Lorsque vous gonflez un élément
<action>
avec XML, les attributs d'animation peuvent utiliser des attributs extraits de votre thème à l'aide de la syntaxeapp:enterAnim="?attr/transitionEnter"
.Désormais, Safe Args génère une méthode
fromSavedStateHandle()
pour chaque classeNavArgs
. (#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) }
Itinéraires de Navigation et DSL Kotlin
Dans les versions précédentes de Navigation, chaque destination comportait un ID d'entier constant qui permettait de l'identifier de manière unique parmi les destinations de même niveau et d'y accéder (navigate()
) directement ou via une action. Ce système d'entiers uniques continue d'être valide et utile, surtout lorsque vous définissez votre graphique de navigation au format XML et que vous utilisez des constantes R.id
générées automatiquement ou Safe Args (qui utilise ces constantes pour générer du code au moment de la compilation). Cependant, il n'a pas capturé la signification sémantique et l'expressivité requises pour gérer des graphiques entièrement dynamiques créés de manière programmatique lors de l'exécution via le DSL Kotlin de Navigation.
Cette version introduit une option permettant d'identifier une destination de manière unique dans un graphique de navigation en fonction de son itinéraire. Un itinéraire est un String
qui définit le chemin d'accès unique vers une destination. Toutes les méthodes DSL Kotlin qui utilisaient un ID de destination sont désormais obsolètes et remplacées par une API équivalente qui suit un itinéraire.
Chaque itinéraire doit être considéré comme l'élément de chemin d'accès d'un Uri
qui définit cette destination, par exemple, home
, profile/{userId}
, profile/{userId}/friends
, etc. Lorsque l'identité d'une destination est associée à un contenu spécifique, ces arguments dynamiques doivent faire partie de l'itinéraire, conformément aux mêmes règles que les liens profonds implicites.
Toutes les API NavController
qui utilisaient uniquement un ID présentent désormais une surcharge prenant un itinéraire String
. Cela inclut navigate()
, popBackStack()
, popUpTo()
et getBackStackEntry()
.
Ce changement a eu ces conséquences sur l'API :
- La propriété Kotlin
popUpTo
du DSL Kotlin a été abandonnée au profit depopUpToId
. - L'API
getStartDestination()
a été abandonnée au profit degetStartDestinationId()
.
Contrairement à la navigation par ID, la navigation par itinéraire suit les mêmes règles que les liens profonds implicites. En effet, vous pouvez accéder directement à n'importe quelle destination d'un graphique imbriqué, ce qui vous permet de les utiliser dans des projets multimodules sans ajouter explicitement de lien profond externe à chaque destination.
Navigation Compose
L'artefact navigation-compose
permet l'intégration entre le composant Navigation et Jetpack Compose. Il utilise les fonctions @Composable
comme destinations dans votre application.
Cette version offre les avantages suivants :
- Un composable
NavHost
qui vous permet de créer votre graphique de navigation via un DSL Kotlin, en utilisant les destinationscomposable
etdialog
, ainsi que des navigateurs facultatifs comme ceux de Accompanist Navigation Material. - Une prise en charge obligatoire du fondu enchaîné entre les destinations. Accompanist Navigation Animation permet de contrôler les transitions d'entrée et de sortie à l'aide des API expérimentales Compose.
- La limitation de
Lifecycle
à chaque destination de composable. Chaque destination n'atteint l'étatRESUMED
qu'à la fin de l'une des transitions entrantes, et passe immédiatement àSTARTED
au début des transitions existantes. Cela vous permet d'éviter les erreursIllegalStateException
et les problèmes multipoint en déclenchant uniquement un appelnavigate
lorsque la valeur deLifecycle
estRESUMED
. - La limitation de
ViewModel
(via l'APIviewModel()
de Lifecycle ViewModel Compose2.4.0
ouhiltViewModel()
de Hilt Navigation Compose1.0.0
) au niveau de la destination. Cela fournit un niveau d'accès qui survit aux changements de configuration et à une présence sur la pile "Retour" (lorsque votre contenu composable est supprimé d'une autre façon) et un signal dans leonCleared()
du ViewModel indiquant la suppression et le nettoyage permanents de l'état associé à ceNavBackStackEntry
. - La limitation de l'état
rememberSaveable
au niveau de la destination, garantissant que tous les états composables sont enregistrés et restaurés automatiquement lorsque vous revenez à une destination. - La prise en charge complète de l'enregistrement et de la restauration de
NavController
et de l'état de sa destination à la fin et à la recréation du processus. - Une intégration automatique au bouton "Retour" du système.
La possibilité de transmettre des arguments, d'associer des liens profonds à des destinations et de renvoyer un résultat à des destinations précédentes.
Possibilité de composer des assistants spécifiques dans
rememberNavController()
etcurrentBackStackEntryAsState()
pour permettre de hisser un état et de connecter leNavController
aux composables en dehors deNavHost
(une barre de navigation inférieure par exemple).
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()
}
}
}
Pour en savoir plus, consultez le guide de navigation avec Compose.
Plusieurs piles "Retour"
NavController est chargé de gérer la pile "Retour" des destinations en ajoutant des destinations à cette pile lorsque vous y accédez (navigate()
) et en les supprimant lorsque vous appelez popBackStack()
ou déclenchez le bouton "Retour" du système. La classe NavOptions
existante et l'intégration dans les éléments <action>
du code XML du graphique de navigation ont été développées pour permettre l'enregistrement et la restauration de la pile "Retour".
Désormais, les méthodes NavigationUI
de onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
et NavigationView.setupWithNavController()
enregistrent et restaurent automatiquement l'état des destinations qui s'affichent, ce qui permet de prendre en charge plusieurs piles "Retour" sans modifier le code. Il s'agit de la méthode recommandée pour intégrer plusieurs piles "Retour" lorsque vous utilisez la fonctionnalité Navigation avec des fragments.
Les API sous-jacentes permettant d'enregistrer et de restaurer l'état sont exposées via plusieurs surfaces :
Dans le fichier XML de Navigation, l'élément
<action>
peut désormais utiliser les attributs booléensapp:popUpToSaveState
etapp:restoreState
pour enregistrer l'état de toutes les destinations affichées viaapp:popUpTo
et restaurer l'état associé à la destination transmise commeapp: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” />
Dans le DSL Kotlin
navOptions
, vous pouvez ajouter les propriétés booléennesrestoreState
etsaveState
dans le compilateurpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
Lorsque vous créez manuellement un objet
NavOptions
viaNavOptions.Builder
, vous pouvez utilisersetRestoreState()
et une nouvelle surcharge danssetPopUpTo()
, lequel accepte un paramètresaveState
supplémentaire.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);
Les appels programmatiques à
popBackStack()
peuvent maintenant inclure un paramètresaveState
supplémentaire.Vous pouvez utiliser la méthode
clearBackStack()
pour effacer tout état enregistré avecpopBackStack()
oupopUpToSaveState
.
Dans tous les cas, NavController
enregistre et restaure l'état de chaque NavBackStackEntry
, y compris les instances ViewModel
limitées à la destination de la navigation. Les API Navigator
ont été mises à jour pour permettre à chaque Navigator
d'enregistrer et de restaurer son propre état.
Nouveaux comportements
- Désormais,
NavDeepLinkBuilder
ajoutePendingIntent.FLAG_IMMUTABLE
auPendingIntent
renvoyé parcreatePendingIntent()
pour assurer le bon fonctionnement de l'API lorsqu'Android 12 est ciblé. - Désormais, Navigation dépend de Lifecycle
2.3.1
, et marquesetGraph()
,popBackStack()
,navigateUp()
etnavigate()
(les méthodes qui mettent à jourNavBackStackEntry
Lifecycle
) comme@MainThread
afin d'aligner Navigation sur l'application forcée du thread principal introduite dans Lifecycle2.3.0
. - Les liens profonds vérifient désormais que tous les arguments obligatoires (ceux sans valeurs par défaut) sont présents dans l'
Uri
. - Les arguments analysés
NavDeepLink
considèrent le symbole de la livre de la même manière que le point d'interrogation en tant que séparateur de segments de chemin pour éviter que l'argument n'englobe le symbole de la livre. - Lors de la génération d'actions, le code Kotlin généré à partir de Safe Args place les arguments sans valeurs par défaut avant ceux dont les valeurs par défaut sont des paramètres.
- Lors de la génération d'arguments, Safe Args place désormais les paramètres sans valeurs par défaut avant ceux avec des valeurs par défaut.
- Safe Args dépend désormais du plug-in Android Gradle 4.2.0. Vous ne devriez donc plus recevoir d'avertissement lorsque vous utilisez
applicationIdTextResource
.
Problèmes connus
- Correction dans Navigation
2.5.0-alpha01
: l'accès à unViewModel
créé avecby navGraphViewModels()
à partir d'unonCreate()
de Fragment échoue avec l'erreurIllegalStateException
. (b/213504272) - Correction dans Navigation
2.5.0-alpha01
: Safe Args 2.4.0 n'est pas compatible avec le plug-in Android Gradle 7.1.0 ou version ultérieure. (b/213086135) - Les liens profonds avec plusieurs graphiques de navigation imbriqués ne créent pas correctement la pile "Retour" complète (b/214383060).
Version 2.4.0-rc01
15 décembre 2021
Publication d'androidx.navigation:navigation-*:2.4.0-rc01
. Liste des commits de la version 2.4.0-rc01
Nouveaux comportements
- Les arguments analysés
NavDeepLink
considèrent le symbole de la livre de la même manière que le point d'interrogation en tant que séparateur d'arguments (I21309, b/180042703).
Correction de bugs
- Les liens profonds n'ignorent plus les arguments dont la valeur est identique au nom de l'espace réservé (If8017, b/207389470).
- Correction du problème de plantage de
NavController
lors de l'affichage d'une destination imbriquée à l'aide de transitions après la restauration deNavController
(I0f7c9, b/205021623). - Le message d'erreur causé par l'utilisation d'une
startDestination
non valide est désormais défini par défaut sur l'itinéraire de la destination de départ, s'il y en a un (I86b9d, b/208041894).
Corrections de bugs dans Navigation Compose
- Résolution du plantage potentiel causé par le basculement rapide entre la destination de départ et une autre destination via les éléments du menu de navigation inférieur (Ic8976, b/208887901).
- La destination des boîtes de dialogue est désormais correctement restaurée en haut de l'écran lorsque la configuration est modifiée ou à la fin du processus (I4c0dc, b/207386169).
- Correction d'une erreur lors de la récupération d'un
ViewModel
à partir d'uneNavBackStackEntry
d'une boîte de dialogue lorsque l'utilisateur l'ignorait (I6b96d, b/206465487). - Correction d'un problème qui entraînait l'apparition de recompositions infinies lors de l'utilisation de destinations
activity
avec leNavHost
de Navigation Compose. (I8f64c) - Correction d'une fuite dans Navigation Compose, où une référence à l'ancienne activité était conservée après une modification de configuration ou à la fin du processus (I4efcb, b/204905432).
Corrections de bugs dans Safe Args
- Correction du plantage de
SafeArgs
lorsqu'un utilisateur tente de restaurer des tableaux parcelables après la fin du processus (I618e8, b/207315994). - Correction d'un bug dans Safe Args qui empêchait les tableaux booléens d'avoir une valeur
null
(I8c396, b/174787525).
Version 2.4.0-beta02
3 novembre 2021
Publication d'androidx.navigation:navigation-*:2.4.0-beta02
. Liste des commits de la version 2.4.0-beta02
Modifications apportées à l'API
- Désormais, la gestion des liens profonds explicites et implicites ajoute automatiquement l'indicateur
saveState
lorsque vous accédez à un autre graphique. Vous vous assurez ainsi que du code tel queNavigationUI.setupWithNavController
et du code utilisant plusieurs piles "Retour" fonctionnent comme prévu (Ic8807).
Nouveaux comportements
- Les modèles de liens profonds sont désormais compilés de manière différée dans NavDeepLink plutôt que lors du gonflement. Cela permet de réduire le délai de gonflement des graphiques de navigation incluant des liens profonds (b8d257, b/184149935).
Correction de bugs
- Correction d'un problème qui entraînait le transfert vers le bas de NavBackStackEntries vers
Lifecycle.State.CREATED
après un déplacement versLifecycle.State.STARTED
lorsqueNavHost
était ajouté directement ausetContent()
de l'activité (Ia5ac1, b/203536683). - Correction d'une condition de concurrence où l'affichage d'une destination
DialogFragment
hors de la pile "Retour" avant l'affichage de la boîte de dialogue ne fermait pas cette dernière, ce qui entraînait un plantage lorsque l'utilisateur fermait manuellement la boîte de dialogue (I687e5). - Correction d'une erreur où l'API
onNavDestinationSelected
surNavigationUI
renvoyaittrue
même si vous n'aviez pas accédé (navigate()
) à ce graphique de navigation. Désormais, la même logique que celle utilisée en interne parsetupWithNavController
est utilisée pour ne sélectionner que leMenuItem
associé à la destination actuelle à l'aide de lahierarchy
de la destination (I2b053).
Version 2.4.0-beta01
27 octobre 2021
Publication d'androidx.navigation:navigation-*:2.4.0-beta01
. Liste des commits de la version 2.4.0-beta01
Nouvelles fonctionnalités
- Vous pouvez maintenant utiliser
by navGraphViewModel
avec un itinéraire au lieu d'utiliser un ID afin de faciliter l'utilisation du DSL Kotlin de Navigation avec des fragments (I901e3, b/201446416).
Modifications apportées à l'API
- L'API
visibleEntries
est désormais expérimentale (I93f6f).
Correction de bugs
- Les ViewModels ne sont plus détruits en cas d'interruption des transitions lorsque l'utilisateur quitte et accède de nouveau aux mêmes écrans (Id52d8, b/200817333).
- Les arguments
NavDeepLink
nullables ne nécessitent plus de valeur par défaut lors de l'ajout de liens profonds àNavDestination
(I5aad4, b/201320030). - Les objets NavBackStackEntries dont les cycles de vie sont différents ne sont plus considérés comme égaux. Ainsi, NavHost recompose correctement toutes les destinations lors de la navigation avec singleTop et lorsque l'utilisateur resélectionne des éléments du menu inférieur (I1b351, b/196997433).
- Correction d'un problème lié à
AbstractListDetailFragment
où les attributslayout_width
etlayout_weight
du volet de liste renvoyés paronCreateListPaneView()
étaient mal traités ou ignorés (f5fbf3). - L'état visuel des destinations des boîtes de dialogue reste désormais synchronisé avec l'état de
DialogFragmentNavigator
. Désormais, l'appel manuel de l'APIdismiss()
asynchrone pourDialogFragment
efface correctement toutes les destinations des boîtes de dialogue au-dessus de la boîte de dialogue désormais ignorée. Cela n'affecte pas les situations où vous utilisezpopUpTo
oupopBackStack()
pour fermer la boîte de dialogue (I77ba2). - Désormais,
AbstractAppBarOnDestinationChangedListener
affiche un message d'erreur plus clair pouronDestinationChanged()
(Ie742d).
Version 2.4.0-alpha10
29 septembre 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha10
. Liste des commits de la version 2.4.0-alpha10
Nouvelles fonctionnalités
- NavController offre désormais la possibilité de récupérer la liste de toutes les instances
NavBackStackEntry
visibles via le StateFlowvisibleEntries
(Ia964e). rememberNavController()
accepte désormais un ensemble facultatif d'instancesNavigator
, qui seront ajoutées auNavController
renvoyé pour mieux prendre en charge les navigateurs facultatifs tels que ceux d'Accompanist Navigation Material. (I4619e)
Correction de bugs
- Dynamic Navigation ne plante plus lors d'une nouvelle création d'activité (Ifa6a3, b/197942869).
- Correction du problème d'affichage du bouton "Retour" après le retour à une destination composable contenant un
NavHost
. (3ed148, b/195668143) - Désormais, SafeArgs génère les arguments de
fromBundle()
etfromSavedStateHandle()
dans l'ordre des paramètres approprié (I824a8, b/200059831).
Version 2.4.0-alpha09
15 septembre 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha09
. Liste des commits de la version 2.4.0-alpha09
Nouvelles fonctionnalités
- Vous pouvez désormais utiliser la méthode
clearBackStack()
pour effacer tout état enregistré avecpopBackStack()
oupopUpToSaveState
(I80a0f). - Vous pouvez désormais transmettre une liste d'arguments et/ou de liens profonds vers le compilateur de graphiques de navigation imbriqués. Ils seront automatiquement ajoutés au graphique obtenu (I8a470, b/182545357).
Modifications apportées à l'API
- La fonction
navArgument
du DSL Kotlin fait désormais partie denavigation-common
au lieu denavigation-compose
. Pour continuer à utiliser cette fonction, vous devez mettre à jour les importations (I1d095).
Nouveaux comportements
- Lors de la génération d'arguments, Safe Args place désormais les paramètres sans valeurs par défaut avant ceux avec des valeurs par défaut. (I89709, b/198493585).
Correction de bugs
- Lorsque vous utilisez Navigation Compose, les NavGraphs ne sont détruits (
DESTROYED
) que lorsque tous leurs enfants sontDESTROYED
. (I86552, b/198741720) - Les arguments
NavDeepLink
nullables ne nécessitent plus de valeur par défaut (Ia14ef, b/198689811). - L'appel à
setGraph()
avec un nouveau graphique effacera également toutes les piles "Retour" enregistrées, en plus du comportement précédent qui consiste à afficher la pile "Retour" (I97f96). - Correction d'un problème où les instances
OnDestinationChangedListener
etcurrentBackStackEntryFlow
n'étaient pas notifiées lors de l'utilisation delaunchSingleTop
(Iaaebc).
Mises à jour des dépendances
- Navigation Compose dépend désormais d'Activity Compose 1.3.1 (I05829).
- Navigation Compose dépend désormais de Lifecycle ViewModel Compose
2.4.0-beta01
. (Ib86a3)
Version 2.4.0-alpha08
1er septembre 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha08
. Liste des commits de la version 2.4.0-alpha08
Nouvelles fonctionnalités
- Il est maintenant possible d'étendre la classe
NavType
pour créer des NavTypes personnalisés. Les types personnalisés sont uniquement pris en charge lorsque vous créez votre graphique de navigation par programmation, par exemple via le DSL Kotlin pour graphiques de navigation. (I78440, b/196871885).
Nouveaux comportements
- Lors de la génération d'actions, le code Kotlin généré à partir de Safe Args place les arguments sans valeurs par défaut avant ceux dont les valeurs par défaut sont des paramètres. (Idb697, b/188855904)
- Les liens profonds vérifient désormais que tous les arguments obligatoires (ceux sans valeurs par défaut) sont présents dans l'
Uri
. (#204, b/185527157)
Correction de bugs
- L'utilisation de
getBackStackEntry
et depreviousBackStackEntry
dans composable() avecremember()
ne causera plus d'exception pour les destinations qui ne se trouvent pas sur la pile "Retour" (I75138, b/194313238). - Navigation Compose se recompose désormais correctement lorsque vous modifiez les arguments de pile "Retour" et utilisez
launchSingleTop=true
(Iebd69, b/186392337). - Il n'y aura plus de valeur
ArrayIndexOutOfBoundsException
lorsque vous appelezsetGraph
avec un graphique comportant 13 ou 29 destinations (I1a9f1, b/195171984). - Le générateur Java de SafeArgs ne devrait plus émettre d'avertissements lint lors de la génération de classes Args (I1a666, b/185843837).
Contribution externe
- Merci à ospixd de s'être assuré que les liens profonds vérifient que tous les arguments requis (ceux sans valeurs par défaut) sont présents dans l'
Uri
. (#204, b/185527157)
Version 2.4.0-alpha07
18 août 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha07
. Liste des commits de la version 2.4.0-alpha07
Correction de bugs
- Désormais, Navigation Compose enregistre correctement l'état après modification de la configuration et lors de la modification des graphiques, tout en utilisant la fonctionnalité de piles "Retour" multiples (If5a3d, b/195141957).
- Si vous resélectionnez le même onglet lorsque vous utilisez Navigation Compose avec plusieurs piles "Retour", vous ne verrez plus un écran vide (I860dc, b/194925622).
- Désormais,
NavHost
observe les modifications apportées auLifecycle.State
deNavBackStackEntry
. Ainsi, l'utilisation deNavHost
dans un fragment sera désormais correctement recomposée au fur et à mesure que le cycle de vie change, au lieu d'entraîner un écran vide (I4eb85, b/195864489). - Correction d'un problème où la fermeture de
DialogFragment
ne mettait pas correctement à jour l'étatNavController
après avoir recréé votre activité (par exemple, après une modification de configuration) (Icd72b). - Correction d'un problème où l'affichage d'une boîte de dialogue ne mettait pas à jour le traitement du bouton "Retour" du système NavController, ce qui le poussait à intercepter le bouton "Retour" même s'il n'y avait pas de pile "Retour" à afficher (If3b34).
- Désormais, Safe-args génère automatiquement une méthode
toSavedStateHandle
pour les arguments, que vous pouvez utiliser pour tester votre codeViewModel
(If1e2d, b/193353880).
Version 2.4.0-alpha06
4 août 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha06
. Liste des commits de la version 2.4.0-alpha06
Modifications apportées à l'API
- Les méthodes
requireSlidingPaneLayout()
etrequireDetailPaneNavHostFragment()
surAbstractListDetailFragment
ont été renomméesgetSlidingPaneLayout()
etgetDetailPaneNavHostFragment()
respectivement (I34a08).
Nouveaux comportements
- Lorsque vous naviguez avec des animations (comme
Crossfade
), leLifecycle
de la nouvelle destination n'atteindra l'étatRESUMED
qu'à la fin de l'animation (If0543, b/172112072, b/194301889). - Le
NavHost
de Navigation Compose définit désormais le graphique de la première composition (Ieb7be).
Correction de bugs
- L'affichage de la dernière destination d'un graphique de navigation ne génère plus de
ClassCastException
(If0543, b/172112072, b/194301889). - Correction d'une
NullPointerException
qui se produisait lors de l'ajout d'un lien profond sansUri
et de la navigation via un itinéraire ou un lien profond (938a0c, b/193805425). - Correction d'un problème dans Navigation Compose qui empêchait une
RESUMED
de lien profond d'atteindre l'étatNavBackStackEntry
(I192c5). - Correction d'un problème où l'affichage d'une boîte de dialogue ne mettait pas à jour le traitement du bouton "Retour" du système NavController, ce qui le poussait à intercepter le bouton "Retour" même s'il n'y avait pas de pile "Retour" à afficher (aosp/1782668).
Version 2.4.0-alpha05
21 juillet 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha05
. Liste des commits de la version 2.4.0-alpha05
Nouveaux comportements
- Le
NavHost
de Navigation Compose utilise toujours Crossfades lorsque l'utilisateur navigue entre les destinations. (I07049, b/172112072) - Vous pouvez maintenant modifier le graphique d'un NavHost. Les graphiques présentant les mêmes startDestination et destinations seront considérés comme égaux et n'effaceront pas la pile "Retour"
NavController
(I0b8db, b/175392262).
Correction de bugs
- Correction d'une
NoSuchElementException
lors de l'appel depopBackStack()
à partir d'unLifecycleObserver
associé à uneNavBackStackEntry
provoquée par des mises à jour réentrantes de l'état du NavController. (I64621) AbstractListDetailFragment
permet désormais de supprimer complètementSlidingPaneLayout
de votre APK lorsqu'AbstractListDetailFragment
n'est pas utilisé (I611ad).NavGraph
etNavDestination
ignorent désormais la méthode "equals". Ainsi, deux objets présentant les mêmes valeurs seront considérés comme égaux (I166eb, b/175392262).
Version 2.4.0-alpha04
1er juillet 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha04
. Liste des commits de la version 2.4.0-alpha04
Nouvelles fonctionnalités
- L'artefact
navigation-fragment
contient désormais une implémentation prédéfinie d'une mise en page à deux volets via le nouvelAbstractListDetailFragment
Ce fragment utilise unSlidingPaneLayout
pour gérer un volet de liste (fourni par votre sous-classe) et un volet Détails, qui utilise unNavHostFragment
comme implémentation, tel qu'illustré dans notre exemple d'implémentation. (Iac4be, b/191276636) - Le
NavHost
de l'artefactnavigation-compose
prend désormais en charge les destinationsdialog
en plus des destinationscomposable
. Chacune de ces destinations de boîte de dialogue s'affichera dans unDialog
composable, flottant au-dessus de la destinationcomposable
actuelle (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()
}
}
}
Modifications apportées à l'API
- La fonction
add
deNavigatorState
a été renomméepush
. Tous les appels actuels versadd()
devront être remplacés par push() (Ie89fc, b/172112072). - Les instances
Navigator
personnalisées peuvent désormais utiliser les APIpushWithTransaction
etpopWithTransition
surNavigatorState
pour envoyer ou afficher une destination de manière asynchrone. Notez que ces API ne sont pas encore utilisées par les navigateurs inclus (Ic4d7c, b/172112072).
Nouveaux comportements
- Désormais,
NavDeepLinkBuilder
ajoutePendingIntent.FLAG_IMMUTABLE
auPendingIntent
renvoyé parcreatePendingIntent()
pour assurer le bon fonctionnement de l'API lorsqu'Android 12 est ciblé. (If8c52)
Correction de bugs
- Correction d'un problème lié à
<include-dynamic>
, qui empêchait de transmettre correctement des arguments au graphique inclus de façon dynamique (I3e115). - Correction d'une
NullPointerException
lorsque l'utilisateur naviguait vers une destination à l'aide d'un argumentstring[]
avec une valeur@null
par défaut (I1fbe8). - Ajoute des règles ProGuard pour
@Navigator.Name
en corrigeant les problèmes liés à l'utilisation du mode complet de l'outil R8 3.1 (I2add9, b/191654433). - SafeArgs n'échouera plus lorsque vous créez votre application avec des versions
Kotlin
antérieures à la version1.5.0
(Icd1ff, b/190739257).
Version 2.4.0-alpha03
16 juin 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha03
. Liste des commits de la version 2.4.0-alpha03
Correction de bugs
- Correction d'un problème où deux appels
navigate()
étaient nécessaires pour accéder à un graphique dynamique inclus (I7785c, b/188859835). - Correction d'une régression introduite dans Navigation
2.4.0-alpha01
, oùsetupActionBarWithNavController()
ne supprimait pas correctement l'icône Haut lorsque l'utilisateur se trouvait dans une destination de premier niveau (I5d443, b/189868637). - Correction d'une
IllegalStateException
lors de l'appel depopBackStack()
après avoir affiché le graphique racine de NavController (I2a330, b/190265699). - Les règles ProGuard pour
by navArgs()
s'appliquent désormais correctement lorsque vous utiliseznavigation-common
ou tous les artefacts qui en dépendent (I68800, b/190082521). - Un
OnDestinationChangedListener
qui appellenavigate()
la première fois qu'il reçoit un rappel reçoit désormais correctement un deuxième rappel avec la destination à laquelle il a accédé (Ie5f9e, b/190228815). - Safe Args ne plante plus lorsqu'il est utilisé avec des modules de fonctionnalités dynamiques et AGP 7.0 ou une version ultérieure (I69518, b/189966576)
Problème connu
- Safe Args échoue avec une erreur
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
lors de l'utilisation de Gradle6.7.0
car il dépend d'une ancienne version de Kotlin. Vous pouvez contourner ce problème en utilisant la version 7.0 de Gradle (b/190739257).
Version 2.4.0-alpha02
2 juin 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha02
. Liste des commits de la version 2.4.0-alpha02.
Nouvelles fonctionnalités
- Les routes sont désormais compatibles avec Activity, Fragment et Dialog, ainsi que dans tout le DSL Kotlin de DynamicNavigation (Ib5544, Ia617b, I22f96, b/188914648, b/188901565).
NavigationUI
a temporairement ajouté des API expérimentales pour permettre de désactiver l'enregistrement de votre état. Bien que l'enregistrement de l'état soit toujours le comportement correct, il existe toujours des utilisations de bibliothèques obsolètes (c'est-à-dire des fragments conservés), qui ne peuvent pas être prises en charge lors de l'enregistrement de l'état. Ainsi, les applications cessent d'utiliser graduellement des API non compatibles (Idf93c).Navigation fournit désormais les API
findDestination()
etgetHierarchy()
pour faciliter l'implémentation d'une méthode NavigationUI personnalisée.findDestination()
est une fonction d'extension deNavGraph
qui permet de localiser la destination dans un graphique.getHierarchy()
est une fonction deNavDestination
qui permet de vérifier si une destination donnée se trouve dans la hiérarchie d'une autre destination (I2932f, b/188183365).val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
Les méthodes NavigationUI qui utilisaient une
BottomNavigationView
ont été mises à jour pour utiliser à la place sa super-classeNavigationBarView
introduite dans Material1.4.0
. Cela permet d'utiliser ces méthodes avecNavigationRailView
. (Ib0b36, b/182938895)Lorsque vous gonflez un élément
<action>
avec XML, les attributs d'animation peuvent utiliser des attributs extraits de votre thème à l'aide de la syntaxeapp:enterAnim="?attr/transitionEnter"
(I07bc1, b/178291654).
Modifications apportées à l'API
- Les compilateurs DSL Kotlin qui utilisent un ID ont été abandonnés et doivent être remplacés par des compilateurs utilisant des itinéraires (I85b42, b/188816479) (I9f58f, b/188816479).
Correction de bugs
DialogFragmentNavigator
utilise désormais l'APINavigatorState.pop()
pour informerNavController
lorsqu'une boîte de dialogue est fermée à l'aide du bouton "Retour" du système ou en cliquant en dehors de celui-ci afin de s'assurer que l'étatNavController
est toujours synchronisé avec l'état du navigateur. (I2ead9)Navigation ne génère plus de
ConcurrentModificationException
lorsque vous manipulez la liste d'OnDestinationChangedListeners
à partir d'un rappelonDestinationChanged
(Ib1707, b/188860458).Safe Args ne plante plus lorsqu'il tente de générer des propriétés de direction en Kotlin (Id2416, b/188564435).
La méthode setId sur NavDestination est désormais correctement annotée avec
@IdRes
pour n'accepter que les ID de ressources (I69b80).Le paramètre int de
findNode
est désormaisresId
au lieu deresid
(I7711d).
Mise à jour de la dépendance
- Safe Args dépend désormais du plug-in Android Gradle 4.2.0. Vous ne devriez donc plus recevoir d'avertissement lorsque vous utilisez
applicationIdTextResource
. (I6d67b, b/172824579)
Version 2.4.0-alpha01
18 mai 2021
Publication d'androidx.navigation:navigation-*:2.4.0-alpha01
. Liste des commits de la version 2.4.0-alpha01
Nouvelles fonctionnalités
- La méthode
currentBackStackEntryAsFlow()
surNavController
fournit unFlow
qui émet chaque fois que laNavBackStackEntry
actuelle change. Ce flux peut être utilisé pour vous éviter d'avoir à gérer manuellement unOnDestinationChangedListener
. (I19c4a, #89, b/163947280)
Plusieurs piles "Retour"
NavController est chargé de gérer la pile "Retour" des destinations en ajoutant des destinations à cette pile lorsque vous y accédez (navigate()
) et en les supprimant lorsque vous appelez popBackStack()
ou déclenchez le bouton "Retour" du système. La classe NavOptions
existante et l'intégration dans les entrées <action>
du code XML du graphique de navigation ont été développées pour permettre l'enregistrement et la restauration de la pile "Retour" (b/80029773).
Désormais, les méthodes NavigationUI
de onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
et NavigationView.setupWithNavController()
enregistrent et restaurent automatiquement l'état des destinations qui s'affichent, ce qui permet de prendre en charge plusieurs piles "Retour" sans modifier le code. Il s'agit de la méthode recommandée pour intégrer plusieurs piles "Retour" lorsque vous utilisez la fonctionnalité Navigation avec des fragments. (Ie07ca)
Les API sous-jacentes permettant d'enregistrer et de restaurer l'état sont exposées via plusieurs surfaces :
Dans le fichier XML de Navigation, l'élément
<action>
peut désormais utiliser les attributs booléensapp:popUpToSaveState
etapp:restoreState
pour enregistrer l'état de toutes les destinations affichées viaapp:popUpTo
et restaurer l'état associé à la destination transmise commeapp: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” />
Dans le DSL Kotlin
navOptions
, vous pouvez ajouter les propriétés booléennesrestoreState
etsaveState
dans le compilateurpopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
Lorsque vous créez manuellement un objet
NavOptions
viaNavOptions.Builder
, vous pouvez utilisersetRestoreState()
et une nouvelle surcharge danssetPopUpTo()
, lequel accepte un paramètresaveState
supplémentaire.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
Les appels programmatiques à
popBackStack()
peuvent maintenant inclure un paramètresaveState
supplémentaire.
Dans tous les cas, NavController
enregistre et restaure l'état de chaque NavBackStackEntry
, y compris les instances ViewModel
limitées à la destination de la navigation. Les API Navigator
ont été mises à jour pour permettre à chaque Navigator
d'enregistrer et de restaurer son propre état.
Le ComposeNavigator
utilisé pour les destinations composable
dans Navigation Compose, ainsi que les FragmentNavigator
et DynamicFragmentNavigator
utilisés pour les destinations <fragment>
dans Navigation avec les fragments ont tous deux été mis à jour pour utiliser les nouvelles API du navigateur det d'enregistrer et de restaurer l'état.
Itinéraires de Navigation
Un itinéraire est une String
qui identifie une destination de manière unique. Auparavant utilisé dans Navigation Compose uniquement, ce concept est désormais intégré aux principales API de Navigation. Il s'agit d'une alternative aux ID d'entiers pour la création de votre graphique via la DSL Kotlin de Navigation (b/172823546).
Toutes les API qui utilisaient uniquement un ID présentent désormais une surcharge qui prend un itinéraire String
. Cela inclut navigate()
, popBackStack()
, popUpTo()
et getBackStackEntry()
.
Ce changement a eu ces conséquences sur l'API :
- La propriété Kotlin
popUpTo
du DSL Kotlin a été abandonnée au profit depopUpToId
. (I59c73, b/172823546) - L'API
getStartDestination()
a été abandonnée au profit degetStartDestinationId()
. (I0887f, b/172823546).
Pour les développeurs qui passent des versions précédentes de Navigation Compose à Navigation Compose 2.4.0-alpha01
, les importations suivantes sur les méthodes d'extension ne sont plus nécessaires et doivent être supprimées :
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'argument KEY_ROUTE
a été remplacé par la propriété route
sur NavDestination
, ce qui vous permet d'appeler directement navBackStackEntry.destination.route
.
Modifications apportées à l'API
- Tous les artefacts de Navigation ont été réécrits en Kotlin. Cela a amélioré la possibilité de valeur nulle des classes à l'aide d'éléments génériques (comme les sous-classes
NavType
). Toutes les fonctions de l'extension Kotlin qui faisaient partie des artefacts-ktx
ont été déplacées vers leurs artefacts principaux respectifs. Les artefacts-ktx
continueront d'être publiés, mais ils seront complètement vides. (b/184292145) NavDeepLinkBuilder
permet désormais d'ajouter différentes destinations à la pile "Retour" générée (I3ee0d, b/147913689).- Des fonctions de fabrique pour
DynamicNavHostFragment
ont été ajoutées (Icd515, b/175222619). - L'ID unique d'un
NavBackStackEntry
est désormais exposé dans son API publique (Ie033a). - Les champs
name
etargument
ainsi que les fonctions de déstructuration deNamedNavArgument
sont désormais publics (#174, b/181320559). - Une extension
NavBackStackEntry#provideToCompositionLocals
fournissant laNavBackStackEntry
à la composition locale appropriée a été introduite (#175, b/187229439).
Safe Args
Désormais, Safe Args génère une méthode
fromSavedStateHandle()
pour chaque classeNavArgs
. (#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) }
Mise à jour de Safe Args pour qu'il dépende de KotlinPoet
1.8.0
. (#172, b/183990444)
Nouveaux comportements
- Désormais, Navigation dépend de Lifecycle
2.3.1
, et marquesetGraph()
,popBackStack()
,navigateUp()
etnavigate()
(les méthodes qui mettent à jourNavBackStackEntry
Lifecycle
) comme@MainThread
afin d'aligner Navigation sur l'application forcée du thread principal introduite dans Lifecycle2.3.0
. (b/171125856). - L'analyse des arguments Enum à partir de liens profonds n'est plus sensible à la casse, ce qui permet à un lien profond tel que
http://www.example.com/red
de correspondre à un lien profondwww.example.com/{color}
, même lorsque l'énumération présente la valeurRED
(#152, b/135857840).
Compatibilité avec Compose
androidx.navigation:navigation-compose:2.4.0-alpha01
n'est compatible qu'avec les versions1.0.0-beta07
et ultérieures de Compose.
Correction de bugs
- Correction d'un problème où les espaces réservés d'arguments de fin prévalaient sur les liens profonds qui présentaient le même suffixe (#153, b/184072811).
- Désormais,
NavHostFragment
prend en charge les navigateurs personnalisés qui utilisent le même@Navigator.Name("dialog")
que l'élémentDialogFragmentNavigator
par défaut (Ib1c2c, b/175979140). - Amélioration du comportement de
NavigatorProvider#addNavigator
pour éviter les problèmes lorsqu'il est appelé plusieurs fois avec la même instance. (#176, b/187443146)
Contributions externes
- Merci à simonschiller d'avoir permis la prise en charge de Safe Args en générant une méthode
fromSavedStateHandle()
pour chaque classeNavArgs
. (#122, b/136967621) - Merci à Bradleycorn d'avoir rendu sensible à la casse l'analyse des arguments Enum des liens profonds (#152, b/135857840).
- Merci à osipxd d'avoir résolu un problème où les espaces réservés d'arguments de fin prévalaient sur les liens profonds présentant le même suffixe (#153, b/184072811).
- Merci à tatocaster d'avoir mis à jour Safe Args pour qu'il dépende de KotlinPoet
1.8.0
. (#172, b/183990444) - Merci à jossiwolf avoir rendu les champs
name
etargument
et les fonctions de déstructuration deNamedNavArgument
publiques (#174, b/181320559). - Merci à jossiwolf d'avoir présenté une nouvelle extension
NavBackStackEntry#provideToCompositionLocals
qui permet de fournirNavBackStackEntry
aux compositions locales pertinentes (#175, b/187229439). - Merci à jossiwolf d'avoir amélioré le comportement de
NavigatorProvider#addNavigator
pour éviter les problèmes lorsqu'il est appelé plusieurs fois avec la même instance. (#176, b/187443146)
Navigation Compose version 1.0.0
Version 1.0.0-alpha10
7 avril 2021
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha10
. Liste des commits de la version 1.0.0-alpha10
Modifications apportées à l'API
NavHost
accepte désormais unModifier
, qui est transmis au conteneur composable qui encapsule les composables de destination (I85aca, b/175125483).
Correction de bugs
- Désormais,
NavHost
fonctionne même si aucunOnBackPressedDispatcherOwner
n'est trouvé, comme c'est le cas lorsque vous prévisualisezNavHost
(I7d8b4). - Navigation Compose dépend désormais de Navigation
2.3.5
, ce qui résout un problème lors de l'utilisation deBackHandler
dans une destinationNavHost
(I7e63b, b/182284739).
Version 1.0.0-alpha09
10 mars 2021
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha09
. Liste des commits de la version 1.0.0-alpha09
Modifications apportées à l'API
LocalViewModelStoreOwner.current
affiche désormais un objetViewModelStoreOwner
pouvant être nul pour mieux déterminer si un objetViewModelStoreOwner
est disponible dans la composition actuelle. Les API qui nécessitent unViewModelStoreOwner
, tels queviewModel()
etNavHost
, génèrent quand même une exception si aucun élémentViewModelStoreOwner
n'est défini. (Idf39a).
Correction de bugs
- Navigation Compose dépend désormais de Navigation 2.3.4, qui inclut le correctif permettant d'essayer de définir le même objet ViewModelStore une fois le graphique défini (I65c24, b/177825470).
Version 1.0.0-alpha08
24 février 2021
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha08
. Liste des commits de la version 1.0.0-alpha08
Nouvelles fonctionnalités
NavHost
renseigne désormais le champLocalSavedStateRegistryOwner
de CompositionLocal avec laNavBackStackEntry
de la destination pour que tout état enregistré directement dansSavedStateRegistry
soit enregistré et restauré en même temps que la destination (I435d7, b/179469431).
Version 1.0.0-alpha07
10 février 2021
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha07
. Liste des commits de la version 1.0.0-alpha07
Mises à jour des dépendances
- Navigation Compose dépend désormais de Lifecycle ViewModel Compose 1.0.0-alpha01 pour assurer la prise en charge de
viewModel()
pour les destinationscomposable
(I7a374). NavHost
utilise désormais le nouveauLocalOnBackPressedDispatcherOwner
d'Activity-Compose 1.3.0-alpha01 pour obtenir l'OnBackPressedDispatcher
défini sur leNavController
(I65b12).
Version 1.0.0-alpha06
28 janvier 2021
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha06
. Liste des commits de la version 1.0.0-alpha06
Modifications apportées à l'API
- Ajout d'une méthode d'extension
getBackStackEntry(route: String)
surNavController
afin de renvoyer leNavBackStackEntry
associé (If8931).
Version 1.0.0-alpha05
13 janvier 2021
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha05
. Liste des commits de la version 1.0.0-alpha05.
Mise à jour de la version pour dépendre de Compose 1.0.0-alpha10.
Version 1.0.0-alpha04
16 décembre 2020
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha04
. Liste des commits de la version 1.0.0-alpha04
- Mise à jour permettant la compatibilité avec Compose
1.0.0-alpha09
.
Version 1.0.0-alpha03
2 décembre 2020
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha03
. Liste des commits de la version 1.0.0-alpha03
Correction de bugs
- Correction d'un problème qui empêchait
popBackStack()
etnavigateUp()
de fonctionner après une modification de configuration ou un processus de fin et de recréation (Icea47, b/173281473). - La navigation vers un graphique imbriqué dans votre NavHost fonctionne désormais correctement (I0948d, b/173647694).
Version 1.0.0-alpha02
11 novembre 2020
Publication d'androidx.navigation:navigation-compose:1.0.0-alpha02
. Liste des commits de la version 1.0.0-alpha02.
Modifications apportées à l'API
- Navigation Compose prend désormais en charge NavOptions pour utiliser les opérations popUpTo et launchSingleTop (If96c3, b/171468994).
- Ajout d'une fonction de navigation qui suit un itinéraire au lieu d'un ID qui vous permet de construire des graphiques imbriqués dans le DSL de Navigation Compose (I1661d).
- startDestination précède désormais l'itinéraire dans la liste des paramètres d'un NavHost (Ie620e).
- Vous pouvez maintenant créer un graphique en utilisant l'itinéraire comme destination de départ en dehors d'un composable NavHost (Iceb75).
Version 1.0.0-alpha01
28 octobre 2020
Publication d'android.navigation:navigation-compose:1.0.0-alpha01
. Liste des commits de la version 1.0.0-alpha01
Nouvelles fonctionnalités
L'artefact navigation-compose
permet l'intégration entre le composant Navigation et Jetpack Compose. Il utilise les fonctions @Composable
comme destinations dans votre application.
Cette version initiale fournit :
- Un composable
NavHost
qui vous permet de créer votre graphique de navigation via un DSL Kotlin. - Un champ d'application du cycle de vie,
ViewModel
, et la mémorisation de l'état au niveau de la destination. - Une intégration automatique au bouton "Retour" du système.
- La possibilité de transmettre des arguments, d'associer des liens profonds à des destinations et de renvoyer un résultat à des destinations précédentes.
- Possibilité de composer des assistants spécifiques dans
rememberNavController()
etcurrentBackStackEntryAsState()
pour permettre de hisser un état et de connecter leNavController
aux composables en dehors deNavHost
(une barre de navigation inférieure par exemple).
Pour en savoir plus, consultez le guide de navigation avec Compose.
Version 2.3.5
Version 2.3.5
7 avril 2021
Publication d'androidx.navigation:navigation-*:2.3.5
. Liste des commits de la version 2.3.5
Nouvelles fonctionnalités
- Lorsque vous naviguez à l'aide de
NavDeepLinkRequest
ou d'unUri
, vous pouvez désormais accéder àUri
, à l'action et au type MIME dans la destination obtenue en récupérant l'intent à partir des arguments viaKEY_DEEP_LINK_INTENT
. Ils reflètent la fonctionnalité déjà disponible pour les liens profonds externes (I975c3, b/181521877).
Correction de bugs
- Ajout d'
OnBackPressedCallbacks
à un coordinateur avecNavBackStackEntry
, car désormais, LifecycleOwner intercepte correctement après que l'état du cycle de vie de l'activité soitSTOPPED
, puisSTARTED
(Iff94f, b/182284739). - L'analyse du domaine des liens profonds n'est plus sensible à la casse, garantissant ainsi que
www.example.com
correspond à la fois àwww.example.com
et àwww.Example.com
. Notez que les noms des paramètres de requête sont toujours sensibles à la casse (#144, b/153829033). - Correction d'une
NullPointerException
qui pouvait se produire lorsqu'une destination comportait plusieurs arguments non nullables par défaut et que l'utilisateur accédait à cette destination en remplaçant seulement un sous-ensemble de ces arguments (aosp/1644827).
Mises à jour des dépendances
- Le plug-in Gradle de Navigation Safe Args dépend désormais du plug-in Gradle de Kotlin 1.4.31 (aosp/1661058, b/181156413).
Contribution externe
- Merci à
bentrengrove
d'avoir créé la demande d'extraction permettant de rendre l'analyse du domaine des liens profonds non sensible à la casse (#144, b/153829033).
Version 2.3.4
Version 2.3.4
10 mars 2021
Publication d'androidx.navigation:navigation-*:2.3.4
. Liste des commits de la version 2.3.4
Nouvelles fonctionnalités
- Les arguments
ReferenceType
peuvent désormais être correctement analysés lorsqu'ils sont envoyés dans un URI de lien profond. La valeur entière brute et les valeurs hexadécimales précédées du préfixe0x
sont ainsi prises en charge. (#127, b/179166693) - La valeur
android:defaultValue
d'un argument avecapp:argType="float"
accepte désormais les valeurs entières par défaut, ce qui vous permet d'utiliserandroid:defaultValue="0"
au lieu d'utiliser0.0
(#117, b/173766247).
Correction de bugs
- Correction du blocage de la progression de l'installation lors de l'utilisation de la prise en charge par Navigation des fonctionnalités dynamiques (Ib27a7, b/169636207).
- L'appel de
setViewModelStore
ou desetLifecycleOwner
avec le même objet déjà défini est désormais une opération no-op (Idf491, b/177825470). - Safe-Args ajoute désormais des annotations de suppression sur les méthodes correctes lors de l'utilisation de Java (I8fbc5, b/179463137).
Contributions externes
- Merci à
JvmName
d'avoir créé une demande d'extraction pour assurer que les argumentsReferenceType
puissent maintenant être correctement analysés lorsqu'ils sont envoyés dans un URI de lien profond. (#127, b/179166693) - Merci à
tatocaster
d'avoir créé la demande d'extraction pour permettre à la valeurdefaultValue
d'un argument avecapp:argType=”float”
de prendre en charge les valeurs entières par défaut (#117, b/173766247).
Version 2.3.3
Version 2.3.3
27 janvier 2021
Publication d'androidx.navigation:navigation-*:2.3.3
. Liste des commits de la version 2.3.3
Correction de bugs
- Correction du plantage lors de l'affichage d'une
NavBackStackEntry
avant le déplacement de sonLifecycle
versCREATED
(Ie3ba3). - Correction de la régression causée par b/171364502, où l'accès à une activité dont la valeur de la ressource d'animation était
0
provoquait uneResourceNotFoundException
(I7aedb, b/176819931).
Version 2.3.2
Version 2.3.2
2 décembre 2020
Publication d'androidx.navigation:navigation-*:2.3.2
. Liste des commits de la version 2.3.2
Correction de bugs
- Correction d'une régression dans
NavigationUI
où l'utilisation d'une destination<activity>
aveconNavDestinationSelected
ne permettait pas d'accéder à Activity (I22e34, b/171364502). - Correction d'un problème où
navigation-dynamic-features-fragment
entraînait l'accès répété à la nouvelle destination (aosp/1486056, b/169636207). - Correction d'un problème où les arguments par défaut n'étaient pas envoyés aux instances
OnDestinationChangedListener
lors de l'utilisation delaunchSingleTop
(I2c5cb). - Correction d'un problème où l'accès à un graphique de navigation imbriqué ne créait pas d'instance de graphique sur la pile "Retour" (Ifc831).
- Correction d'un problème où l'utilisation de
navigate()
avecpopUpTo
qui permettait de supprimer la dernière destination d'un graphique de navigation ne détruisait pas ni ne supprimait immédiatement le graphique de navigation de la pile "Retour" (I910a3). - SafeArgs de Navigation utilise désormais la version 1.7.2 de KotlinPoet, qui permet la prise en charge du mode API explicite de Kotlin (I918b5).
NavHostFragment.findNavController(Fragment)
vérifie également la vue du décor de la racine d'un DialogFragment en plus des vérifications existantes de la hiérarchie du fragment et de sa hiérarchie des vues. Cela vous permet de tester les fragments de boîtes de dialogue qui utilisent Navigation avecFragmentScenario
etNavigation.setViewNavController()
(I69e0d).
Version 2.3.1
Version 2.3.1
14 octobre 2020
Publication d'androidx.navigation:navigation-*:2.3.1
. Liste des commits de la version 2.3.1
Nouvelles fonctionnalités
- Les ressources Animator par défaut ont été ajoutées à l'UI de Navigation et sont recommandées par rapport aux ressources d'animation par défaut (b/167430145).
- Désormais, NavOptions ignore les méthodes hashCode et equals (b/161586466).
- Navigation inclut désormais la destination actuelle dans l'exception IllegalArgumentException "Aucune destination avec ID", ce qui devrait améliorer l'expérience de débogage pour les développeurs (b/168311416).
Correction de bugs
- Safe Args n'encapsulera plus la ligne de retour, même si le nom de la classe d'argument générée comporte plus de 100 caractères (b/168584987).
Modifications de la dépendance
navigation-ui
dépend désormais de DrawerLayout 1.1.1 pour queNavigationUI
puisse ouvrir le panneau, même lors de l'utilisation deLOCK_MODE_LOCKED_CLOSED
ou deLOCK_MODE_LOCKED_OPEN
(b/162253907).- Safe Args dépend désormais de KotlinPoet 1.6.0 (aosp/1435911).
- Safe Args dépend désormais d'AGP 4.0.1 (aosp/1442337).
Version 2.3.0
Version 2.3.0
24 juin 2020
Publication d'androidx.navigation:navigation-*:2.3.0
. Liste des commits de la version 2.3.0
Principales modifications depuis la version 2.2.0
- Intégration du module de fonctionnalité : les artefacts
navigation-dynamic-features-runtime
etnavigation-dynamic-features-fragment
vous permettent d'accéder aux destinations définies dans les modules de fonctionnalités, en gérant automatiquement l'installation de ces modules selon les besoins. Pour en savoir plus, consultez la section Naviguer avec des modules de fonctionnalités. - Tests de navigation : l'artefact
navigation-testing
fournit unTestNavHostController
qui permet de définir la destination actuelle et de vérifier la pile "Retour" après les opérations de navigation. Pour en savoir plus, consultez la section Tester la navigation. - Affichage d'un résultat : la
NavBackStackEntry
associée à chaque destination dans la pile "Retour" de Navigation vous permet désormais d'accéder à unSavedStateHandle
adapté au stockage de quelques états enregistrés à associer à une entrée de pile "Retour" donnée. Pour en savoir plus, consultez la section Renvoyer un résultat à la destination précédente. - Prise en charge d'
Openable
dansNavigationUI
: toutes les utilisations deDrawerLayout
dansNavigationUI
ont été remplacées parOpenable
, une interface plus générique ajoutée dans CustomView1.1.0
et implémentée parDrawerLayout
dans DrawerLayout1.1.0
. - Prise en charge des actions et des types MIME dans les liens profonds : les liens profonds ont été développés pour prendre en charge
app:action
etapp:mimeType
en plus de l'élémentapp:uri
précédemment disponible.NavController
permet désormais de naviguer en associant n'importe lesquels de ces champs via la nouvelle classeNavDeepLinkRequest
. Pour en savoir plus, consultez la rubrique Naviguer à l'aide de NavDeepLinkRequest.
Problèmes connus
- Les liens profonds et les types MIME ne sont pas encore pris en charge dans Manifest Merger. Tant que cette opération n'est pas terminée, les éléments
<intent-filter>
générés à partir de l'élément<nav-graph>
dans votre fichier manifeste n'incluront pas votre type MIME dans son élément<data>
ni votre<action>
personnalisé. Vous devez ajouter manuellement une<intent-filter>
adapté à votre fichier manifeste.
Version 2.3.0-rc01
10 juin 2020
Publication d'androidx.navigation:navigation-*:2.3.0-rc01
. Liste des commits de la version 2.3.0-rc01
Correction de bugs
- Correction d'une
NullPointerException
lors du remplacement d'une instance de destination sans argument par une autre instance avec des arguments viasingleTop
(b/158006669). - Toutes les exceptions
destination is unknown
générées parNavController
disposent maintenant d'informations de débogage supplémentaires pour déterminer l'état deNavController
(b/157764916).
Version 2.3.0-beta01
20 mai 2020
Publication d'androidx.navigation:navigation-*:2.3.0-beta01
. Liste des commits de la version 2.3.0-beta01
Correction de bugs
- Correction d'une erreur où le
Lifecycle
deNavBackStackEntry
n'était pas correctement mis à jour à la fin du processus (b/155218371). - Les instances
OnDestinationChangedListener
enregistrées avant d'appelersetGraph()
sont désormais correctement envoyées à la destination restaurée à la fin du processus (b/155218371). - Désormais, lors de l'utilisation de
singleTop
, les arguments deNavBackStackEntry
sont correctement mis à jour et envoyés à toutes les instancesOnDestinationChangeListener
(b/156545508).
Mises à jour des dépendances
- L'artefact
NavigationUI
dépend désormais de CustomView1.1.0-rc01
et de DrawerLayout1.1.0-rc01
(aosp/1309696).
Version 2.3.0-alpha06
29 avril 2020
Publication d'androidx.navigation:navigation-*:2.3.0-alpha06
. Liste des commits de la version 2.3.0-alpha06
Nouvelles fonctionnalités
- Les liens profonds ont été développés pour prendre en charge
app:action
etapp:mimeType
en plus de l'élémentapp:uri
déjà disponible. Désormais, NavController prend en charge la navigation avec n'importe quelle association de ces champs via la nouvelle classeNavDeepLinkRequest
(b/136573074, b/135334841).
Modifications apportées à l'API
- La prise en charge des destinations de Dynamic Navigation avec le DSL Kotlin a été considérablement améliorée (b/148969800).
Correction de bugs
- Correction d'un problème où les intents de lien profond étaient ignorés lors de l'utilisation d'une destination de départ imbriquée (b/154532067).
Version 2.3.0-alpha05
15 avril 2020
Publication d'androidx.navigation:navigation-*:2.3.0-alpha05
. Liste des commits de la version 2.3.0-alpha05
Nouvelles fonctionnalités
- Lorsque vous incluez des graphiques dynamiques avec
<include-dynamic>
, vous n'avez plus besoin de spécifierapp:graphPackage
. Un élément par défaut sera utilisé en ajoutant le suffixemoduleName
àapplicationId
après le point. Un espace réservé${applicationId}
est désormais pris en charge pour personnalisergraphPackage
(b/152696768). - Le DSL Kotlin de Navigation Graph expose désormais un
Map
defaultArguments
pour les actions, reflétant la possibilité de définir des valeurs par défaut sur les éléments<action>
dans les fichiers XML de Navigation (b/150345605).
Correction de bugs
- À partir de Navigation 2.2.2 : correction d'une
IllegalStateException
lors de l'ajout d'un lien profond à la destination de départ de votre graphique lorsqu'Activity comportait plusieurs instancesNavHostFragment
(b/147378752).
Mises à jour des dépendances
- Navigation dépend désormais de Fragment
1.2.4
(aosp/1277325). - Dynamic Navigation dépend désormais de Play Core
1.7.2
(aosp/1282257).
Version 2.3.0-alpha04
18 mars 2020
Publication d'androidx.navigation:navigation-*:2.3.0-alpha04
. Liste des commits de la version 2.3.0-alpha04
Nouvelles fonctionnalités
- Ajout de la prise en charge de l'activité des modules de fonctionnalités et des destinations de fragment dans le DSL Kotlin de Navigation (b/148969800).
Modifications apportées à l'API
- La classe
DynamicExtras
n'utilise plus de schéma de compilateur et peut désormais être construite directement (aosp/1253671). DynamicActivityNavigator
utilise désormaisContext
dans son constructeur à la place d'Activity
(aosp/1250252).
Correction de bugs
- Désormais,
NavigationUI
n'ignore plus les libellés vides (par exemple, une destination avecandroid:label=””
) et définit correctement le titre sur une chaîne vide. (b/148679860).
Mises à jour des dépendances
- Les artefacts Navigation Dynamic Features dépendent désormais de Play Core
1.6.5
(b/149556401).
Version 2.3.0-alpha03
4 mars 2020
Publication d'androidx.navigation:navigation-*:2.3.0-alpha03
. Liste des commits de la version 2.3.0-alpha03.
Modifications apportées à l'API
- Au lieu de s'appuyer sur la classe concrète
DrawerLayout
,AppBarConfiguration
utilise désormais l'interfaceOpenable
introduite dans CustomView1.1.0-alpha02
(queDrawerLayout
implémente depuis la version DrawerLayout1.1.0-alpha04
), ce qui vous permet d'utiliser des implémentations personnalisées d'Openable
avecNavigationUI
(b/129030452).
Correction de bugs
- Désormais, les règles ProGuard
navigation-common-ktx
conservent uniquement les classesNavArgs
utilisées plutôt que l'ensemble des instancesNavArgs
. (b/150213558).
Modifications de la dépendance
- Navigation a rétabli sa dépendance à Core
1.2.0
et dépend désormais de Core1.1.0
. Ainsi, les développeurs n'ont pas besoin d'adopter une dépendance plus récente lorsque Navigation ne dépend d'aucune nouvelle API dans Core1.2.0
.
Version 2.3.0-alpha02
19 février 2020
Publication d'androidx.navigation:navigation-*:2.3.0-alpha02
. Liste des commits de la version 2.3.0-alpha02
Nouvelles fonctionnalités
NavBackStackEntry
vous permet désormais d'accéder à unSavedStateHandle
adapté au stockage de quelques états enregistrés à associer à une entrée de pile "Retour" donnée. Consultez la section Renvoyer un résultat pour obtenir un exemple de cas d'utilisation (b/79672220).
Modifications apportées à l'API
- Les méthodes
getCurrentBackStackEntry()
etgetPreviousBackStackEntry()
ont été ajoutées pour faciliter la récupération d'uneNavBackStackEntry
pour les destinations actuelle et précédente (b/79672220).
Correction de bugs
navigateUp()
transmet désormais les arguments de la destination actuelle et leKEY_DEEP_LINK_INTENT
à la destination précédente lors du lancement de votre application sur votre propre pile de tâches (b/147456890).
Modifications de la dépendance
- Navigation dépend désormais de Core
1.2.0
.
Version 2.3.0-alpha01
5 février 2020
Publication d'androidx.navigation:navigation-*:2.3.0-alpha01
. Liste des commits de la version 2.3.0-alpha01
Nouvelles fonctionnalités
- Le nouvel artefact
navigation-testing
fournit une classeTestNavHostController
. Cette classe fournit une alternative à l'utilisation d'unNavController
fictif lors des tests de Navigation qui vous permet de définir la destination actuelle et de vérifier la pile "Retour" après les opérations de navigation (b/140884273). - Le nouveau
navigation-dynamic-features-fragment
(et sa dépendance transitive,navigation-dynamic-features-runtime
) vous permet d'inclure des destinations ou des graphiques de navigation complets (via<include-dynamic>
) à partir de modules de fonctionnalités, pour simplifier l'installation des modules de fonctionnalités à la demande pour accéder à ces destinations. Pour en savoir plus, consultez la section Naviguer avec des modules de fonctionnalités. (b/132170186)
Correction de bugs
- À partir de Navigation
2.2.1
, les liens profonds sans paramètres de requête ignorent désormais correctement tous les paramètres de requête au lieu de les ajouter aux éléments{argument}
de fin ou de ne pas correspondre au lien profond (b/147447512). - À partir de Navigation
2.2.1
, les règles ProGuardnavigation-ui
deDrawerArrowDrawable
ont été mises à jour pour queandroid.enableJetifier=true
ne soit pas requis (b/147610424). - À partir de Navigation
2.2.1
, le modulenavigation-common-ktx
porte désormais un nom de package de fichier manifeste unique au lieu de partager le même nom quenavigation-runtime-ktx
(aosp/1141947).
Mises à jour des dépendances
- À partir de Navigation
2.2.1
, Navigation2.2.1
dépend désormais de Lifecycle ViewModel SavedState2.2.0
et de Fragment1.2.1
.
Version 2.2.2
Version 2.2.2
15 avril 2020
Publication d'androidx.navigation:navigation-*:2.2.2
. Liste des commits de la version 2.2.2
Correction de bugs
- Correction d'une
IllegalStateException
lors de l'ajout d'un lien profond vers la destination de départ de votre graphique lorsqu'Activity comportait plusieurs instancesNavHostFragment
(b/147378752). - Désormais,
NavigationUI
n'ignore plus les libellés vides (par exemple, une destination avecandroid:label=””
) et définit correctement le titre sur une chaîne vide. Ce correctif a déjà été publié dans Navigation 2.3.0-alpha04 (b/148679860). - Désormais, les règles ProGuard
navigation-common-ktx
conservent uniquement les classesNavArgs
utilisées plutôt que l'ensemble des instancesNavArgs
. Ce correctif a déjà été publié dans Navigation 2.3.0-alpha03 (b/150213558).
Mises à jour des dépendances
- Navigation dépend désormais de Fragment
1.2.4
(aosp/1277325).
Version 2.2.1
Version 2.2.1
5 février 2020
Publication d'androidx.navigation:navigation-*:2.2.1
. Liste des commits de la version 2.2.1
Correction de bugs
- Les liens profonds sans paramètres de requête ignorent désormais correctement tous les paramètres de requête au lieu de les ajouter aux éléments
{argument}
de fin ou de ne pas correspondre au lien profond (b/147447512). - Les règles ProGuard
navigation-ui
deDrawerArrowDrawable
ont été mises à jour pour queandroid.enableJetifier=true
ne soit pas requis (b/147610424). - Le module
navigation-common-ktx
porte désormais un nom de package de fichier manifeste unique au lieu de partager le même quenavigation-runtime-ktx
(aosp/1141947).
Mises à jour des dépendances
- Navigation
2.2.1
dépend désormais de Lifecycle ViewModel SavedState2.2.0
et de Fragment1.2.1
.
Version 2.2.0
Version 2.2.0
22 janvier 2020
Publication d'androidx.navigation:navigation-*:2.2.0
. Liste des commits de la version 2.2.0.
Changements importants depuis la version 2.1.0
- NavBackStackEntry : vous pouvez désormais appeler
NavController.getBackStackEntry()
, en transmettant l'ID d'une destination ou d'un graphique de navigation dans la pile "Retour". L'entréeNavBackStackEntry
renvoyée fournit unLifecycleOwner
contrôlé par Navigation,ViewModelStoreOwner
(le même que celui renvoyé parNavController.getViewModelStoreOwner()
), etSavedStateRegistryOwner
, en plus des arguments utilisés pour démarrer cette destination. - Lifecycle ViewModel SavedState Integration :
SavedStateViewModelFactory
est désormais la fabrique par défaut utilisée lorsque vous utilisezby navGraphViewModels()
ou le constructeurViewModelProvider
avec unViewModelStoreOwner
renvoyé parNavController.getBackStackEntry()
ouNavController.getViewModelStoreOwner()
. - Prise en charge des paramètres de requête pour les liens profonds : les liens profonds comportant des paramètres de requête acceptent désormais les paramètres de requête réorganisés. Les arguments ayant une valeur par défaut ou nullables sont désormais facultatifs lors de la mise en correspondance de liens profonds.
- Prise en charge améliorée des animations :
NavHostFragment
utilise désormaisFragmentContainerView
à partir de Fragment 1.2.0, ce qui corrige les problèmes d'ordre de plan d'animation et d'encarts de fenêtre distribués à Fragments.
Version 2.2.0-rc04
18 décembre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-rc04
. Liste des commits de la version 2.2.0-rc04
Correction de bugs
- Modification des animations de fondu par défaut utilisées par
navigation-ui
pour correspondre aux animations de fondu modifiées dans Fragment1.2.0-rc04
(b/145769814).
Version 2.2.0-rc03
4 décembre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-rc03
. Liste des commits de la version 2.2.0-rc03
Correction de bugs
- Correction d'un problème lié à l'analyse des liens profonds lors de l'utilisation de paramètres de requête et d'un argument en tant que dernière partie du chemin d'accès, qui empêchait l'analyse de plus d'un caractère de l'argument de chemin final (b/144554689).
- Correction d'un problème lié à l'analyse des liens profonds où les paramètres facultatifs recevaient
"@null"
au lieu denull
(b/141613546). - Désormais
NavHostFragment
restaure correctement le graphique après une modification de configuration lorsqu'il est utilisé avecFragmentContainerView
(b/143752103).
Modifications de la dépendance
- Navigation dépend désormais de Lifecycle
2.2.0-rc03
, de Lifecycle ViewModel SavedState1.0.0-rc03
, d'Activity1.1.0-rc03
et de Fragment1.2.0-rc03
, le cas échéant.
Version 2.2.0-rc02
7 novembre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-rc02
. Liste des commits de la version 2.2.0-rc02
Modifications de la dépendance
- Navigation dépend désormais d'androidx.lifecycle
2.2.0-rc02
.
Version 2.2.0-rc01
23 octobre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-rc01
sans aucune modification par rapport à la version 2.2.0-beta01
. Liste des commits de la version 2.2.0-rc01
Version 2.2.0-beta01
9 octobre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-beta01
. Liste des commits de la version 2.2.0-beta01
Nouvelles fonctionnalités
NavDestination
et ses sous-classes remplacent désormaistoString()
pour fournir des informations plus utiles lors du débogage (b/141264986).
Nouveaux comportements
- Les paramètres de requête supplémentaires sont désormais ignorés lors de la mise en correspondance des liens profonds, au lieu de provoquer un échec de mise en correspondance (b/141482822).
Correction de bugs
- Correction d'un problème où les arguments du chemin d'accès d'un lien profond étaient ignorés si des paramètres de requête étaient également spécifiés (b/141505755).
- Amélioration du message d'erreur signalant l'absence d'éléments supplémentaires dans l'extension
navArgs()
Kotlin surActivity
(b/141408999). - Les classes Java
Directions
générées par Safe Args contiennent désormais les valeurs par défaut (b/141099045). - Les classes Java
Args
générées par Safe Args contiennent désormais les valeurs par défaut (b/140123727). - Lorsque vous utilisez un
Toolbar
,NavigationUI
n'anime plus le changement de texte entre deux destinations de niveau supérieur (b/140848160).
Version 2.2.0-alpha03
18 septembre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-alpha03
. Liste des commits de la version 2.2.0-alpha03.
Nouveaux comportements
- L'appel de
setViewModelStore()
aprèssetGraph
génère désormais uneIllegalStateException
. Il doit toujours être défini parNavHost
lors de la configuration initiale pour garantir que toutes les instancesNavBackStackEntry
disposent d'un espace de stockage cohérent pour les instancesViewModel
(aosp/1111821).
Correction de bugs
- Correction d'une
ConcurrentModificationException
lors de l'utilisation d'instancesViewModel
associées à plusieurs instancesViewModelStore
limitées au graphique de navigation (aosp/1112257).
Version 2.2.0-alpha02
5 septembre 2019
Publication d'androidx.navigation:navigation-*:2.2.0-alpha02
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- Les liens profonds comportant des paramètres de requête acceptent désormais les paramètres de requête réorganisés. Les arguments ayant une valeur par défaut ou nullables sont désormais facultatifs lors de la mise en correspondance de liens profonds (b/133273839).
- Vous pouvez maintenant appeler
NavController.getBackStackEntry()
, en indiquant l'ID d'un graphique de destination ou de navigation dans la pile "Retour". L'entréeNavBackStackEntry
renvoyée fournit unLifecycleOwner
contrôlé par Navigation,ViewModelStoreOwner
(le même que celui renvoyé parNavController.getViewModelStoreOwner()
), etSavedStateRegistryOwner
, en plus des arguments utilisés pour démarrer cette destination. (aosp/1101691, aosp/1101710).
Correction de bugs
- Correction d'un problème où l'ajout d'un
NavHostFragment
àViewPager2
entraînait un échec et uneIllegalArgumentException
. (b/133640271) NavInflater
évite désormais d'appeler inutilementgetResourceName()
, ce qui réduit le temps de gonflement (jusqu'à 40 %) (b/139213740).
Version 2.2.0-alpha01
7 août 2019
Publication d'androidx.navigation:navigation-*:2.2.0-alpha01
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
SavedStateViewModelFactory
est désormais la fabrique par défaut lorsque vous utilisezby navGraphViewModels()
ou le constructeurViewModelProvider
avec unViewModelStoreOwner
renvoyé parNavController.getViewModelStoreOwner()
(b/135716331).
Modifications apportées à l'API
- À partir de Navigation
2.1.0-rc01
: l'API obsolètegetViewModelStore()
surNavController
introduite dans la version2.1.0-alpha02
a été supprimée (aosp/1091021).
Correction de bugs
NavHostFragment
utilise désormaisFragmentContainerView
pour corriger les problèmes d'ordre de plan d'animation et d'encarts de fenêtre distribués à Fragments (b/137310379).
Version 2.1.0
Version 2.1.0
5 septembre 2019
Publication d'androidx.navigation:navigation-*:2.1.0
. Les commits inclus dans cette version sont disponibles sur cette page.
Changements importants depuis la version 2.0.0
- Limitation de la portée des ViewModels à un graphique de navigation : vous pouvez désormais créer des ViewModels dont la portée est définie au niveau du graphique de navigation via le délégué de propriété
by navGraphViewModels()
pour les utilisateurs Kotlin utilisant des bibliothèques-ktx
ou à l'aide de l'APIgetViewModelStoreOwner()
ajoutée àNavController
. Pour en savoir plus, consultez la section Partager des données d'interface utilisateur entre les destinations. - Destinations de la boîte de dialogue : vous pouvez désormais créer des destinations
<dialog>
qui afficheront unDialogFragment
lorsque vous y accédez (navigate
).NavHostFragment
prend en charge les destinations des boîtes de dialogue par défaut. Pour en savoir plus, consultez la section Créer une destination à partir d'un DialogFragment. - Naviguer à partir de l'URI : vous pouvez désormais naviguer (
navigate
) à l'aide d'unUri
, qui utilise le<deepLink>
que vous avez ajouté à une destination pour y accéder. Pour en savoir plus, consultez la section Naviguer à l'aide de l'URI. - NavHostController : les API utilisées spécifiquement pour construire un
NavHost
personnalisé ont été déplacées versNavHostController
. Elles permettent aux implémentations de connecter leurNavController
auxLifecycleOwner
,OnBackPressedDispatcher
etViewModelStore
d'hébergement.
Version 2.1.0-rc01
7 août 2019
Publication d'androidx.navigation:navigation-*:2.1.0-rc01
. Les commits inclus dans cette version sont disponibles sur cette page.
Modifications apportées à l'API
- L'API obsolète
getViewModelStore()
surNavController
introduite dans2.1.0-alpha02
a été supprimée (aosp/1091021).
Version 2.1.0-beta02
19 juillet 2019
Publication d'androidx.navigation:*:2.1.0-beta02
. Les commits inclus dans cette version sont disponibles sur cette page.
Correction de bugs
- Suppression de la dépendance JaCoCo non intentionnelle introduite dans
2.1.0-beta01
(b/137782950).
Version 2.1.0-beta01
17 juillet 2019
Publication d'androidx.navigation:*:2.1.0-beta01
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- Désormais,
NavigationUI
anime la suppression du bouton haut lorsque vous utilisezsetupWithNavController()
avec un élémentToolbar
ouCollapsingToolbarLayout
(b/131403621).
Correction de bugs
- Correction d'un problème de synchronisation lors de l'utilisation de plusieurs NavHostFragments avec le même conteneur avec
findNavController()
(b/136021571).
Version 2.1.0-alpha06
2 juillet 2019
Publication d'androidx.navigation:*:2.1.0-alpha06
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- L'attribut
app:navGraph
utilisé par NavHostFragment a été déplacé vers l'artefactnavigation-runtime
. Les navigateurs personnalisés pouvant être ajoutés via XML doivent utiliser cet attribut pour être intégrés au panneau "Hôte" de l'éditeur de Navigation (b/133880955).
Modifications apportées à l'API
- L'API
getViewModelStore()
surNavController
a été abandonnée au profit de la nouvelle méthodegetViewModelStoreOwner()
qui renvoieViewModelStoreOwner
. (aosp/987010) - L'implémentation de destinations de fenêtre flottante, telles que les destinations
<dialog>
, a été généralisée dans une interface de repère,FloatingWindow
, que toutes les destinations<dialog>
implémentent désormais. Les méthodes NavigationUI pour interagir avec la barre d'application supérieure ignorent désormais les destinationsFloatingWindow
(b/133600763).
Nouveaux comportements
- Désormais, Navigation synchronise correctement son état avec ce qui s'affiche à l'écran lors de l'utilisation d'une destination
<dialog>
. Par conséquent, Navigation affiche automatiquement les destinations<dialog>
lorsque vous accédez à une destination autre qu'une boîte de dialogue ou une activité, par exemple une destination<fragment>
(b/134089818).
Correction de bugs
- Désormais, Navigation supprime l'animation qui se produit pendant la recréation de l'activité lors de la gestion d'un lien profond afin de corriger un flash visuel (b/130362979).
- Correction d'un bug qui provoquait une désynchronisation de la pile "Retour" au moment de l'affichage d'un fragment lors de l'ajout du fragment initial (b/133832218).
Version 2.1.0-alpha05
5 juin 2019
Publication d'androidx.navigation:*:2.1.0-alpha05
. Les commits inclus dans cette version sont disponibles sur cette page.
Modifications apportées à l'API
- Les API associées à l'hôte sur
NavController
ont été renommées et déplacées versNavHostController
, une nouvelle sous-classe deNavController
(aosp/966091). - La méthode
setHostOnBackPressedDispatcherOwner()
deNavController
a été remplacée par la méthodesetOnBackPressedDispatcher()
deNavHostController
. Vous devez désormais appelersetLifecycleOwner()
avant d'appeler cette méthode (aosp/965409). NavHostController
contient désormais une méthodeenableOnBackPressed(boolean)
qui remplace la classeNavHostOnBackPressedManager
précédemment renvoyée parsetHostOnBackPressedDispatcherOwner()
(aosp/966091).
Correction de bugs
- Correction d'un problème d'exactitude de la pile "Retour" après y avoir accédé avec un URI (b/132509387).
- Désormais, les liens profonds gérés automatiquement par NavController ne se déclenchent qu'une seule fois (b/132754763).
Version 2.1.0-alpha04
16 mai 2019
Publication d'androidx.navigation:*:2.1.0-alpha04
. Les commits inclus dans cette version sont disponibles sur cette page.
Correction de bugs
NavHostFragment
respecte correctementapp:defaultNavHost
lors de l'interception des événements du bouton "Retour" du système, ce qui résout une régression dans Navigation2.1.0-alpha03
b/132077777.- Désormais,
DialogFragmentNavigator
gère correctement les opérationspopBackStack()
etnavigateUp()
(b/132576764). - Correction d'un problème
IllegalStateException: unknown destination during restore
en cas de navigation répétée entre les graphiques imbriqués (b/131733658).
Version 2.1.0-alpha03
7 mai 2019
Publication d'androidx.navigation:*:2.1.0-alpha03
. Les commits inclus dans cette version sont disponibles sur cette page.
Problèmes connus
- NavHostFragment continue d'intercepter le bouton Retour du système malgré l'utilisation d'
app:defaultNavHost="false"
(b/132077777).
Nouvelles fonctionnalités
- Vous pouvez désormais créer des destinations
<dialog>
qui affichent unDialogFragment
lorsque vous y accédez (navigate
).NavHostFragment
prend en charge les destinations des boîtes de dialogue par défaut (b/80267254). - En plus d'appeler
navigate
avec un ID de ressource ou une instanceNavDirections
, vous pouvez maintenant naviguer via unUri
, qui utilise le<deepLink>
que vous avez ajouté à une destination pour accéder à la bonne destination (b/110412864).
Nouveaux comportements
- La vitesse des animations par défaut fournies par NavigationUI est passée de 400 ms à 220 ms pour correspondre à la vitesse d'animation par défaut des activités et des fragments (b/130055522).
Modifications apportées à l'API
- La méthode
createFragmentNavigator()
deNavHostFragment
a été abandonnée et ses fonctionnalités ont été transférées vers la nouvelle méthodeonCreateNavController()
afin d'indiquer plus clairement qu'il s'agit du bon point d'entrée pour ajouter des navigateurs personnalisés lors du sous-classement deNavHostFragment
(b/122802849). - Une méthode
hasDeepLink()
a été ajoutée àNavDestination
pour vous permettre de vérifier si unUri
donné peut être géré par cette destination ou, dans le cas d'unNavGraph
, toute destination dans le graphique de navigation (b/117437718).
Correction de bugs
- Les arguments par défaut sont désormais correctement transmis aux instances
OnDestinationChangedListener
(b/130630686). NavHostFragment
intercepte désormais les événements Retour du système à l'aide d'OnBackPressedDispatcher
, ce qui résout un problème lors de la navigation conditionnelle dans les méthodes de cycle de vie de Fragment lorsque vous revenez à un fragment (b/111598096).- Pour Safe Args, un objet
android:defaultValue=”@null”
avec un élémentapp:argType
non spécifié est désormais correctement déduit en tant qu'argumentstring
(b/129629192).
Version 2.1.0-alpha02
3 avril 2019
Publication d'androidx.navigation:*:2.1.0-alpha02
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- Vous pouvez désormais créer des ViewModels dont la portée est définie au niveau du graphique de navigation via le délégué de propriété
by navGraphViewModels()
pour les utilisateurs Kotlin ou à l'aide de l'APIgetViewModelStore()
ajoutée àNavController
. (b/111614463)
Modifications apportées à l'API
- Vous pouvez maintenant ajouter un
app:targetPackage
à une destination<activity>
pour limiter le nom du package correspondant. Il prend en chargeapp:targetPackage="${applicationId}"
pour limiter le package à votre propre ID d'application (b/110975456).
Correction de bugs
- L'élément
android:name
des destinations<activity>
n'est plus analysé dans une classe au moment du gonflement, ce qui empêche l'erreur ClassNotFoundExceptions lors de l'utilisation de caractéristiques dynamiques (b/124538597).
Version 2.1.0-alpha01
19 mars 2019
Il s'agit de la première version alpha de Navigation 2.1.0
.
Modifications de la dépendance
- Navigation dépend désormais d'
androidx.core:core:1.0.1
et d'androidx.fragment:fragment:1.1.0-alpha05
. Cette version supprime également la dépendance àandroidx.legacy:legacy-support-core-utils:1.0.0
b/128632612.
Modifications apportées à l'API
- Une nouvelle méthode
Navigation.createNavigateOnClickListener(NavDirections)
a été ajoutée comme alternative à la création d'un écouteur de clics avec un ID de ressource et un bundle (b/127631752). FragmentNavigator.instantiateFragment
est désormais obsolète. L'implémentation par défaut utiliseFragmentFactory
pour instancier des fragments (b/119054429).
Correction de bugs
- Navigation n'envoie plus de valeur
Bundle
nulle lorsque des arguments sont associés à une destination, ce qui résout un problème lors de l'utilisation d'android:defaultValue="@null"
(b/128531879). - Safe Args dépend désormais de KotlinPoet 1.1.0, ce qui résout un problème avec les noms de package trop longs (b/123654948).
Version 2.0.0
Version 2.0.0
14 mars 2019
Publication de Navigation 2.0.0
sans aucune modification par rapport à la version 2.0.0-rc02
.
Version 2.0.0-rc02
6 mars 2019
Navigation 2.0.0-rc02 fournit de nouveaux artefacts avec l'ID de groupe androidx.navigation
et remplace ses dépendances par les équivalents AndroidX.
Le comportement de la version 2.0.0-rc02 est identique à celui de la version 1.0.0-rc02 de Navigation. Aucune modification de code ne devrait être requise pour une mise à jour à partir de la version 1.0.0-rc02, hormis la mise à jour des dépendances pour qu'elles correspondent aux nouvelles dépendances.
Votre projet doit avoir été migré vers AndroidX pour utiliser les versions 2.X de Navigation. La version stable 1.0 de Navigation sera la dernière version utilisant les dépendances de la bibliothèque Support. Tous les développements ultérieurs à la version 1.0 seront basés sur AndroidX et s'appuieront sur la version stable 2.0.
Dépendances antérieures à AndroidX
Pour les versions de Navigation antérieures à AndroidX, incluez les dépendances suivantes :
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
}
Pour Safe Args, ajoutez le chemin de classe suivant dans votre fichier build.gradle
de niveau supérieur.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
Version 1.0.0
Version 1.0.0
14 mars 2019
Publication de Navigation 1.0.0
sans aucune modification par rapport à la version 1.0.0-rc02
.
Version 1.0.0-rc02
26 février 2019
Il s'agit de la deuxième version finale pour la version stable de Navigation 1.0.0. Cette version contient un certain nombre de corrections de bugs.
Correction de bugs
- Correction d'un problème où
popBackStack()
était ignoré si le graphique racine ne présentait pas d'ID (b/126251695). navigateUp()
gère désormais correctement la redirection de la tâche vers votre application lorsqu'elle est appelée après avoir géré un lien profond sansFLAG_ACTIVITY_NEW_TASK
(b/126082008).- Correction d'un problème qui empêchait
ActivityNavigator.applyPopAnimationsToPendingTransition
d'appliquer la bonne animation de sortie d'affichage b/126237567. - Désormais, le code Kotlin généré par Safe Args protège correctement les mots clés Kotlin tels que
in
etfun
dans le nom du package associé à la classeR
(b/126020455).
Version 1.0.0-rc01
21 février 2019
Il s'agit d'une version finale de la version stable de Navigation 1.0.0. Cette version contient un correctif.
Correction de bugs
- Correction d'un problème lors de l'utilisation des fragments et des opérations de navigation
singleTop
(b/124294805).
Version 1.0.0-beta02
12 février 2019
Cette version inclut un certain nombre d'améliorations mineures et des corrections de bugs importantes.
Nouvelles fonctionnalités
- Vous pouvez désormais utiliser la valeur
0
commeandroid:defaultValue
pour les argumentsreference
(b/124248602).
Nouveaux comportements
- Les correspondances exactes de liens profonds sont désormais prioritaires sur les liens profonds avec
.*
ou des correspondances d'argument (b/123969518).
Correction de bugs
popBackStack()
etnavigateUp
renvoient désormais correctementfalse
lors de l'affichage de la dernière destination dans la pile "Retour", ce qui corrige une régression introduite dans la version1.0.0-beta01
b/123933201.- Désormais, Navigation définit correctement
ClassLoader
lors de la restauration de l'état d'instance enregistré, ce qui évite les problèmes lors de l'utilisation de classes personnalisées dans l'état deNavigator
enregistré ou d'arguments envoyés àNavDestination
(b/123893858). - Les classes NavArgs générées dans Safe Args ne plantent plus lors de la restauration d'un argument
Parcelable[]
à partir de l'état d'instance enregistré (b/123963545). - Désormais, Safe Args nettoie correctement les classes Kotlin inutiles générées (b/124120883).
Version 1.0.0-beta01
4 février 2019
Il s'agit de la première version bêta de Navigation. À l'avenir, l'API Navigation restera stable jusqu'à la version suivante, sauf en cas de problème critique. Cette version contient des corrections de bugs et des changements de comportement.
Nouveaux comportements
- Navigation garantit désormais que les valeurs par défaut des arguments sont traitées de manière identique au moment de l'exécution et via Safe Args. Par conséquent, seuls les arguments présentant un
app:argType="reference"
peuvent avoir un point de valeur par défaut vers une autre ressource (par exemple,@color/colorPrimary
). Toute tentative d'utilisation d'une valeur de référence par défaut avec unapp:argType
différent entraînera une exception lors de l'analyse du fichier XML de navigation (b/123551990). - Safe Args dépend désormais du plug-in Android Gradle 3.3.0 (aosp/888413).
- Safe Args dépend désormais de Kotlin 1.3.20 (aosp/888414).
Correction de bugs
- Safe Args peut désormais être utilisé dans les modules de la bibliothèque et des fonctionnalités sur toutes les versions du plug-in Android Gradle (b/121304903).
- Correction d'une régression où une seule opération
popBackStack()
affichait toutes les copies d'une destination du haut de la pile "Retour", plutôt qu'une seule destination à la fois (b/123552990). - Correction d'un problème qui provoquait la désynchronisation de l'état de
FragmentNavigator
avec l'état deNavController
, ce qui entraînait uneIllegalStateException
lors de la tentative de restauration de la pile "Retour" (b/123803044). - Correction d'un problème où la flèche de retour gérée par
NavigationUI
ne s'affichait pas lors de l'utilisation de ProGuard avec l'obscurcissement (b/123449431). - Elle est désormais correctement gérée par le code généré par Safe Args à l'aide d'un
app:argType
pointant vers une classe interne statique au format.OuterClass$InnerClass
(b/123736741). - Désormais, le code Java généré par Safe Args gère correctement les actions globales et les destinations profondément imbriquées (b/123347762).
Version 1.0.0-alpha11
23 janvier 2019
Il s'agit d'une version corrective de la version 1.0.0-alpha10
qui permet de corriger un problème avec Safe Args.
Correction de bugs
- Correction d'un problème qui empêchait Safe Args d'importer la classe Directions associée aux actions globales (b/123307342).
Version 1.0.0-alpha10
23 janvier 2019
Problèmes connus
- Safe Args ne parvient pas à importer la classe Directions associée aux actions globales (b/123307342).
Cette version contient des modifications destructives de l'API. Veuillez consulter la section Modifications destructives ci-dessous.
Nouvelles fonctionnalités
- Les utilisateurs Kotlin peuvent désormais utiliser le délégué de la propriété
by navArgs()
pour obtenir en différé une référence à une classeNavArgs
générée par Safe Args dans uneActivity
ou unFragment
(b/122603367). - Safe Args vous permet désormais de générer du code Kotlin en appliquant le plug-in
androidx.navigation.safeargs.kotlin
. Le code Kotlin est conçu spécifiquement pour les modules Kotlin qui utilisent des arguments par défaut et des classes immuables sur la base d'un modèle de compilateur toujours disponible via le plug-inandroidx.navigation.safeargs
précédent (b/110263087).
Nouveaux comportements
- Les liens profonds correspondants sont désormais orientés vers le lien profond qui comporte le plus d'arguments correspondants (b/118393029).
- Désormais, l'appel de
setGraph()
sur unNavController
réinitialise la pile "Retour" (b/111450672). - Les liens profonds inconnus ne génèrent plus d'
IllegalStateException
, mais sont ignorés, ce qui résout les problèmes liés à desNavHostFragment
imbriqués ou multiples (b/121340440).
Modifications destructives
- La méthode
NavOptions.applyPopAnimationsToPendingTransition()
pour appliquer des animations d'affichage à une activité a été déplacée versActivityNavigator
(b/122413117). - Safe Args évite désormais la duplication de classes identiques pour les actions sans argument. Désormais,
NavDirections
est le type renvoyé pour les méthodes sans argument dans les classes NavDirections générées (b/123233147). - Les classes Directions générées par Safe Args n'ont plus de constructeur public. Vous ne devez interagir qu'avec les méthodes statiques générées (b/123031660).
- Les classes
NavDirections
générées par Safe Args n'ont plus de constructeur public. Elles ne doivent être générées que via les méthodes statiques des classes Directions générées (b/122963206). - Le
Bundle
renvoyé à partir desgetArguments()
deNavDirections
est désormais marqué comme@NonNull
au lieu de@Nullable
(b/123243957).
Correction de bugs
- Désormais,
NavDeepLinkBuilder
gère correctement plusieursPendingIntent
simultanés vers la même destination en utilisant les arguments que vous transmettez pour déterminer l'unicité (b/120042732). - Désormais,
NavController
gère correctement les opérationspopBackStack()
lors de l'utilisation d'unNavHostFragment
imbriqué ou d'autres fragments enfants avec une pile "Retour" (b/122770335). - Désormais,
NavigationUI
définit correctement la description du contenu du bouton Haut (b/120395362). - Désormais, les classes Directions générées par Safe Args gèrent correctement les actions globales présentant le même ID qu'une action sur une destination (b/122962504).
- Les classes
NavDirections
générées par Safe Args ont désormais des valeurshashCode()
égales lorsqueequals()
renvoie la valeur "true" (b/123043662). - Amélioration du message d'erreur généré par
FragmentNavigator
lorsque vous tentez d'effectuer desFragmentTransactions
personnalisées sur leFragmentManager
deNavHostFragment
. Vous devez toujours utilisergetChildFragmentManager()
b/112927148.
Version 1.0.0-alpha09
18 décembre 2018
Cette version contient des modifications destructives de l'API. Veuillez consulter la section Modifications destructives ci-dessous.
Nous avons choisi de ne pas continuer à développer l'artefact android.arch.navigation:navigation-testing
. Bien qu'il s'avère utile pour les tests internes de NavController
, nous vous recommandons vivement d'utiliser d'autres stratégies de test, telles que la simulation de l'instance NavController
, afin de vérifier que les bons appels navigate()
sont en cours. Cette approche est décrite en détail dans la conférence sur l'activité unique de l'Android Dev Summit 2018. Nous allons également travailler sur une documentation supplémentaire concernant les tests avec Navigation.
Nouvelles fonctionnalités
- Les
MenuItem
présentant l'élémentmenuCategory="secondary"
ne s'affichent plus dans la pile "Retour" lorsqu'ils sont utilisés avec les méthodesNavigationUI
(b/120104424). AppBarConfiguration
vous permet désormais de définir une instanceOnNavigateUpListener
de remplacement qui sera appelée lorsquenavController.navigateUp()
renvoiefalse
. (b/79993862) (b/120690961)
Modifications destructives
- Lorsque vous utilisez un
<argument>
avec unargType="reference"
, Navigation n'analyse plus la référence, mais fournit l'ID de ressource brute (b/111736515). onNavDestinationSelected()
s'affiche maintenant par défaut sur la destination de départ de votre graphique de navigation pour plus de cohérence avec les méthodessetup
. AjoutezmenuCategory="secondary"
à votreMenuItem
pour éviter l'affichage de la pile "Retour" (aosp/852869).- Les méthodes
fromBundle()
des classesArgs
générées prennent maintenant une valeur deBundle
non nulle au lieu d'une valeur deBundle
nullable (aosp/845616).
Correction de bugs
- Les arguments sont maintenant correctement analysés à partir des liens profonds, en tant que
argType
correct, et non plus en tant que chaînes (b/110273284). - Navigation exporte désormais correctement ses ressources publiques (b/121059552).
- Safe Args est désormais compatible avec le plug-in Android Gradle 3.4 Canary 4 et version ultérieure. (b/119662045)
Version 1.0.0-alpha08
6 décembre 2018
Cette version contient des modifications destructives de l'API. Veuillez consulter la section Modifications destructives ci-dessous.
Nouvelles fonctionnalités
- Lorsqu'ils sont utilisés avec les méthodes
NavigationUI
, les libellés de destination remplacent automatiquement les instances{argName}
dans votreandroid:label
par l'argument approprié (b/80267266). - Navigation dépend désormais de la bibliothèque Support 28.0.0 (b/120293333).
Modifications destructives
OnNavigatedListener
a été renomméOnDestinationChangedListener
(b/118670572).- Désormais,
OnDestinationChangedListener
transmet également leBundle
des arguments (aosp/837142). - Les attributs
app:clearTask
etapp:launchDocument
, ainsi que les méthodes associées, ont été supprimés. Utilisezapp:popUpTo
avec la racine de votre graphique pour supprimer toutes les destinations de votre pile "Retour" (b/119628354). ActivityNavigator.Extras
utilise désormais un schémaBuilder
et permet de définir n'importe quel indicateurIntent.FLAG_ACTIVITY_
(aosp/828140).NavController.onHandleDeepLink
a été renomméhandleDeepLink
(aosp/836063).- De nombreuses classes et méthodes qui ne sont pas destinées au sous-classement, telles que
NavOptions
,NavInflater
,NavDeepLinkBuilder
etAppBarConfiguration
, sont devenuesfinal
(aosp/835681). - La méthode obsolète
NavHostFragment.setGraph()
a été supprimée (aosp/835684). - La méthode obsolète
NavigationUI.navigateUp(DrawerLayout, NavController)
a été supprimée (aosp/835684). - La création de fragments a été déplacée vers
FragmentNavigator
, ce qui permet de déléguer plus facilement la création de fragments à uneFragmentFactory
(b/119054429). - Le constructeur de
NavGraphNavigator
n'utilise plus deContext
(aosp/835340). - NavigatorProvider est désormais une classe plutôt qu'une interface. Aucune modification des fonctionnalités du
NavigatorProvider
renvoyé pargetNavigatorProvider()
(aosp/830660). NavDestination.navigate()
a été supprimé. Appelez plutôtnavigate()
surNavigator
(aosp/830663).- Refactorisation significative de
Navigator
, qui n'a plus besoin deOnNavigatorNavigatedListener
. À la place,navigate
renvoie laNavDestination
vers laquelle il a navigué. - Les instances de
Navigator
ne peuvent plus envoyer d'événements d'affichage auNavController
. Envisagez d'utiliser unOnBackPressedCallback
pour intercepter les pressions sur le bouton "Retour" et appelernavController.popBackStack()
(aosp/833716).
Correction de bugs
popUpTo
fonctionne désormais de manière cohérente lorsque la destination est un élément<navigation>
(b/116831650).- Correction d'un certain nombre de bugs entraînant une
IllegalArgumentException
lors de l'utilisation de graphiques imbriqués (b/118713731 b/113611083 b/113346925 b/113305559). - L'attribut
dataPattern
des destinations<activity>
remplira maintenant les arguments à partir d'arguments qui ne sont pas des chaînes en appelanttoString()
(b/120161365).
Safe Args
- Safe Args prend en charge les objets sérialisables, y compris les valeurs d'énumération. Les types d'énumération peuvent définir une valeur par défaut à l'aide du littéral d'énumération sans le nom de la classe (par exemple,
app:defaultValue="READ"
) (b/111316353). - Safe Args prend en charge les tableaux de tous les types compatibles (b/111487504).
- Safe Args ignore désormais les sous-dossiers des répertoires de ressources (b/117893516).
- Safe Args ajoute les annotations
@Override
le cas échéant (b/117145301).
Version 1.0.0-alpha07
29 octobre 2018
Nouvelles fonctionnalités
- Une nouvelle classe AppBarConfiguration vous permet de personnaliser les destinations considérées comme des destinations de niveau supérieur. Pour en savoir plus, consultez la documentation mise à jour (b/117333663).
- Vous pouvez maintenant transmettre des arguments à la destination de départ de votre graphique (b/110300470).
- Désormais, les liens profonds prennent en charge les schémas personnalisés contenant des points, des tirets et des signes plus (b/112806402).
Modifications destructives
- Le module
navigation-testing-ktx
a été intégré ànavigation-testing artifact
et ne sera plus publié. - L'artefact
navigation-testing
dispose désormais d'une dépendance à la bibliothèque standard Kotlin. L'API a été modifiée pour être plus cohérente avec les conventions Kotlin, mais vous pouvez continuer à l'utiliser pour les tests écrits en Java. - Les graphiques de navigation enregistrés pour le fichier manifeste de métadonnées ne sont plus pris en charge (b/118355937).
- Les actions ne peuvent plus être associées aux destinations <activity> (aosp/785539).
Correction de bugs
- Les liens profonds analysent désormais correctement les paramètres de requête (b/110057514).
- Désormais, les destinations Activity appliquent correctement toutes les animations d'entrée et de sortie (b/117145284).
- Correction d'un plantage survenant après la modification de la configuration lors de l'utilisation de navigateurs personnalisés (b/110763345).
Safe Args
- Safe Args dispose désormais d'une dépendance fixe sur le plug-in Android Gradle 3.2.1 (b/113167627).
- Il est désormais possible de générer des directions pour les classes internes (b/117407555).
- Correction d'un problème lors de la génération de directions pour un graphique <include> (b/116542123).
Version 1.0.0-alpha06
20 septembre 2018
Nouvelles fonctionnalités
- Les transitions d'éléments partagés pour les destinations Fragment et Activity sont désormais prises en charge (b/79665225). Pour en savoir plus, consultez Implémenter la navigation avec le composant d'architecture de Navigation.
- La sélection d'un élément dans
NavigationView
entraînera la fermeture de toute "bottom sheet" avec contenu (b/112158843).
Modifications apportées à l'API
- Modification destructive : la méthode
navigate()
de Navigator utilise désormais un paramètreNavigator.Extras
. - La méthode
getGraph()
de NavController est désormaisNonNull
(b/112243286).
Correction de bugs
NavigationUI.setupWithNavController()
ne fuite plus de vues s'il est utilisé avec des vues provenant de destinations individuelles (b/111961977).- L'élément
onSaveState()
du navigateur n'est désormais appelé qu'une seule fois (b/112627079).
Safe Args
- Les classes Directions de la destination de Navigation étendent désormais la classe Directions de leurs parents, si elle existe (b/79871405).
- Les classes Directions et Args ont désormais une implémentation
toString()
utile. (b/111843389)
Version 1.0.0-alpha05
10 août 2018
Correction de bugs
- Correction d'un bug qui entraîne un comportement incorrect de la pile "Retour" (b/111907708).
- Correction d'un bug dans
equals()
des classes Args générées (b/111450897). - Correction d'un échec de compilation dans Safe Args (b/109409713).
- Correction d'une conversion des identifiants de ressources en noms Java (b/111602491).
- Correction des messages d'erreur concernant la possibilité de valeur nulle dans le plug-in Safe Args.
- Ajout des annotations de possibilité de valeur nulle manquantes.
Version 1.0.0-alpha04
19 juillet 2018
Navigation 1.0.0-alpha04
et le plug-in Safe Args de Gradle associé contiennent un certain nombre de modifications de l'API, de nouveaux comportements et de corrections de bugs.
Modifications apportées à l'API/Nouveaux comportements
- NavHostFragment définit toujours le fragment actuel comme fragment de navigation principal, garantissant ainsi que les gestionnaires de fragments enfants s'affichent avant le NavController externe (b/111345778).
Safe Args
- Modification destructive :
app:type
a été remplacé parapp:argType
pour éviter les conflits avec d'autres bibliothèques telles que ConstraintLayout 2.0.0-alpha1. (b/111110548) - Vous pouvez désormais cliquer sur les messages d'erreur de Safe Args (b/111534438).
- Les classes Args confirment désormais que les attributs
NonNull
ne sont pas nuls (b/111451769). - Des annotations
NonNull
supplémentaires ont été ajoutées aux classes générées NavDirections et Args (b/111455455 b/111455456).
Correction de bugs
- Correction d'un problème lié au bouton "Retour" du système après l'établissement d'un lien profond vers une destination de fragment. (b/111515685)
Version 1.0.0-alpha03
12 juillet 2018
Navigation 1.0.0-alpha03
et le plug-in Safe Args de Gradle associé contiennent un certain nombre de modifications de l'API, de nouveaux comportements et de corrections de bugs.
Modifications apportées à l'API/Nouveaux comportements
- Ajout d'une méthode NavigationUI.setupWithNavController pour la barre d'outils (b/109868820).
- Ajout d'une méthode NavigationUI.setupWithNavController pour CollapsingToolbarLayout (b/110887183).
- popBackStack() renvoie désormais "false" lorsque la pile "Retour" est vide ou lorsque l'ID de destination donné ne figure pas dans la pile "Retour" (b/110893637).
- FragmentNavigator ignore maintenant les opérations de navigation une fois que FragmentManager dispose d'un état enregistré, évitant ainsi les exceptions "Impossible d'exécuter cette action après onSaveInstanceState" (b/110987825).
Safe Args
- Modification destructive : Les caractères non alphanumériques des noms d'actions et d'arguments seront remplacés par une casse mixte dans les noms de méthodes NavDirections respectifs.
- Par exemple,
DemoController.index
deviendrasetDemoControllerIndex
. (b/79995048) - Par exemple,
action_show_settings
deviendraactionShowSettings
. (b/79642240)
- Par exemple,
- Modification destructive : Les arguments sont désormais considérés comme non nuls par défaut. Ajoutez
app:nullable="true"
pour autoriser les valeurs nulles pour les arguments parcelables et de chaîne (b/79642307). - Vous pouvez maintenant utiliser
app:type="long"
avec des defaultValues sous la forme "123L" (b/79563966). - Les arguments parcelables sont désormais pris en charge à l'aide d'un nom de classe complet pour
app:type
. La seule valeur par défaut prise en charge est"@null"
(b/79563966). - Les classes Args implémentent désormais
equals()
ethashCode()
(b/79642246). - Le plug-in Safe Args peut maintenant être appliqué aux projets de bibliothèque (b/80036553).
- Le plug-in Safe Args peut maintenant être appliqué aux projets de fonctionnalité (b/110011752).
Correction de bugs
- Correction des problèmes de navigation lors des méthodes de cycle de vie de Fragment (b/109916080).
- Correction de plusieurs problèmes de navigation dans les graphiques imbriqués (b/110178671).
- Correction de problèmes lors de l'utilisation de
setPopUpTo
avec la première destination dans le graphique (b/109909461). - Correction d'un problème lié à la transmission de toutes les valeurs
app:defaultValue
en tant que chaînes (b/110710788). - L'outil aapt2 fourni avec le plug-in Android Gradle 3.2 (version bêta 01) ajoute désormais des règles de conservation pour chaque attribut
android:name
dans les fichiers XML de Navigation (b/79874119). - Correction d'une fuite de mémoire lors du remplacement du FragmentNavigator par défaut. (b/110900142)
Version 1.0.0-alpha02
7 juin 2018
Nouveaux comportements
FragmentNavigator
utilise désormaissetReorderingAllowed(true)
(b/109826220).Désormais, Navigation analyse les arguments URLDecodes à partir des URL des liens profonds (b/79982454).
Correction de bugs
Correction d'une
IllegalStateException
lors de l'appel de la navigation à partir des méthodes du cycle de vie de Fragment (b/79632233).Navigation dépend désormais de la bibliothèque Support 27.1.1 pour corriger le scintillement des animations (b/80160903).
Correction d'une
IllegalArgumentException
lors de l'utilisation de defaultNavHost="true" comme fragment enfant (b/79656847).Correction d'une
StackOverflowError
lors de l'utilisation de NavDeepLinkBuilder (b/109653065).Correction d'une
IllegalArgumentException
lors du retour à un graphique imbriqué (b/80453447).Correction d'un problème lié au chevauchement des fragments lors de l'utilisation de
launchSingleTop
(b/79407969).Navigation crée désormais la pile "Retour" synthétique appropriée pour les graphiques imbriqués (b/79734195).
NavigationUI met désormais en évidence l'élément approprié lorsque vous utilisez un graphique imbriqué en tant que
MenuItem
(b/109675998).
Modifications apportées à l'API
Abandon de l'attribut
clearTask
pour les actions et l'API associée dansNavOptions
. (b/80338878)Abandon de l'attribut
launchDocument
pour les actions et l'API associée dansNavOptions
. (b/109806636)
Version 1.0.0-alpha01
8 mai 2018
Navigation fournit un framework permettant de créer une navigation dans l'application. Cette version initiale est la version 1.0.0-alpha01
.