Navigation

Navigation est un framework qui permet de naviguer entre des "destinations" dans une application Android. Il apporte de la cohérence à l'API, que les destinations soient implémentées en tant que fragments, activités ou d'autres composants.
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.

Signaler un nouveau problème

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

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 lequel NavHost pouvait générer 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. (I1a429, b/375343407)
  • À partir de Navigation 2.8.5: correction de NavDestination NullPointerException lors de la mise à jour du startDestination 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'un LifecycleObserver associé à un NavBackStackEntry 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 au NavController que ces destinations s'afficheront à côté d'autres destinations. Grâce à cette interface, plusieurs destinations peuvent être RESUMED en même temps, par exemple. (Id5559)
  • À partir de Navigation 2.8.3: ajout de nouvelles vérifications lint pour les modules navigation-common, navigation-runtime et navigation-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'extension NavGraphBuilder et NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • À partir de Navigation 2.8.3: ajout de nouvelles vérifications lint pour les modules navigation-common, navigation-runtime et navigation-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'extension NavGraphBuilder et NavDeepLinkBuilder. (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 une IllegalStateException. (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 erreur Obsolete 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'un LifecycleObserver associé à un NavBackStackEntry 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

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 et navigation-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'extension NavGraphBuilder et NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Ajout de nouvelles vérifications lint pour les modules navigation-common, navigation-runtime et navigation-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'extension NavGraphBuilder et NavDeepLinkBuilder. (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 dans Navigation 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> et List<Double>?, sans nécessiter de NavType 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 de popBackStack à 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'un NavGraph 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 alternative ComposableNavHostFragment à NavHostFragment qui vous permet d'ajouter des destinations composables à vos fichiers XML de navigation. Chaque destination composable 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 attribut android: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 de NavType<T> pour les arguments basés sur des collections tels que les listes, les tableaux et les cartes. Tous les tableaux NavType par défaut (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType et StringArrayType) 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 types Enum ne nécessitent plus de NavType personnalisés. Notez que le SerialName de Enum 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? et Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • Le startDestination de NavGraph utilisera désormais les valeurs d'argument par défaut si la route startDestination 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 les NavGraphs imbriquées partagent le même itinéraire startDestination. (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 vie RESUMED. 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éthode emptyCollection() 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 et serializeAsValues 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 argument CollectionNavType nul. Lorsque vous naviguez avec un CollectionNavType nul, l'argument de sortie correspond à la valeur par défaut déclarée sur votre classe Serializable ou à la valeur de retour de emptyCollection() 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 de NavBackStackEntry.toRoute avec un NavType 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ètre typeMap pour les types d'arguments personnalisés. (Ie39fb, b/339026523)
  • Ajout d'une API de test à navigation-testing pour créer un SavedStateHandle à 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

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 composition LocalFragment locale pour les méthodes composables dans un ComposableFragment. (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 alternative ComposableNavHostFragment à NavHostFragment qui vous permet d'ajouter des destinations composable à vos fichiers XML de navigation. Chaque destination composable 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 attribut android: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

Correction de bugs

  • NavHost utilise désormais Alignment.TopStart comme argument contentAlignment par défaut. Cela le met en conformité avec la valeur par défaut de AnimatedContent 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 de NavGraph directement dans le routage startDestination sans vous appuyer sur defaultValue. Cela s'applique également aux startDestinations NavGraph imbriqués. (I0e0b5, b/109505019, b/188693139)

Modifications apportées à l'API

  • Ajout d'une nouvelle classe abstraite CollectionNavType<T>, une sous-classe de NavType<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 et StringArrayType) sont désormais de type CollectionNavType. (Idcf79, b/188693139)
  • NavType fournit désormais une nouvelle API valueEquals 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 les NavTypes 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 que navigate ou popBackStack peuvent désormais faire correspondre correctement les routes remplies d'arguments de tableau NavTypes. (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 fonctions composable et/ou navigation. (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 en DESTROYED, 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

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 appels saveState 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 de BackStackState, qui entraînait l'enregistrement de plusieurs états en cas d'appels saveState() multiples sur un même NavBackStackEntry, 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 assistants NavigationUI é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é si saveState 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'indicateur FLAG_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 de clearBackStack.

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 de popBackStack. (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 avec popUpTo. (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'état RESUMED 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 vie RESUMED. (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 entre rememberSaveable et NavHost de Navigation Compose qui empêchait l'état rememberSaveable des destinations et toutes les instances SavedStateHandle 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'état STARTED. (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 à un ViewModel 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 de 1.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 et ExitTransition créés dans le cadre de NavHost pouvaient potentiellement rester en mémoire même après la suppression de NavHost 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 le Activity a été STOPPED et RESUMED. (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 avec popUpTo 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 de NavBackStackEntry et les arguments transmis à un OnDestinationChangedListener 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 instances OnDestinationChangedListener.
  • 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 remplacer serializeAsValue pour sérialiser une valeur en chaîne, ce qui permet d'encapsuler entièrement la sérialisation et la désérialisation (via parseValue) dans la classe NavType. StringType remplace désormais cette méthode pour appeler Uri.encode sur la String 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 la startDestination du NavGraph.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route) et NavController.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 DSL navDeepLink 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 fragment 1.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 une FragmentTransaction qui ajoute un fragment à la pile "Retour" de FragmentManager. Vous devez toujours ajouter des fragments via l'API navigate().
  • Lorsque vous utilisez exactement la chaîne ${applicationId} comme espace réservé dans les attributs app:data et app:dataPattern de l'élément "activity" d'un fichier XML de navigation, l'espace réservé est automatiquement renseigné avec la valeur packageName du contexte en cas de gonflement
  • FragmentNavigator utilise désormais les API de transition lors de la navigation et de l'affichage de NavBackStackEntries. Cela signifie que le Lifecycle de NavBackStackEntry attend à présent que les effets spéciaux des fragments d'entrée et de sortie soient terminés avant de passer à leur Lifecycle.State final.
  • DialogFragmentNavigator utilise désormais les API de transition lors de la navigation et de l'affichage de NavBackStackEntries. Cela signifie que le Lifecycle de NavBackStackEntry attend à présent que le Lifecycle de DialogFragment passe à DESTROYED avant de passer lui-même à DESTROYED.
  • NavHostFragment vous permet désormais de récupérer NavController dès que NavHostFragment est associé à FragmentManager, et non seulement après onCreate().
  • 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'un Menu, 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 fonction isTopLevelDestination sur AppBarConfiguration.
  • Les intégrations setupWithNavController de NavigationUI permettant de travailler avec la barre d'application supérieure vont désormais analyser les valeurs R.string des arguments ReferenceType de votre android: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 un MenuItem 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 avec popUpTo dans son rappel de cycle de vie onResume(). (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émentation toString 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 une FragmentTransaction qui ajoute un fragment à la pile "Retour" de FragmentManager. Vous devez toujours ajouter des fragments via l'API navigate(). (I6d38e)
  • Lorsqu'un navigate ajoute une entrée et qu'un popBackStack 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 un NavArgument non nullable, l'itinéraire de cette destination doit contenir des espaces réservés pour les arguments portant le même nom que le NavArgument 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 de NavArgument non nullable requis par le NavDestination auquel Action/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 de onLaunchSingleTop 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érer NavController dès que NavHostFragment est associé à FragmentManager, et non seulement après onCreate(). (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 de NavController 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 ou popBackStack(), et que la transaction utilise ou non des effets pour le fragment. (I81bdf)
  • L'ajout de fragments au FragmentManager de FragmentNavigator sans utiliser la navigation ne provoque plus de plantage. (b17204, b/274167493)

Mises à jour des dépendances

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 et clearBackStack 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 de NavController 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 le BottomNavigationView 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 de Animation. (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 la startDestination 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 à atteindre RESUMED lorsque vous utilisez les API Animation. (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 pas DESTROYED lorsque son fragment est DESTROYED . (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) et NavController.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 de NavBackStackEntries. Cela signifie que le Lifecycle de NavBackStackEntry attend à présent que les effets spéciaux des fragments d'entrée et de sortie soient terminés avant de passer à leur Lifecycle.State final. (I3cb19, b/238686802)
  • DialogFragmentNavigator utilise désormais les API de transition lors de la navigation et de l'affichage de NavBackStackEntries. Cela signifie que le Lifecycle de NavBackStackEntry attend à présent que le Lifecycle de DialogFragment passe à DESTROYED avant de passer lui-même à DESTROYED. (I53ee5, b/261213893)

Modifications apportées à l'API

  • NavigatorState fournit désormais l'API prepareForTransition pour permettre aux Navigator de déplacer NavBackStackEntries vers des Lifecycle.State intermédiaires. (I42c21, b/238686802)
  • Vous pouvez désormais accéder à la pile "Retour" associée à un NavGraphNavigator ou à un ComposeNavigator via une propriété backstack. ComposeNavigator expose désormais également le rappel onTransitionComplete() pour marquer comme terminée une NavBackStackEntry qui a exécuté une opération de navigation ou popBackStack. (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ément NavGraph imbriqué, toutes les destinations commençant de la destination d'origine à sa startDestination 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'indicateur launchSingleTop 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 remplacer serializeAsValue pour sérialiser une valeur en chaîne, ce qui permet d'encapsuler entièrement la sérialisation et la désérialisation (via parseValue) dans la classe NavType. StringType remplace désormais cette méthode pour appeler Uri.encode sur la String donnée. (Ie5213, b/247637434)
  • NavigationUI fournit désormais des journaux lorsque la navigation via un MenuItem 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'exception NoSuchElementException lorsqu'aucune destination n'est disponible pour la composition du Crossfade. 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 de rememberSaveable, par exemple) n'était pas oublié et supprimé lorsqu'une destination était retirée de la pile "Retour". (I64949)

Mises à jour des dépendances

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'un Menu, 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 fonction isTopLevelDestination sur AppBarConfiguration. (Ie936e, b/238496771)

Correction de bugs

  • Le composant navigation:navigation-fragment dépend désormais de la version 1.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 de NavigationUI permettant de travailler avec la barre d'application supérieure vont désormais analyser les valeurs R.string des arguments ReferenceType de votre android: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 attributs app:data et app:dataPattern de l'élément "activity" d'un fichier XML de navigation, l'espace réservé est automatiquement renseigné avec la valeur packageName du contexte en cas de gonflement (Iaabde, b/234223561).
  • Si vous tentez de créer un NavDeepLink vide à l'aide du DSL navDeepLink 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 forme android:label="{arg}" à la chaîne. Prise en charge des arguments ReferenceType en analysant les valeurs R.string dans leurs valeurs de chaîne (I07d89, b/236269380).

Nouveaux comportements

  • Les arguments de NavBackStackEntry et les arguments transmis à un OnDestinationChangedListener 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 instances OnDestinationChangedListener (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'indicateur launchSingleTop 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'exception NoSuchElementException lorsqu'aucune destination n'est disponible pour la composition du Crossfade. 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

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 un Bundle (Id86ed, b/237725966).

Mises à jour des dépendances

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 un ViewModelProvider.Factory sans état via les CreationExtras de Lifecycle 2.5.0.

SafeArgs de Navigation

  • Navigation Safe Args a mis à niveau la dépendance Android Gradle Plugin pour s'appuyer sur 7.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 selon NavController.

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 utilisez applicationIdSuffix et un espace de noms sans applicationId, ou lorsque applicationId 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 fichier navigation.xml (Ic15a5, b/178403185).

Correction de bugs

  • Rétablissement du bon ordre des champs d'application composables dans NavHost et DialogHost : les composables internes sont placés avant les composables externes (I157e6).
  • Utilisation de PathSensitivity.RELATIVE dans ArgumentsGenerationTask 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'appel remember encadrant l'appel de getBackStackEntry() transmet aussi un objet NavBackStackEntry 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ésormais popWithTransition lors de l'exécution d'un appel dismiss(). Cela corrige une condition de concurrence lors de l'utilisation d'un ViewModel dans la destination dialog, ce qui entraînait une IllegalStateException 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 une IllegalStateException lors de l'imbrication d'un NavHost dans un autre NavHost 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

Correction de bugs

  • NavHost dépend désormais de visibleEntries dans NavController pour déterminer les entrées à composer. Cela signifie que lorsque vous utilisez des objets NavHost imbriqués, le NavHost interne doit désormais s'animer correctement (I4ba2b, b/225394514).
  • La valeur StateFlow de visibleEntries fournie par NavController 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ôte navController est inférieur à STARTED, la liste des entrées visibles restera la même (I9e2a8, b/225394514).
  • SavedStateViewFactory est désormais compatible avec CreationExtras, même lorsqu'ils ont été initialisés avec un SavedStateRegistryOwner. 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'aucun AndroidManifest.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 un ViewModel (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é avec NavBackStackEntries 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ément NavHostFragment définit désormais correctement OnBackPressedDispatcher 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éments NavGraph 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

Correction de bugs

  • Correction d'un problème qui renvoyait une IllegalStateException lors de l'accès à un ViewModel créé via by 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 le build.gradle à la place du package dans le fichier AndroidManifest (I659ef, b/217414933).
  • Rétroportage à partir de Navigation 2.5.0-alpha04 : correction du plantage de Navigation Safe Args lorsque des espaces de noms sont utilisés et qu'aucun élément AndroidManifest.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 correctement OnBackPressedDispatcher 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 erreur IllegalStateException lors de l'accès à un ViewModel créé via by navGraphViewModels() à partir du onCreate() 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 les NavDeepLink. 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 nouvel AbstractListDetailFragment Ce fragment utilise un SlidingPaneLayout pour gérer un volet de liste (fourni par votre sous-classe) et un volet Détails, qui utilise un NavHostFragment comme implémentation, tel qu'illustré dans notre exemple d'implémentation.
  • La méthode currentBackStackEntryAsFlow() sur NavController fournit un Flow qui émet chaque fois que la NavBackStackEntry actuelle change. Ce flux peut être utilisé pour vous éviter d'avoir à gérer manuellement un OnDestinationChangedListener.
  • NavController vous permet désormais de récupérer la liste de toutes les instances NavBackStackEntry visibles en tant que StateFlow via la propriété expérimentale visibleEntries.
  • 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() et getHierarchy() pour faciliter l'implémentation d'une méthode NavigationUI personnalisée. findStartDestination() est une fonction d'extension de NavGraph qui permet de localiser la destination de départ réelle affichée lorsque vous accéderez au graphique, même si startDestination est lui-même un NavGraph imbriqué. getHierarchy() est une fonction de NavDestination 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 une BottomNavigationView ont été mises à jour pour prendre à la place sa super-classe NavigationBarView introduite dans Material 1.4.0. Cela permet d'utiliser ces méthodes avec NavigationRailView.

  • 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 syntaxe app:enterAnim="?attr/transitionEnter".

  • Désormais, Safe Args génère une méthode fromSavedStateHandle() pour chaque classe NavArgs. (#122, b/136967621)

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

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 de popUpToId.
  • L'API getStartDestination() a été abandonnée au profit de getStartDestinationId().

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 destinations composable et dialog, 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'état RESUMED 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 erreurs IllegalStateException et les problèmes multipoint en déclenchant uniquement un appel navigate lorsque la valeur de Lifecycle est RESUMED.
  • La limitation de ViewModel (via l'API viewModel() de Lifecycle ViewModel Compose 2.4.0 ou hiltViewModel() de Hilt Navigation Compose 1.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 le onCleared() du ViewModel indiquant la suppression et le nettoyage permanents de l'état associé à ce NavBackStackEntry.
  • 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() et currentBackStackEntryAsState() pour permettre de hisser un état et de connecter le NavController aux composables en dehors de NavHost (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éens app:popUpToSaveState et app:restoreState pour enregistrer l'état de toutes les destinations affichées via app:popUpTo et restaurer l'état associé à la destination transmise comme app:destination :

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Dans le DSL Kotlin navOptions, vous pouvez ajouter les propriétés booléennes restoreState et saveState dans le compilateur popUpTo :

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Lorsque vous créez manuellement un objet NavOptions via NavOptions.Builder, vous pouvez utiliser setRestoreState() et une nouvelle surcharge dans setPopUpTo(), lequel accepte un paramètre saveState 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ètre saveState supplémentaire.

  • Vous pouvez utiliser la méthode clearBackStack() pour effacer tout état enregistré avec popBackStack() ou popUpToSaveState.

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 ajoute PendingIntent.FLAG_IMMUTABLE au PendingIntent renvoyé par createPendingIntent() pour assurer le bon fonctionnement de l'API lorsqu'Android 12 est ciblé.
  • Désormais, Navigation dépend de Lifecycle 2.3.1, et marque setGraph(), popBackStack(), navigateUp() et navigate() (les méthodes qui mettent à jour NavBackStackEntry Lifecycle) comme @MainThread afin d'aligner Navigation sur l'application forcée du thread principal introduite dans Lifecycle 2.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 à un ViewModel créé avec by navGraphViewModels() à partir d'un onCreate() de Fragment échoue avec l'erreur IllegalStateException. (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 de NavController (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'une NavBackStackEntry 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 le NavHost 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 que NavigationUI.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 vers Lifecycle.State.STARTED lorsque NavHost était ajouté directement au setContent() 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 sur NavigationUI renvoyait true 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 par setupWithNavController est utilisée pour ne sélectionner que le MenuItem associé à la destination actuelle à l'aide de la hierarchy 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 attributs layout_width et layout_weight du volet de liste renvoyés par onCreateListPaneView() é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'API dismiss() asynchrone pour DialogFragment 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 utilisez popUpTo ou popBackStack() pour fermer la boîte de dialogue (I77ba2).
  • Désormais, AbstractAppBarOnDestinationChangedListener affiche un message d'erreur plus clair pour onDestinationChanged() (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 StateFlow visibleEntries (Ia964e).
  • rememberNavController() accepte désormais un ensemble facultatif d'instances Navigator, qui seront ajoutées au NavController 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() et fromSavedStateHandle() 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é avec popBackStack() ou popUpToSaveState (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 de navigation-common au lieu de navigation-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 sont DESTROYED. (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 et currentBackStackEntryFlow n'étaient pas notifiées lors de l'utilisation de launchSingleTop (Iaaebc).

Mises à jour des dépendances

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 de previousBackStackEntry dans composable() avec remember() 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 appelez setGraph 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 au Lifecycle.State de NavBackStackEntry. Ainsi, l'utilisation de NavHost 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'état NavController 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 code ViewModel (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() et requireDetailPaneNavHostFragment() sur AbstractListDetailFragment ont été renommées getSlidingPaneLayout() et getDetailPaneNavHostFragment() respectivement (I34a08).

Nouveaux comportements

  • Lorsque vous naviguez avec des animations (comme Crossfade), le Lifecycle de la nouvelle destination n'atteindra l'état RESUMED 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 sans Uri 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'état NavBackStackEntry (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 de popBackStack() à partir d'un LifecycleObserver associé à une NavBackStackEntry provoquée par des mises à jour réentrantes de l'état du NavController. (I64621)
  • AbstractListDetailFragment permet désormais de supprimer complètement SlidingPaneLayout de votre APK lorsqu'AbstractListDetailFragment n'est pas utilisé (I611ad).
  • NavGraph et NavDestination 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 nouvel AbstractListDetailFragment Ce fragment utilise un SlidingPaneLayout pour gérer un volet de liste (fourni par votre sous-classe) et un volet Détails, qui utilise un NavHostFragment comme implémentation, tel qu'illustré dans notre exemple d'implémentation. (Iac4be, b/191276636)
  • Le NavHost de l'artefact navigation-compose prend désormais en charge les destinations dialog en plus des destinations composable. Chacune de ces destinations de boîte de dialogue s'affichera dans un Dialog composable, flottant au-dessus de la destination composable 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 de NavigatorState a été renommée push. Tous les appels actuels vers add() devront être remplacés par push() (Ie89fc, b/172112072).
  • Les instances Navigator personnalisées peuvent désormais utiliser les API pushWithTransaction et popWithTransition sur NavigatorState 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 ajoute PendingIntent.FLAG_IMMUTABLE au PendingIntent renvoyé par createPendingIntent() 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 argument string[] 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 version 1.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 de popBackStack() 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 utilisez navigation-common ou tous les artefacts qui en dépendent (I68800, b/190082521).
  • Un OnDestinationChangedListener qui appelle navigate() 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 Gradle 6.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() et getHierarchy() pour faciliter l'implémentation d'une méthode NavigationUI personnalisée. findDestination() est une fonction d'extension de NavGraph qui permet de localiser la destination dans un graphique. getHierarchy() est une fonction de NavDestination 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-classe NavigationBarView introduite dans Material 1.4.0. Cela permet d'utiliser ces méthodes avec NavigationRailView. (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 syntaxe app: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'API NavigatorState.pop() pour informer NavController 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'état NavController 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 rappel onDestinationChanged (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ésormais resId au lieu de resid (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() sur NavController fournit un Flow qui émet chaque fois que la NavBackStackEntry actuelle change. Ce flux peut être utilisé pour vous éviter d'avoir à gérer manuellement un OnDestinationChangedListener. (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éens app:popUpToSaveState et app:restoreState pour enregistrer l'état de toutes les destinations affichées via app:popUpTo et restaurer l'état associé à la destination transmise comme app:destination :

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Dans le DSL Kotlin navOptions, vous pouvez ajouter les propriétés booléennes restoreState et saveState dans le compilateur popUpTo :

    // 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 via NavOptions.Builder, vous pouvez utiliser setRestoreState() et une nouvelle surcharge dans setPopUpTo(), lequel accepte un paramètre saveState 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ètre saveState 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 de popUpToId. (I59c73, b/172823546)
  • L'API getStartDestination() a été abandonnée au profit de getStartDestinationId(). (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 et argument ainsi que les fonctions de déstructuration de NamedNavArgument sont désormais publics (#174, b/181320559).
  • Une extension NavBackStackEntry#provideToCompositionLocals fournissant la NavBackStackEntry à 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 classe NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • 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 marque setGraph(), popBackStack(), navigateUp() et navigate() (les méthodes qui mettent à jour NavBackStackEntry Lifecycle) comme @MainThread afin d'aligner Navigation sur l'application forcée du thread principal introduite dans Lifecycle 2.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 profond www.example.com/{color}, même lorsque l'énumération présente la valeur RED (#152, b/135857840).

Compatibilité avec Compose

  • androidx.navigation:navigation-compose:2.4.0-alpha01 n'est compatible qu'avec les versions 1.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ément DialogFragmentNavigator 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 classe NavArgs. (#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 et argument et les fonctions de déstructuration de NamedNavArgument publiques (#174, b/181320559).
  • Merci à jossiwolf d'avoir présenté une nouvelle extension NavBackStackEntry#provideToCompositionLocals qui permet de fournir NavBackStackEntry 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)

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 un Modifier, 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 aucun OnBackPressedDispatcherOwner n'est trouvé, comme c'est le cas lorsque vous prévisualisez NavHost (I7d8b4).
  • Navigation Compose dépend désormais de Navigation 2.3.5, ce qui résout un problème lors de l'utilisation de BackHandler dans une destination NavHost (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 objet ViewModelStoreOwner pouvant être nul pour mieux déterminer si un objet ViewModelStoreOwner est disponible dans la composition actuelle. Les API qui nécessitent un ViewModelStoreOwner, tels que viewModel() et NavHost, génèrent quand même une exception si aucun élément ViewModelStoreOwner 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 champ LocalSavedStateRegistryOwner de CompositionLocal avec la NavBackStackEntry de la destination pour que tout état enregistré directement dans SavedStateRegistry 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

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) sur NavController afin de renvoyer le NavBackStackEntry 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() et navigateUp() 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() et currentBackStackEntryAsState() pour permettre de hisser un état et de connecter le NavController aux composables en dehors de NavHost (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'un Uri, 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 via KEY_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 avec NavBackStackEntry, car désormais, LifecycleOwner intercepte correctement après que l'état du cycle de vie de l'activité soit STOPPED, puis STARTED (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éfixe 0x sont ainsi prises en charge. (#127, b/179166693)
  • La valeur android:defaultValue d'un argument avec app:argType="float" accepte désormais les valeurs entières par défaut, ce qui vous permet d'utiliser android:defaultValue="0" au lieu d'utiliser 0.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 de setLifecycleOwner 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 arguments ReferenceType 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 valeur defaultValue d'un argument avec app: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 son Lifecycle vers CREATED (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 une ResourceNotFoundException (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> avec onNavDestinationSelected 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 de launchSingleTop (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() avec popUpTo 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 avec FragmentScenario et Navigation.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 que NavigationUI puisse ouvrir le panneau, même lors de l'utilisation de LOCK_MODE_LOCKED_CLOSED ou de LOCK_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 et navigation-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 un TestNavHostController 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 à un SavedStateHandle 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 dans NavigationUI : toutes les utilisations de DrawerLayout dans NavigationUI ont été remplacées par Openable, une interface plus générique ajoutée dans CustomView 1.1.0 et implémentée par DrawerLayout dans DrawerLayout 1.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 et app:mimeType en plus de l'élément app:uri précédemment disponible. NavController permet désormais de naviguer en associant n'importe lesquels de ces champs via la nouvelle classe NavDeepLinkRequest. 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 via singleTop (b/158006669).
  • Toutes les exceptions destination is unknown générées par NavController disposent maintenant d'informations de débogage supplémentaires pour déterminer l'état de NavController (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 de NavBackStackEntry n'était pas correctement mis à jour à la fin du processus (b/155218371).
  • Les instances OnDestinationChangedListener enregistrées avant d'appeler setGraph() 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 de NavBackStackEntry sont correctement mis à jour et envoyés à toutes les instances OnDestinationChangeListener (b/156545508).

Mises à jour des dépendances

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 et app:mimeType en plus de l'élément app:uri déjà disponible. Désormais, NavController prend en charge la navigation avec n'importe quelle association de ces champs via la nouvelle classe NavDeepLinkRequest (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écifier app:graphPackage. Un élément par défaut sera utilisé en ajoutant le suffixe moduleName à applicationId après le point. Un espace réservé ${applicationId} est désormais pris en charge pour personnaliser graphPackage (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 instances NavHostFragment (b/147378752).

Mises à jour des dépendances

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ésormais Context 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 avec android: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'interface Openable introduite dans CustomView 1.1.0-alpha02 (que DrawerLayout implémente depuis la version DrawerLayout 1.1.0-alpha04), ce qui vous permet d'utiliser des implémentations personnalisées d'Openable avec NavigationUI (b/129030452).

Correction de bugs

  • Désormais, les règles ProGuard navigation-common-ktx conservent uniquement les classes NavArgs utilisées plutôt que l'ensemble des instances NavArgs. (b/150213558).

Modifications de la dépendance

  • Navigation a rétabli sa dépendance à Core 1.2.0 et dépend désormais de Core 1.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 Core 1.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 à un SavedStateHandle 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() et getPreviousBackStackEntry() ont été ajoutées pour faciliter la récupération d'une NavBackStackEntry pour les destinations actuelle et précédente (b/79672220).

Correction de bugs

  • navigateUp() transmet désormais les arguments de la destination actuelle et le KEY_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

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 classe TestNavHostController. Cette classe fournit une alternative à l'utilisation d'un NavController 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 ProGuard navigation-ui de DrawerArrowDrawable ont été mises à jour pour que android.enableJetifier=true ne soit pas requis (b/147610424).
  • À partir de Navigation 2.2.1, le module navigation-common-ktx porte désormais un nom de package de fichier manifeste unique au lieu de partager le même nom que navigation-runtime-ktx (aosp/1141947).

Mises à jour des dépendances

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 instances NavHostFragment (b/147378752).
  • Désormais, NavigationUI n'ignore plus les libellés vides (par exemple, une destination avec android: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 classes NavArgs utilisées plutôt que l'ensemble des instances NavArgs. Ce correctif a déjà été publié dans Navigation 2.3.0-alpha03 (b/150213558).

Mises à jour des dépendances

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 de DrawerArrowDrawable ont été mises à jour pour que android.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 que navigation-runtime-ktx (aosp/1141947).

Mises à jour des dépendances

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ée NavBackStackEntry renvoyée fournit un LifecycleOwner contrôlé par Navigation, ViewModelStoreOwner (le même que celui renvoyé par NavController.getViewModelStoreOwner()), et SavedStateRegistryOwner, 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 utilisez by navGraphViewModels() ou le constructeur ViewModelProvider avec un ViewModelStoreOwner renvoyé par NavController.getBackStackEntry() ou NavController.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ésormais FragmentContainerView à 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 Fragment 1.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 de null (b/141613546).
  • Désormais NavHostFragment restaure correctement le graphique après une modification de configuration lorsqu'il est utilisé avec FragmentContainerView (b/143752103).

Modifications de la dépendance

  • Navigation dépend désormais de Lifecycle 2.2.0-rc03, de Lifecycle ViewModel SavedState 1.0.0-rc03, d'Activity 1.1.0-rc03 et de Fragment 1.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ésormais toString() 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 sur Activity (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ès setGraph génère désormais une IllegalStateException. Il doit toujours être défini par NavHost lors de la configuration initiale pour garantir que toutes les instances NavBackStackEntry disposent d'un espace de stockage cohérent pour les instances ViewModel (aosp/1111821).

Correction de bugs

  • Correction d'une ConcurrentModificationException lors de l'utilisation d'instances ViewModel associées à plusieurs instances ViewModelStore 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ée NavBackStackEntry renvoyée fournit un LifecycleOwner contrôlé par Navigation, ViewModelStoreOwner (le même que celui renvoyé par NavController.getViewModelStoreOwner()), et SavedStateRegistryOwner, 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 une IllegalArgumentException. (b/133640271)
  • NavInflater évite désormais d'appeler inutilement getResourceName(), 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 utilisez by navGraphViewModels() ou le constructeur ViewModelProvider avec un ViewModelStoreOwner renvoyé par NavController.getViewModelStoreOwner() (b/135716331).

Modifications apportées à l'API

  • À partir de Navigation 2.1.0-rc01 : l'API obsolète getViewModelStore() sur NavController introduite dans la version 2.1.0-alpha02 a été supprimée (aosp/1091021).

Correction de bugs

  • NavHostFragment utilise désormais FragmentContainerView 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'API getViewModelStoreOwner() 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 un DialogFragment 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'un Uri, 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 vers NavHostController. Elles permettent aux implémentations de connecter leur NavController aux LifecycleOwner, OnBackPressedDispatcher et ViewModelStore 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() sur NavController introduite dans 2.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 utilisez setupWithNavController() avec un élément Toolbar ou CollapsingToolbarLayout (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'artefact navigation-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() sur NavController a été abandonnée au profit de la nouvelle méthode getViewModelStoreOwner() qui renvoie ViewModelStoreOwner. (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 destinations FloatingWindow (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 vers NavHostController, une nouvelle sous-classe de NavController (aosp/966091).
  • La méthode setHostOnBackPressedDispatcherOwner() de NavController a été remplacée par la méthode setOnBackPressedDispatcher() de NavHostController. Vous devez désormais appeler setLifecycleOwner() avant d'appeler cette méthode (aosp/965409).
  • NavHostController contient désormais une méthode enableOnBackPressed(boolean) qui remplace la classe NavHostOnBackPressedManager précédemment renvoyée par setHostOnBackPressedDispatcherOwner() (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 correctement app:defaultNavHost lors de l'interception des événements du bouton "Retour" du système, ce qui résout une régression dans Navigation 2.1.0-alpha03 b/132077777.
  • Désormais, DialogFragmentNavigator gère correctement les opérations popBackStack() et navigateUp() (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 un DialogFragment 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 instance NavDirections, vous pouvez maintenant naviguer via un Uri, 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() de NavHostFragment a été abandonnée et ses fonctionnalités ont été transférées vers la nouvelle méthode onCreateNavController() 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 de NavHostFragment (b/122802849).
  • Une méthode hasDeepLink() a été ajoutée à NavDestination pour vous permettre de vérifier si un Uri donné peut être géré par cette destination ou, dans le cas d'un NavGraph, 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ément app:argType non spécifié est désormais correctement déduit en tant qu'argument string (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'API getViewModelStore() 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 charge app: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 utilise FragmentFactory 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 sans FLAG_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 et fun dans le nom du package associé à la classe R (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 comme android:defaultValue pour les arguments reference (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() et navigateUp renvoient désormais correctement false lors de l'affichage de la dernière destination dans la pile "Retour", ce qui corrige une régression introduite dans la version 1.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 de Navigator 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 un app: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 de NavController, ce qui entraînait une IllegalStateException 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 classe NavArgs générée par Safe Args dans une Activity ou un Fragment (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-in androidx.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 un NavController 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 à des NavHostFragment 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 vers ActivityNavigator (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 des getArguments() de NavDirections est désormais marqué comme @NonNull au lieu de @Nullable (b/123243957).

Correction de bugs

  • Désormais, NavDeepLinkBuilder gère correctement plusieurs PendingIntent 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érations popBackStack() lors de l'utilisation d'un NavHostFragment 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 valeurs hashCode() égales lorsque equals() renvoie la valeur "true" (b/123043662).
  • Amélioration du message d'erreur généré par FragmentNavigator lorsque vous tentez d'effectuer des FragmentTransactions personnalisées sur le FragmentManager de NavHostFragment. Vous devez toujours utiliser getChildFragmentManager() 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ément menuCategory="secondary" ne s'affichent plus dans la pile "Retour" lorsqu'ils sont utilisés avec les méthodes NavigationUI (b/120104424).
  • AppBarConfiguration vous permet désormais de définir une instance OnNavigateUpListener de remplacement qui sera appelée lorsque navController.navigateUp() renvoie false. (b/79993862) (b/120690961)

Modifications destructives

  • Lorsque vous utilisez un <argument> avec un argType="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éthodes setup. Ajoutez menuCategory="secondary" à votre MenuItem pour éviter l'affichage de la pile "Retour" (aosp/852869).
  • Les méthodes fromBundle() des classes Args générées prennent maintenant une valeur de Bundle non nulle au lieu d'une valeur de Bundle 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 votre android: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 le Bundle des arguments (aosp/837142).
  • Les attributs app:clearTask et app:launchDocument, ainsi que les méthodes associées, ont été supprimés. Utilisez app: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éma Builder et permet de définir n'importe quel indicateur Intent.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 et AppBarConfiguration, sont devenues final (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 à une FragmentFactory (b/119054429).
  • Le constructeur de NavGraphNavigator n'utilise plus de Context (aosp/835340).
  • NavigatorProvider est désormais une classe plutôt qu'une interface. Aucune modification des fonctionnalités du NavigatorProvider renvoyé par getNavigatorProvider() (aosp/830660).
  • NavDestination.navigate() a été supprimé. Appelez plutôt navigate() sur Navigator (aosp/830663).
  • Refactorisation significative de Navigator, qui n'a plus besoin de OnNavigatorNavigatedListener. À la place, navigate renvoie la NavDestination vers laquelle il a navigué.
  • Les instances de Navigator ne peuvent plus envoyer d'événements d'affichage au NavController. Envisagez d'utiliser un OnBackPressedCallback pour intercepter les pressions sur le bouton "Retour" et appeler navController.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 appelant toString() (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

Modifications apportées à l'API

  • Modification destructive : la méthode navigate() de Navigator utilise désormais un paramètre Navigator.Extras.
  • La méthode getGraph() de NavController est désormais NonNull (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é par app: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 deviendra setDemoControllerIndex. (b/79995048)
    • Par exemple, action_show_settings deviendra actionShowSettings. (b/79642240)
  • 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() et hashCode() (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ésormais setReorderingAllowed(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 dans NavOptions. (b/80338878)

  • Abandon de l'attribut launchDocument pour les actions et l'API associée dans NavOptions. (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.