Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Fragment

Segmentez votre application en plusieurs écrans indépendants hébergés au sein d'un objet Activity.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
7 décembre 2022 1.5.5 - - 1.6.0-alpha04

Déclarer des dépendances

Pour ajouter une dépendance à Fragment, 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 correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :

Groovy

dependencies {
    def fragment_version = "1.5.5"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.5.5"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

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 problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 1.6

Version 1.6.0-alpha04

7 décembre 2022

Publication de androidx.fragment:fragment-*:1.6.0-alpha04. Liste des commits de la version 1.6.0-alpha04

Nouvelles fonctionnalités

  • FragmentStrictMode a ajouté une vérification WrongNestedHierarchyViolation qui détecte lorsqu'un fragment enfant est imbriqué dans la hiérarchie des vues de son parent, mais n'est pas ajouté au childFragmentManager de celui-ci. (I72521, b/249299268)

Nouveaux comportements

  • Les fragments restaurent désormais l'état SavedStateRegistry avant onAttach(), ce qui permet de garantir qu'il est disponible à partir de toutes les méthodes du cycle de vie en amont. (I1e2b1)

Modifications apportées à l'API

  • L'artefact fragment-testing-manifest sépare les entrées du fichier manifeste des autres composants de fragment-testing. Vous pouvez ainsi effectuer les opérations suivantes :
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

Cela permet d'éviter les conflits dus au décalage de version entre fragment-testing et androidx.test.(I8e534, b/128612536)

Correction de bugs

  • Dans Fragment 1.5.5 : les fragments n'enregistrent plus de manière incorrecte l'état ViewModel comme faisant partie de l'état enregistré du registre de la vue. (I10d2b, b/253546214)

Version 1.6.0-alpha03

5 octobre 2022

Publication de androidx.fragment:fragment:1.6.0-alpha03, androidx.fragment:fragment-ktx:1.6.0-alpha03 et androidx.fragment:fragment-testing:1.6.0-alpha03. Liste des commits de la version 1.6.0-alpha03

Modifications apportées à l'API

  • Les classes qui étendent DialogFragment devront désormais appeler la fonction Super dans les remplacements de la méthode onDismiss(). (I14798, b/238928865)

Correction de bugs

  • Correction des régressions causées par l'intégration des nouvelles interfaces de rappel de fournisseur (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) afin de garantir que les fragments reçoivent toujours les rappels appropriés. (I9b380,I34581, [I8dfe6, b/242570955],If9d6b,Id0096,I690b3,I2cba2)

Version 1.6.0-alpha02

24 août 2022

Publication d'androidx.fragment:fragment:1.6.0-alpha02, androidx.fragment:fragment-ktx:1.6.0-alpha02 et androidx.fragment:fragment-testing:1.6.0-alpha02. Liste des commits de la version 1.6.0-alpha02

Corrections de bugs

  • Depuis Fragment 1.5.2 : correction d'un problème pour lequel l'exécution simultanée d'une transaction popBackStack() et replace() pouvait entraîner l'exécution du mauvais Animation/Animator par les fragments sortants. (Ib1c07, b/214835303)

Version 1.6.0-alpha01

27 juillet 2022

Publication d'androidx.fragment:fragment:1.6.0-alpha01, androidx.fragment:fragment-ktx:1.6.0-alpha01 et androidx.fragment:fragment-testing:1.6.0-alpha01. Liste des commits de la version 1.6.0-alpha01

Nouveaux comportements

  • L'état enregistré de Fragments a été entièrement réparti entre l'état de la bibliothèque privée (classes Parcelable personnalisées) et l'état fourni par le développeur, qui est maintenant toujours stocké dans un Bundle qui permet de déterminer exactement l'origine de l'état d'un fragment. (b/207158202)

Corrections de bugs

  • Depuis Fragment 1.5.1 : correction d'une régression dans le DialogFragmentCallbacksDetector où l'utilisation de la version de lint fournie avec AGP 7.4 entraînait le plantage de lint. (b/237567009)

Mise à jour de la dépendance

Version 1.5

Version 1.5.5

7 décembre 2022

Publication de androidx.fragment:fragment:1.5.5, androidx.fragment:fragment-ktx:1.5.5 et androidx.fragment:fragment-testing:1.5.5. Liste des commits de la version 1.5.5.

Correction de bugs

  • Les fragments n'enregistrent plus l'état ViewModel de manière incorrecte dans le registre d'affichage enregistré. (I10d2b, b/253546214)

Version 1.5.4

24 octobre 2022

Publication de androidx.fragment:fragment:1.5.4, androidx.fragment:fragment-ktx:1.5.4 et androidx.fragment:fragment-testing:1.5.4. Liste des commits de la version 1.5.4.

Correction de bugs

  • Correction d'une erreur où le fait d'utiliser un FragmentController personnalisé avec un hôte qui n'implémente pas une interface de rappel de fournisseur (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) et d'appeler sa fonction d'envoi obsolète ne permettait pas d'envoyer les fragments enfants. (I9b380)

Version 1.5.3

21 septembre 2022

Publication de androidx.fragment:fragment:1.5.3, androidx.fragment:fragment-ktx:1.5.3 et androidx.fragment:fragment-testing:1.5.3. Liste des commits de la version 1.5.3.

Correction de bugs

  • Correction d'une erreur qui générait des rappels onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() et onConfigurationChanged() pour les fragments de la pile "Retour". (I34581, I8dfe6, b/242570955)
  • Les fragments enfants imbriqués ne recevront plus plusieurs rappels onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() ou onConfigurationChanged(). (I690b3, Id0096, If9d6b, I2cba2)

Version 1.5.2

10 août 2022

Publication d'androidx.fragment:fragment:1.5.2, androidx.fragment:fragment-ktx:1.5.2 et androidx.fragment:fragment-testing:1.5.2. Liste des commits de la version 1.5.2

Corrections de bugs

  • Correction d'un problème pour lequel l'exécution simultanée d'une transaction popBackStack() et replace() pouvait entraîner l'exécution du mauvais Animation/Animator par les fragments sortants. (Ib1c07, b/214835303)

Version 1.5.1

27 juillet 2022

Publication de androidx.fragment:fragment:1.5.1, androidx.fragment:fragment-ktx:1.5.1 et androidx.fragment:fragment-testing:1.5.1. Liste des commits de la version 1.5.1.

Corrections de bugs

  • Correction d'une régression dans le DialogFragmentCallbacksDetector où l'utilisation de la version lint fournie avec AGP 7.4 entraînait le plantage de lint. (b/237567009)

Mise à jour de la dépendance

Version 1.5.0

29 juin 2022

Publication de androidx.fragment:fragment:1.5.0, androidx.fragment:fragment-ktx:1.5.0 et androidx.fragment:fragment-testing:1.5.0. Liste des commits de la version 1.5.0.

Changements importants depuis la version 1.4.0

  • Intégration de CreationExtras : Fragment peut désormais fournir un ViewModelProvider.Factory sans état via CreationExtras de Lifecycle 2.5.0.
  • Intégration des boîtes de dialogue de composants : DialogFragment utilise désormais ComponentDialog via Activity 1.5.0 comme boîte de dialogue par défaut renvoyée par onCreateDialog().
  • Refactorisation de l'état d'instance enregistré : les fragments ont commencé à modifier la façon dont ils enregistrent l'état de leur instance. Cela permet d'identifier clairement l'état qui a été enregistré dans le fragment et la source de l'état. Voici certains des changements apportés :
    • FragmentManager enregistre désormais son état d'instance enregistré dans Bundle au lieu de passer directement par un Parcelable personnalisé.
    • Les résultats qui ont été définis via les Fragment Result APIs et qui n'ont pas encore été livrés sont maintenant enregistrés séparément de l'état interne de FragmentManager.
    • L'état associé à chaque fragment individuel est désormais enregistré séparément de l'état interne de FragmentManager, ce qui vous permet de corréler la quantité d'états enregistrés associés à un fragment individuel avec les ID uniques présents dans le journal de débogage de Fragment.

Autres changements

  • FragmentStrictMode permet désormais aux fragments tiers privés de contourner des pénalités de violation spécifiques en utilisant allowViolation() avec le nom de classe.
  • Les API Fragment permettant de fournir un menu à l'ActionBar de votre activité ont été abandonnées. Les API MenuHost et MenuProvider ajoutées dans Activity 1.4.0 fournissent une surface d'API équivalente, compatible avec le cycle de vie et testable, que les fragments doivent utiliser.

Version 1.5.0-rc01

11 mai 2022

Publication d'androidx.fragment:fragment:1.5.0-rc01, androidx.fragment:fragment-ktx:1.5.0-rc01 et androidx.fragment:fragment-testing:1.5.0-rc01. Liste des commits de la version 1.5.0-rc01

Refactorisation de l'état d'instance enregistré

  • L'état associé à chaque fragment individuel est désormais enregistré séparément de l'état interne de FragmentManager, ce qui vous permet de corréler la quantité d'états enregistrés associés à un fragment individuel avec les ID uniques présents dans le journal de débogage de Fragment. (a153e0, b/207158202)

Version 1.5.0-beta01

20 avril 2022

Publication de androidx.fragment:fragment:1.5.0-beta01, androidx.fragment:fragment-ktx:1.5.0-beta01 et androidx.fragment:fragment-testing:1.5.0-beta01. Liste des commits de la version 1.5.0-beta01

Modifications apportées à l'API

  • DialogFragment a ajouté une méthode dismissNow qui utilise commitNow pour la parité avec la fonction showNow. Notez que cela ne fermera pas immédiatement la Dialog, mais cela mettra uniquement à jour l'état de FragmentManager de manière synchrone. (I15c36, b/72644830)

Refactorisation de l'état d'instance enregistré

  • FragmentManager enregistre désormais son état d'instance enregistré dans Bundle au lieu de passer directement par un Parcelable personnalisé. Il s'agit de la première étape pour fournir plus de transparence concernant ce qui est enregistré par Fragments. (I93807, b/207158202)
  • Les résultats définis via les API de Fragment Result qui n'ont pas encore été fournis sont maintenant enregistrés séparément de l'état interne de FragmentManager. Vous pourrez ainsi déterminer plus précisément quels résultats sont enregistrés pour l'état de votre instance enregistrée. (I6ea12, b/207158202)

Version 1.5.0-alpha05

6 avril 2022

Publication de androidx.fragment:fragment:1.5.0-alpha05, androidx.fragment:fragment-ktx:1.5.0-alpha05 et androidx.fragment:fragment-testing:1.5.0-alpha05. Liste des commits de la version 1.5.0-alpha05

Modifications apportées à l'API

Version 1.5.0-alpha04

23 mars 2022

Publication de androidx.fragment:fragment:1.5.0-alpha04, androidx.fragment:fragment-ktx:1.5.0-alpha04 et androidx.fragment:fragment-testing:1.5.0-alpha04. Liste des commits de la version 1.5.0-alpha04

Modifications apportées à l'API

  • Les API Fragment permettant de fournir un menu aux ActionBar de votre activité, ont été abandonnées, car elles associent étroitement votre fragment à votre activité et ne peuvent pas être testées de façon isolée. Les API MenuHost et MenuProvider ajoutées dans Activity 1.4.0-alpha01 fournissent une surface d'API équivalente, compatible avec le cycle de vie et testable, que les fragments doivent utiliser. (I50a59, I20758)

Corrections de bugs

  • 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)

Version 1.5.0-alpha03

23 février 2022

Publication de androidx.fragment:fragment:1.5.0-alpha03, androidx.fragment:fragment-ktx:1.5.0-alpha03 et androidx.fragment:fragment-testing:1.5.0-alpha03. Liste des commits de la version 1.5.0-alpha03.

Modifications apportées à l'API

  • Vous pouvez maintenant transmettre CreationExtras aux fonctions by viewModels() et by activityViewModels(). (Ibefe7, b/217601110)

Nouveaux comportements

Version 1.5.0-alpha02

9 février 2022

Publication de androidx.fragment:fragment:1.5.0-alpha02, androidx.fragment:fragment-ktx:1.5.0-alpha02 et androidx.fragment:fragment-testing:1.5.0-alpha02. Liste des commits de la version 1.5.0-alpha02.

Nouvelles fonctionnalités

  • FragmentStrictMode permet désormais aux fragments tiers privés de contourner des pénalités de violation spécifiques en utilisant allowViolation() avec le nom de classe. (I8f678)

Version 1.5.0-alpha01

26 janvier 2022

Publication de androidx.fragment:fragment:1.5.0-alpha01, androidx.fragment:fragment-ktx:1.5.0-alpha01 et androidx.fragment:fragment-testing:1.5.0-alpha01. Liste des commits de la version 1.5.0-alpha01.

Nouvelles fonctionnalités

Corrections de bugs

  • Depuis Fragment 1.4.1 : FragmentContainerView ne génère plus d'exception d'état illégale lorsque les ID de vue générés à partir du fichier XML comportent des valeurs négatives. (Ic185b, b/213086140)
  • Depuis Fragment 1.4.1 : lorsque vous utilisez un lambda ownerProducer personnalisé avec la fonction paresseuse by viewModels(), il utilise désormais la defaultViewModelProviderFactory de ce propriétaire si une ViewModelProvider.Factory personnalisée n'est pas fournie, au lieu d'utiliser toujours la fabrique du fragment. (I56170, b/214106513)
  • Correction d'un plantage survenant lors du premier accès au ViewModel à partir d'un rappel de registerForActivityResult() d'un Fragment. (Iea2b3)

Version 1.4

Version 1.4.1

26 janvier 2022

Publication d'androidx.fragment:fragment:1.4.1, androidx.fragment:fragment-ktx:1.4.1 et androidx.fragment:fragment-testing:1.4.1. Liste des commits de la version 1.4.1

Corrections de bugs

  • FragmentContainerView ne génère plus d'exception d'état illégale lorsque les ID de vue générés à partir du fichier XML comportent des valeurs négatives. (Ic185b, b/213086140)
  • Lorsque vous utilisez un lambda ownerProducer personnalisé avec la fonction paresseuse by viewModels(), il utilise désormais la defaultViewModelProviderFactory de ce propriétaire si une ViewModelProvider.Factory personnalisée n'est pas fournie, au lieu d'utiliser toujours la fabrique du fragment. (I56170, b/214106513)

Version 1.4.0

17 novembre 2021

Publication d'androidx.fragment:fragment:1.4.0, androidx.fragment:fragment-ktx:1.4.0 et androidx.fragment:fragment-testing:1.4.0. Liste des commits de la version 1.4.0.

Changements importants depuis la version 1.3.0

  • Les API FragmentStrictMode fournissent des vérifications d'exécution qui vous permettent de vérifier que votre application ou les bibliothèques dont vous dépendez n'appellent pas d'API de fragment obsolètes. Lorsqu'une violation est détectée, vous pouvez choisir d'afficher un message de journal, de déclencher votre propre écouteur personnalisé ou de faire planter votre application. Le FragmentStrictMode.Policy qui contrôle les vérifications activées et les pénalités déclenchées peut être défini sur un FragmentManager via la nouvelle méthode setStrictModePolicy(). Ce règlement s'applique à ce FragmentManager et de manière transitoire à tous les gestionnaires de fragments enfants qui ne définissent pas leur propre règlement unique. Consultez la section StrictMode pour les fragments.
  • FragmentContainerView fournit maintenant une méthode getFragment() qui renvoie le dernier fragment ajouté au conteneur. Elle utilise la même logique que findFragmentById() avec l'ID de FragmentContainerView, mais elle permet le chaînage de l'appel.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario implémente désormais Closeable, ce qui vous permet de l'utiliser avec la méthode use de Kotlin ou avec try-with-resources.

  • Ajout de FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} pour indiquer si vous souhaitez activer l'animation de transition standard d'Activity issue de votre thème dans la transition de Fragments.

  • L'API expérimentale de FragmentManager.enableNewStateManager(boolean) a été supprimée et le nouveau gestionnaire d'état est désormais la seule option disponible.

Plusieurs piles "Retour"

FragmentManager gère une pile "Retour" composée de transactions de fragment qui utilisaient addToBackStack(). Vous pouvez ainsi faire apparaître ces transactions et rétablir l'état précédent en utilisant les mécanismes d'enregistrement d'état avec des fragments afin de permettre à vos fragments de rétablir leur état de manière appropriée.

Cette version développe ces mécanismes en fournissant trois nouvelles API FragmentManager : saveBackStack(String name), restoreBackStack(String name) et clearBackStack(String name). Ces API utilisent le même name que addToBackStack() pour enregistrer l'état de FragmentTransaction et l'état de chaque fragment ajouté à ces transactions. Elles vous permettent aussi de restaurer ultérieurement ces transactions et leurs fragments avec leur état intact. Cela vous permet de "basculer" efficacement entre plusieurs piles "Retour" en enregistrant la pile "Retour" actuelle et en restaurant une pile "Retour" enregistrée.

saveBackStack() fonctionne de façon semblable à popBackStack() dans la mesure où il est asynchrone et entraîne le retour (affichage) de toutes les transactions de fragment jusqu'à ce nom spécifique, ainsi que la destruction et la suppression de tous les fragments ajoutés. Toutefois plusieurs différences importantes existent entre ces concepts :

  • saveBackStack() est toujours inclusif.
  • Contrairement à popBackStack(), qui affiche toutes les transactions de la pile "Retour" si le nom spécifié est introuvable dans la pile "Retour" ou si un nom nul est spécifié, saveBackStack() ne fait rien si vous n'avez pas déjà validé une transaction de fragment à l'aide de addToBackStack() avec ce nom exact non nul.
  • L'état de tous les fragments ajoutés à partir de ces transactions est enregistré. Cela signifie que l'état d'affichage de chaque fragment est stocké, que onSaveInstanceState() est appelé pour chaque fragment et que cet état est restauré, et toutes les instances ViewModel associées à ces fragments sont conservées (et onCleared() n'est pas appelé sur ces derniers).

Les transactions de fragment pouvant être utilisées avec saveBackStack() doivent répondre à certains critères :

  • Chaque transaction de fragment doit utiliser setReorderingAllowed(true) pour garantir qu'elle peut être restaurée sous la forme d'une seule opération atomique.
  • L'ensemble de transactions enregistré doit être autonome (en d'autres termes, il ne doit pas faire explicitement référence à des fragments en dehors de cet ensemble de transactions) afin de pouvoir être restauré ultérieurement, quelles que soient les modifications apportées à la pile "Retour" entre-temps.
  • Aucun fragment enregistré ne peut être un fragment conservé, ni disposer d'un fragment conservé dans son ensemble transitif de fragments enfants, afin de garantir que FragmentManager ne renvoie aucune référence aux fragments enregistrés après l'enregistrement de la pile "Retour".

Tout comme saveBackStack(), restoreBackStack() et clearBackStack(), qui, respectivement, restaurent ou effacent une pile "Retour" précédemment enregistrée, ces deux actions n'ont aucun effet si vous n'avez pas encore appelé saveBackStack() avec le même nom.

Pour plus d'informations, consultez la section Plusieurs piles "Retour" : informations détaillées.

Version 1.4.0-rc01

3 novembre 2021

Publication d'androidx.fragment:fragment:1.4.0-rc01 sans aucune modification par rapport à la version 1.4.0-beta01 de Fragment. Liste des commits de la version 1.4.0-rc01

Version 1.4.0-beta01

27 octobre 2021

Publication d'androidx.fragment:fragment:1.4.0-beta01, androidx.fragment:fragment-ktx:1.4.0-beta01 et androidx.fragment:fragment-testing:1.4.0-beta01. Liste des commits de la version 1.4.0-beta01

Corrections de bugs

  • Les fragments parents vont maintenant répercuter onHiddenChanged() dans toute leur hiérarchie descendante avant de lancer leur propre rappel. (Iedc20, b/77504618)
  • Le clavier va maintenant se fermer automatiquement lorsque vous passez d'un fragment avec un clavier ouvert à un fragment avec une vue recycleur. (I8b842, b/196852211)
  • DialogFragment utilise désormais setReorderingAllowed(true) pour toutes les transactions qu'il crée lorsque vous appelez show(), showNow() ou dismiss(). (Ie2c14)
  • L'avertissement lint extrêmement long de DetachAndAttachFragmentInSameFragmentTransaction a été raccourci en DetachAndAttachSameFragment. (e9eca3)

Version 1.4.0-alpha10

29 septembre 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 et androidx.fragment:fragment-testing:1.4.0-alpha10. Liste des commits de la version 1.4.0-alpha10

lint

  • Ajout de l'avertissement lint DetachAndAttachFragmentInSameFragmentTransaction pour détecter les appels de detach() et attach() sur le même Fragment dans la même FragmentTransaction. En effet, comme ces opérations complémentaires s'annulent l'une l'autre au cours de la même transaction, elles doivent être fractionnées en transactions distinctes pour avoir un effet. (aosp/1832956, b/200867930)
  • Ajout de l'erreur lint FragmentAddMenuProvider indiquant d'utiliser le cycle de vie de la vue de Fragment au lieu du cycle de vie de Fragment lorsque vous utilisez l'API addMenuProvider de MenuHost. (aosp/1830457, b/200326272)

Mises à jour de la documentation

  • Le message d'abandon des API, désormais gérées par les API Activity Result, à savoir startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions et onRequestPermissionsResult, comporte davantage de détails. (cce80f)
  • Le message d'abandon pour onActivityCreated() pour Fragment et DialogFragment comporte maintenant davantage de détails. (224db4)

Version 1.4.0-alpha09

15 septembre 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09 et androidx.fragment:fragment-testing:1.4.0-alpha09. Liste des commits de la version 1.4.0-alpha09

Nouvelles fonctionnalités

  • Vous pouvez maintenant appeler clearBackStack(name) pour effacer tout état précédemment enregistré avec saveBackStack(name). (I70cd7)

Modifications apportées à l'API

  • La classe FragmentContainerView a été réécrite en Kotlin pour s'assurer que la fonction getFragment respecte la possibilité de valeur nulle. (If694a, b/189629145)
  • FragmentStrictMode est désormais écrit en Kotlin (I11767, b/199183506).

Corrections de bugs

  • L'état d'un fragment ajouté avec setReorderingAllowed(true), puis supprimé immédiatement avant l'exécution de transactions en attente n'était pas nettoyé correctement. Ce problème a été résolu. (I8ccb8)

Version 1.4.0-alpha08

1er septembre 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08 et androidx.fragment:fragment-testing:1.4.0-alpha08. Liste des commits de la version 1.4.0-alpha08

Corrections de bugs

  • Amélioration de la vérification lint UseRequireInsteadOfGet pour une meilleure gestion des parenthèses redondantes. (I2d865)
  • Amélioration de la vérification lint UseGetLayoutInflater pour la gestion de cas particuliers supplémentaires. (Ie5423)

Version 1.4.0-alpha07

18 août 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 et androidx.fragment:fragment-testing:1.4.0-alpha07 sans modification notable. Liste des commits de la version 1.4.0-alpha07

Version 1.4.0-alpha06

4 août 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06 et androidx.fragment:fragment-testing:1.4.0-alpha06. Liste des commits de la version 1.4.0-alpha06

Corrections de bugs

  • Lors du basculement rapide entre plusieurs piles "Retour", certaines piles "Retour" s'affichaient en tant que IllegalStateException lors de la restauration d'une FragmentTransaction ou en tant que deuxième copie d'un fragment. Ce problème a été résolu. (I9039f)
  • Correction d'un problème pour lequel FragmentManager conservait une copie de l'état enregistré précédemment via saveBackStack(), même après la restauration de cet état. (Ied212)
  • La méthode dismissAllowingStateLoss() de DialogFragment ne plante plus lorsque vous l'appelez une fois l'état enregistré, lors de l'ajout spécifique de DialogFragment via la méthode show(FragmentTransaction, String). (I84422)

Version 1.4.0-alpha05

21 juillet 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05 et androidx.fragment:fragment-testing:1.4.0-alpha05. Liste des commits de la version 1.4.0-alpha05

Corrections de bugs

  • Depuis Fragment 1.3.6 : la vue de Fragment est désormais correctement définie sur GONE quand vous utilisez hide() lorsque le paramètre transitionGroup=”true” est défini pour la vue racine. (aosp/1766655, b/193603427)
  • Depuis Fragment 1.3.6 : désormais, la première opération de FragmentActivity dans les rappels de cycle de vie qu'il remplace consiste à déverrouiller l'état enregistré. (I6db7a)

Mise à jour de la dépendance

Version 1.4.0-alpha04

30 juin 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04 et androidx.fragment:fragment-testing:1.4.0-alpha04. Liste des commits de la version 1.4.0-alpha04

Modifications apportées à l'API

  • FragmentManager utilise désormais SavedStateRegistry en arrière-plan pour enregistrer son état. Les méthodes saveAllState() et restoreSavedState() sont également obsolètes dans FragmentController. Si vous utilisez FragmentController pour héberger des fragments en dehors de FragmentActivity, votre FragmentHostCallbacks doit implémenter SavedStateRegistryOwner. (Iba68e, b/188734238)

Corrections de bugs

  • L'appel de saveBackStack() lors de la prise en charge de plusieurs piles "Retour" échouait en cas d'exécution simultanée d'une FragmentTransaction utilisant replace(). Ce problème a été résolu. (I73137)
  • Correction d'une NullPointerException qui se produisait après la restauration manuelle d'une pile "Retour" enregistrée qui contenait plusieurs transactions lors de l'utilisation de l'API restoreBackStack() pour la prise en charge de plusieurs piles "Retour". Cela a également permis de résoudre le problème pour lequel setReorderingAllowed(true) n'était pas vérifié pour toutes les transactions. (I8c593)
  • Correction d'un problème pour lequel FragmentManager continuait de restaurer par erreur l'état précédemment enregistré de fragments, même après leur suppression de FragmentManager, ce qui entraînait la croissance continue de l'état enregistré au fil du temps. (I1fb8e)

Version 1.4.0-alpha03

16 juin 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 et androidx.fragment:fragment-testing:1.4.0-alpha03. Liste des commits de la version 1.4.0-alpha03

Nouvelles fonctionnalités

  • Toutes les classes Violation de StrictMode de Fragment ont été mises à jour avec des messages d'erreur plus détaillés expliquant les détails de la violation. (b/187871638)
    • FragmentTagUsageViolation contient désormais un message d'erreur plus détaillé indiquant le conteneur parent auquel le fragment aurait été ajouté. (Ic33a7)
    • WrongFragmentContainerViolation dispose désormais d'un message d'erreur plus détaillé incluant le conteneur auquel le fragment était en train d'être ajouté. (Ib55f8)
    • Les classes de cas d'utilisation de TargetFragmentUsageViolation disposent désormais de messages d'erreur plus détaillés pour inclure le fragment à l'origine de la violation, ainsi que toute autre information contenue. (Icc6ac)
    • Les classes qui étendent RetainInstanceUsageViolation disposent désormais de messages d'erreur plus détaillés qui incluent le fragment à l'origine de la violation. (I6bd55)
    • FragmentReuseViolation dispose désormais d'un message d'erreur plus détaillé incluant l'ID précédent du fragment. (I28ce2)
    • SetUserVisibleHintViolation dispose désormais d'un message d'erreur plus détaillé incluant la valeur de configuration en cours de l'indicateur visible par l'utilisateur. (Ib2d5f)

Nouveaux comportements

  • Annulation de la restriction lors de l'appel de fitsSystemWindows dans une FragmentContainerView. Votre application ne plante donc plus. (6b8ddd, b/190622202)

Corrections de bugs

  • Depuis Fragment 1.3.5 : correction d'une régression dans les transitions d'éléments partagés introduite dans Fragment 1.3.4 par aosp/1679887. Les fragments gèrent désormais correctement les groupes de transition (définis directement via transitionGroup="true" ou indirectement via transitionName ou background), et les éléments partagés ne génèrent plus de IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)
  • Le FragmentManager ne plante plus lorsque vous tentez de masquer un fragment en cours de suppression. (I573dd, b/183634730)
  • La vérification lint OnCreateDialogIncorrectCallback ne plante plus lors de l'évaluation d'une variable de niveau supérieur. (0a9efa, b/189967522)

Version 1.4.0-alpha02

2 juin 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02 et androidx.fragment:fragment-testing:1.4.0-alpha02. Liste des commits de la version 1.4.0-alpha02.

Nouvelles fonctionnalités

  • FragmentStrictMode enregistre désormais toujours les cas de violation dans le journal lorsque la journalisation est activée via le FragmentManager, quelle que soit le règlement de mode strict actuellement utilisé. (I02df6, b/187872638)
  • FragmentStrictMode permet désormais d'exempter certaines classes Fragment des Violation en mode strict, ce qui permet à ces classes d'ignorer les pénalités éventuelles. (Ib4e5d, b/184786736)

  • La classe de Violation FragmentStrictMode a été développée pour ajouter des informations de structure en fonction de chaque violation. Cela vous permet de vérifier exactement la cause de la violation ainsi que le fragment à l'origine de la violation (If5118, b/187871150). Chaque Violation contient les éléments suivants :

    • WrongFragmentContainerViolation contient désormais le ViewGroup auquel Fragment tentait d'être ajouté. (I83c75, b/187871150)
    • TargetFragmentUsageViolation a été étendu à SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation et GetTargetFragmentRequestCodeUsageViolation, SetTargetFragmentUsageViolation contenant le fragment cible et le code de requête. (I741b4, b/187871150)
    • SetUserVisibleHintViolation contient désormais la valeur booléenne transmise dans setUserVisibleHint(). (I00585, b/187871150)
    • FragmentTagUsageViolation contient désormais le ViewGroup dans lequel la balise <fragment> tentait de gonfler un fragment. (I5dbbc, b/187871150)
    • FragmentReuseViolation contient désormais l'ID unique de l'instance précédente de Fragment à l'origine de la violation. (I0544d, b/187871150)
    • RetainInstanceUsageViolation est désormais abstrait et comporte deux sous-classes, SetRetainInstanceUsageViolation et GetRetainInstanceUsageViolation, représentant les deux cas pour le type de violation. (Ic81e5, b/187871150)

Nouveaux comportements

  • FragmentContainerView génère désormais une exception lorsque vous tentez de modifier l'attribut fitsSystemWindow de façon programmatique ou via XML. Les encarts doivent être gérés par la vue de chaque fragment individuel. (Ie6651, b/187304502)

Version 1.4.0-alpha01

18 mai 2021

Publication d'androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01 et androidx.fragment:fragment-testing:1.4.0-alpha01. Liste des commits de la version 1.4.0-alpha01.

Nouvelles fonctionnalités

  • FragmentContainerView fournit maintenant une méthode getFragment() qui renvoie le dernier fragment ajouté au conteneur. Elle utilise la même logique que findFragmentById() avec l'ID de FragmentContainerView, mais elle permet le chaînage de l'appel. (Ife17a, b/162527857)

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • Ajout de FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} pour indiquer si vous souhaitez activer l'animation de transition standard d'Activity issue de votre thème dans la transition de Fragments. (I46652)

Plusieurs piles "Retour"

FragmentManager gère une pile "Retour" composée de transactions de fragment qui utilisaient addToBackStack(). Vous pouvez ainsi faire apparaître ces transactions et rétablir l'état précédent en utilisant les mécanismes d'enregistrement d'état avec des fragments afin de permettre à vos fragments de rétablir leur état de manière appropriée.

Cette version développe ces mécanismes en fournissant deux nouvelles API FragmentManager : saveBackStack(String name) et restoreBackStack(String name). Ces API utilisent le même name que addToBackStack() pour enregistrer l'état de FragmentTransaction et l'état de chaque fragment ajouté à ces transactions. Elles vous permettent aussi de restaurer ultérieurement ces transactions et leurs fragments avec leur état intact. Cela vous permet de "basculer" efficacement entre plusieurs piles "Retour" en enregistrant la pile "Retour" actuelle et en restaurant une pile "Retour" enregistrée.

saveBackStack() fonctionne de façon semblable à popBackStack() dans la mesure où il est asynchrone et entraîne le retour (affichage) de toutes les transactions de fragment jusqu'à ce nom spécifique, ainsi que la destruction et la suppression de tous les fragments ajoutés. Toutefois plusieurs différences importantes existent entre ces concepts :

  • saveBackStack() est toujours inclusif.
  • Contrairement à popBackStack(), qui affiche toutes les transactions de la pile "Retour" si le nom spécifié est introuvable dans la pile "Retour" ou si un nom nul est spécifié, saveBackStack() ne fait rien si vous n'avez pas déjà validé une transaction de fragment à l'aide de addToBackStack() avec ce nom exact non nul.
  • L'état de tous les fragments ajoutés à partir de ces transactions est enregistré. Cela signifie que l'état d'affichage de chaque fragment est stocké, que onSaveInstanceState() est appelé pour chaque fragment et que cet état est restauré, et toutes les instances ViewModel associées à ces fragments sont conservées (et onCleared() n'est pas appelé sur ces derniers).

Les transactions de fragment pouvant être utilisées avec saveBackStack() doivent répondre à certains critères :

  • Chaque transaction de fragment doit utiliser setReorderingAllowed(true) pour garantir qu'elle peut être restaurée sous la forme d'une seule opération atomique.
  • L'ensemble de transactions enregistré doit être autonome (en d'autres termes, il ne doit pas faire explicitement référence à des fragments en dehors de cet ensemble de transactions) afin de pouvoir être restauré ultérieurement, quelles que soient les modifications apportées à la pile "Retour" entre-temps.
  • Aucun fragment enregistré ne peut être un fragment conservé, ni disposer d'un fragment conservé dans son ensemble transitif de fragments enfants, afin de garantir que FragmentManager ne renvoie aucune référence aux fragments enregistrés après l'enregistrement de la pile "Retour".

Tout comme saveBackStack(), restoreBackStack() n'a aucun effet si vous n'avez pas encore appelé saveBackStack() avec le même nom. (b/80029773)

StrictMode de Fragment

Les API FragmentStrictMode fournissent des vérifications d'exécution qui vous permettent de vérifier que votre application ou les bibliothèques dont vous dépendez n'appellent pas d'API de fragment obsolètes. Lorsqu'une violation est détectée, vous pouvez choisir d'afficher un message de journal, de déclencher votre propre écouteur personnalisé ou de faire planter votre application. Le FragmentStrictMode.Policy qui contrôle les vérifications activées et les pénalités déclenchées peut être défini sur un FragmentManager via la nouvelle méthode setStrictModePolicy(). Ce règlement s'applique à ce FragmentManager et de manière transitoire à tous les gestionnaires de fragments enfants qui ne définissent pas leur propre règlement unique. (#123, #131, #150, b/143774122)

  • detectFragmentReuse() détecte si une instance Fragment précédemment supprimée est de nouveau en cours d'ajout à un FragmentManager. Vous ne devez jamais interagir avec une instance Fragment ni conserver une instance vers celle-ci après qu'elle a été détruite et supprimée d'un FragmentManager. (#142, b/153738653)
  • detectFragmentTagUsage() détecte si vous utilisez la balise <fragment> dans votre fichier XML de mise en page. Vous devez toujours utiliser FragmentContainerView lorsque vous gonflez des fragments dans votre mise en page. (#141, b/153738235)
  • detectWrongFragmentContainer() détecte lorsque vous ajoutez un fragment à un conteneur qui n'est pas un élément FragmentContainerView. Vous devez toujours utiliser FragmentContainerView comme conteneur pour les fragments de votre mise en page. (#146, b/181137036)
  • detectRetainInstanceUsage() détecte si vous utilisez les API setRetainInstance() ou getRetainInstance(), qui sont obsolètes. (#140, b/153737954)
  • detectSetUserVisibleHint() détecte si vous utilisez l'API setUserVisibleHint() obsolète. (#136, b/153738974)
  • detectTargetFragmentUsage() détecte si vous utilisez les API setTargetFragment(), getTargetFragment() ou getTargetRequestCode(), qui sont obsolètes. (#139, b/153737745)

Modifications apportées à l'API

Nouvelles vérifications lint

  • La vérification lint UseGetLayoutInflater vous avertit désormais lorsque vous utilisez LayoutInflater.from(Context) dans un DialogFragment. Vous devez toujours utiliser la méthode getLayoutInflater() du fragment de boîte de dialogue pour obtenir les valeurs appropriées pour LayoutInflater. (#156, b/170781346)
  • La vérification lint DialogFragmentCallbacksDetector vous avertit désormais lorsque vous appelez setOnCancelListener ou setOnDismissListener dans la méthode onCreateDialog() d'un DialogFragment. Ces écouteurs appartiennent au DialogFragment lui-même. Vous devez donc remplacer onCancel() et onDismiss() pour recevoir ces rappels. (#171, b/181780047, b/187524311)

Corrections de bugs

  • Depuis Fragment 1.3.4 : correction d'une régression introduite dans Fragment 1.3.3 lors de l'utilisation de l'API ViewTreeViewModelStoreOwner.get() avec ViewModelProvider ou de la méthode Jetpack Compose de viewModel() dans un fragment. Ces cas d'utilisation utilisent désormais correctement le ViewModelProvider.Factory fourni par votre fragment s'il remplace getDefaultViewModelProviderFactory() (comme le font les fragments annotés @AndroidEntryPoint lors de l'utilisation de Hilt). Si vous ne remplacez pas cette méthode, une SavedStateViewModelFactory qui enregistre et restaure son état parallèlement à la vue du fragment est créée en tant que fabrique par défaut. (I5cbfa, b/186097368)
  • Depuis Fragment 1.3.4 : lorsque vous utilisez FragmentContainerView avec l'API 29, les encarts ne sont plus envoyés indéfiniment, ce qui résout les problèmes avec les instances BottomNavigationBar et FloatingActionButton. (I1bb78, b/186012452)
  • Depuis Fragment 1.3.4 : vous pouvez désormais récupérer votre Parcelable à partir du lot de résultats du fragment après l'arrêt du processus. (I65932, b/187443158)
  • Depuis Fragment 1.3.4 : lors d'une transition d'élément partagé sur un ViewGroup, si transitionGroup est défini sur "false" pour le ViewGroup, la transition s'effectuera désormais correctement. (I99675)

Contribution externe

Version 1.3

Version 1.3.6

21 juillet 2021

Publication d'androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6 et androidx.fragment:fragment-testing:1.3.6. Liste des commits de la version 1.3.6

Corrections de bugs

  • Depuis Fragment 1.4.0-alpha03 : FragmentManager ne plante plus lorsque vous tentez de masquer un fragment en cours de suppression. (I573dd, b/183634730)
  • La vue de Fragment est désormais correctement définie sur GONE quand vous utilisez hide() lorsque le paramètre transitionGroup=”true” est défini pour la vue racine. (aosp/1766655, b/193603427)
  • Désormais, la première opération de FragmentActivity dans les rappels de cycle de vie qu'il remplace consiste à déverrouiller l'état enregistré. (I6db7a)

Mise à jour de la dépendance

Version 1.3.5

16 juin 2021

Publication d'androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5 et androidx.fragment:fragment-testing:1.3.5. Liste des commits de la version 1.3.5

Corrections de bugs

  • Correction d'une régression dans les transitions d'éléments partagés introduite dans Fragment 1.3.4 par aosp/1679887. Les fragments gèrent désormais correctement les groupes de transition (définis directement via transitionGroup="true" ou indirectement via transitionName ou background), et les éléments partagés ne génèrent plus de IndexOutOfBoundsException. (I16484, b/188679569, b/188969304)

Version 1.3.4

18 mai 2021

Publication d'androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4 et androidx.fragment:fragment-testing:1.3.4. Liste des commits de la version 1.3.4

Corrections de bugs

  • Correction d'une régression introduite dans Fragment 1.3.3 lors de l'utilisation de l'API ViewTreeViewModelStoreOwner.get() avec ViewModelProvider ou de la méthode Jetpack Compose de viewModel() dans un fragment lors de l'utilisation de Hilt. Ces cas d'utilisation utilisent désormais correctement le ViewModelProvider.Factory fourni par votre fragment s'il remplace getDefaultViewModelProviderFactory() (comme le font les fragments annotés @AndroidEntryPoint). Si vous ne remplacez pas cette méthode, une SavedStateViewModelFactory qui enregistre et restaure son état parallèlement à la vue du fragment est créée en tant que fabrique par défaut. (I5cbfa, b/186097368)
  • Lorsque vous utilisez FragmentContainerView avec l'API 29, les encarts ne sont plus envoyés indéfiniment, ce qui résout les problèmes avec les instances BottomNavigationBar et FloatingActionButton. (I1bb78, b/186012452)
  • Vous pouvez désormais récupérer votre Parcelable à partir du lot de résultats du fragment après l'arrêt du processus. (I65932, b/187443158)
  • Lors d'une transition d'élément partagé sur un ViewGroup, si transitionGroup est défini sur "false" pour le ViewGroup, la transition s'effectuera désormais correctement. (I99675)

Version 1.3.3

21 avril 2021

Publication d'androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3 et androidx.fragment:fragment-testing:1.3.3. Liste des commits de la version 1.3.3

Nouvelles fonctionnalités

  • L'utilisation de SavedStateViewModelFactory fonctionne désormais lorsqu'elle est utilisée avec le SavedStateRegistryOwner renvoyé en utilisant ViewTreeSavedStateRegistryOwner.get() avec la vue de Fragment. (I21acf, b/181577191)

Corrections de bugs

  • Correction d'une régression introduite dans Fragment 1.3.2, qui empêchait l'exécution des animations popEnter lors de l'affichage d'une FragmentTransaction contenant une opération setPrimaryNavFragment, comme celles utilisées par NavHostFragment (I38c87, b/183877426)
  • FragmentContainerView s'assure désormais que chaque Fragment reçoit un nouvel ensemble de WindowInsets, garantissant ainsi que chaque fragment peut désormais consommer les encarts de façon indépendante. (I63f68, b/172153900)
  • DialogFragment gère désormais correctement les cas où un fragment enfant est ajouté à un conteneur ayant le même ID qu'un conteneur de votre classe Dialog personnalisée, ce qui résout les problèmes de hiérarchie des vues lorsque vous réutilisez des ID utilisés en interne par des boîtes de dialogue telles que BottomSheetDialog. (Ie6279, b/180021387)
  • FragmentManager.dump() met désormais correctement en retrait le premier fragment de la liste des fragments actifs. (If5c33, b/183705451)

Corrections de bugs dans le nouveau gestionnaire d'état

  • Le nouveau gestionnaire d'état de fragment gère désormais correctement les transitions de sortie avec les opérations de masquage. (I9e4de, b/184830265)

Version 1.3.2

24 mars 2021

Publication d'androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2 et androidx.fragment:fragment-testing:1.3.2. Liste des commits de la version 1.3.2

Corrections de bugs dans le nouveau gestionnaire d'état

  • Lors de l'exécution simultanée d'opérations popBackStack() et commit(), la dernière opération définira désormais la direction de toutes les animations au lieu d'exécuter des animations d'affichage et des animations d'entrée. (I7072e, b/181142246)
  • Le nom de transition des vues dans une hiérarchie d'éléments partagés ne sera plus effacé lors de la transition d'éléments partagés. (I4d4a6, b/179934757)

Mises à jour des dépendances

  • Fragment dépend désormais d'Activity 1.2.2, ce qui résout un problème avec la vérification lint InvalidFragmentVersionForActivityResult d'Activity lors de l'utilisation de Fragment 1.3.1 ou version ultérieure.
  • Fragment dépend désormais de Lifecycle 2.3.1.

Version 1.3.1

10 mars 2021

Publication d'androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1 et androidx.fragment:fragment-testing:1.3.1. Liste des commits de la version 1.3.1

Nouvelles fonctionnalités

  • Les boîtes de dialogue d'un DialogFragment peuvent désormais accéder aux propriétaires de ViewTree via leur DecorView, ce qui garantit que DialogFragment peut être utilisé avec ComposeView. (Ib9290, b/180691023)

Corrections de bugs

  • Les fragments gonflés dans une activité déjà RESUMED à l'aide de FragmentContainerView s'affichent désormais correctement après une modification de configuration. (Ie14c8, b/180538371)
  • Il n'y a plus de } supplémentaire à la fin du fragment toString() (I54705, b/177761088)
  • Les méthodes remplacées dans FragmentActivity héritent désormais correctement de la méthode de base javaDoc (I736ce, b/139548782).
  • La documentation sur les paramètres de setFragmentResult et setFragmentResultListener a été mise à jour pour indiquer qu'ils n'acceptent plus les éléments pouvant être nuls (I990ba, b/178348386).

Corrections de bugs dans le nouveau gestionnaire d'état

  • Correction d'une fuite de mémoire dans les fragments dus à mFocusedView (Ib4e9e, b/179925887)
  • Les fragments appellent désormais correctement onCreateOptionsMenu lors de l'utilisation de transactions d'affichage et de masquage (I8bce8, b/180255554).
  • Les fragments enfants dont les transitions commencent avant la répartition du fragment atteindront désormais correctement l'état RESUMED (Ic11e6, b/180825150)
  • Les fragments gonflés à l'aide de la balise <fragment> arriveront désormais toujours à l'état RESUMED (I452ac, (I9fa49).

Mises à jour des dépendances

Version 1.3.0

10 février 2021

Publication d'androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0 et androidx.fragment:fragment-testing:1.3.0. Liste des commits de la version 1.3.0

Principales modifications depuis la version 1.2.0

  • Nouveau gestionnaire d'état : une réécriture importante des éléments internes de FragmentManager a résolu de nombreux problèmes liés à l'envoi d'événements de cycle de vie, d'animations et de transitions, ainsi qu'au traitement des fragments reportés.
  • Intégration de l'API Activity Result : ajout de la compatibilité avec l'API ActivityResultRegistry introduite dans Activity 1.2.0 pour gérer les flux startActivityForResult()+onActivityResult() et requestPermissions()+onRequestPermissionsResult() sans remplacer les méthodes dans votre fragment, et fourniture des hooks pour tester ces flux. Consultez la section Obtenir un résultat depuis une activité, qui a été mise à jour.

    • Cette version corrige un certain nombre de problèmes liés à des codes de requête non valides et à la distribution des demandes d'autorisation qui empêchent l'API Activity Result de fonctionner sur les versions précédentes de FragmentActivity. Vous devez passer à Fragment 1.3.0 pour utiliser les API Activity Result dans une FragmentActivity ou une AppCompatActivity.
  • API Fragment Result : ajout de la prise en charge de la transmission de résultats entre deux fragments via de nouvelles API sur FragmentManager. Cela fonctionne pour les fragments de hiérarchie (parent/enfant), les DialogFragments et les fragments dans Navigation, et garantit que les résultats ne sont envoyés à votre fragment que lorsqu'il est au moins à l'état STARTED. Les API de fragment cible ont été abandonnées au profit de ces nouvelles API. Consultez Obtenir des résultats à l'aide de l'API Fragment Result.

  • FragmentOnAttachListener : le rappel onAttachFragment() sur FragmentActivity et Fragment a été abandonné. Un nouveau FragmentOnAttachListener a été ajouté pour fournir une alternative plus flexible, permettant la délégation de onAttachFragment() à des écouteurs séparés pouvant être testés, et une prise en charge de l'ajout d'un écouteur à des FragmentManagers autres que votre FragmentManager enfant direct.

  • Améliorations de FragmentScenario : la classe FragmentScenario de l'artefact fragment-testing a été réécrite en Kotlin et a reçu un certain nombre d'améliorations :

    • FragmentScenario utilise désormais setMaxLifecycle() pour implémenter moveToState(), ce qui garantit un comportement cohérent dans tous les niveaux d'API et dissocie l'état du fragment de l'activité sous-jacente.
    • FragmentScenario permet désormais de définir un Lifecycle.State initial permettant de valider l'état du fragment avant de passer à chaque Lifecycle.State pour la première fois.
    • Il existe désormais une alternative à l'API FragmentScenario de onFragment, sous la forme de la méthode d'extension Kotlin réifiée (withFragment), qui vous permet de renvoyer une valeur. En particulier, elle élimine les exceptions générées dans le bloc donné.
  • Prise en charge de ViewTree : Fragment est désormais compatible avec les API ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View) et ViewTreeSavedStateRegistryOwner ajoutées dans Lifecycle 2.3.0 et SavedState 1.1.0 de sorte qu'il renverra le fragment en tant que ViewModelStoreOwner, et un SavedStateRegistryOwner et LifecycleOwner liés au cycle de vie de la vue du fragment lorsque vous utilisez une View dans un Fragment.

  • Modifications de l'animation TRANSIT_ : les effets par défaut des fragments, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE et TRANSIT_FRAGMENT_FADE utilisent désormais Animator au lieu de Animation. Les ressources utilisées pour créer ces animateurs sont désormais privées.

  • Abandon de setRetainInstance() : la méthode setRetainInstance() exécutée sur des fragments a été abandonnée. Avec l'introduction de ViewModels, les développeurs disposent d'une API spécifique pour conserver l'état, qui peut être associée aux graphiques d'Activity, Fragments et Navigation. Cela permet aux développeurs d'utiliser un fragment normal non conservé et de conserver l'état spécifique qu'ils souhaitent conserver séparément, évitant ainsi une source courante de fuites, tout en conservant les propriétés utiles de création et de destruction uniques de l'état conservé (à savoir, le constructeur de ViewModel et le rappel onCleared() qu'il reçoit).

  • Abandon de l'adaptateur ViewPager 1 : avec le lancement de ViewPager21.0.0, les classes FragmentPagerAdapter et FragmentStatePagerAdapter permettant d'interagir avec ViewPager ont été abandonnées. Consultez Effectuer une migration de ViewPager vers ViewPager2.

Version 1.3.0-rc02

27 janvier 2021

Publication d'androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02 et androidx.fragment:fragment-testing:1.3.0-rc02. Liste des commits de la version 1.3.0-rc02.

Corrections de bugs

  • Correction d'un problème pour lequel un DialogFragment parent s'affichait au-dessus d'un DialogFragment enfant après une modification de configuration. Les fragments de la boîte de dialogue enfant apparaissent désormais toujours au-dessus du fragment de boîte de dialogue parent. (I30806, b/177439520)
  • Résolution du problème où l'exécution d'une opération hide avec une Animation entraînait le clignotement du fragment masqué à la fin de l'animation. (I57e22, b/175417675)
  • Les fragments avec des transitions ajoutées avant que la hiérarchie de la vue soit associée atteignent désormais correctement l'état RESUMED. (I1fc1d, b/177154873)

Corrections de bugs dans le nouveau gestionnaire d'état

  • La vue Lifecycle du fragment gère désormais correctement les cas où la vue du fragment est détruite avant que Lifecycle n'atteigne CREATED. Cela évite les exceptions indiquant "no event down from INITIALIZED". (eda2bd, b/176138645)
  • Les fragments qui utilisent un Animator s'affichent désormais dans le bon ordre lors de l'utilisation de FragmentContainerView. (Id9aa3, b/176089197)

Version 1.3.0-rc01

16 décembre 2020

Publication d'androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01 et androidx.fragment:fragment-testing:1.3.0-rc01. Liste des commits de la version 1.3.0-rc01

Corrections de bugs

  • onPrepareOptionsMenu() suit désormais la même logique que onCreateOptionsMenu() et n'est plus appelée lorsqu'un fragment parent appelle setMenuVisibility(false). (Id7de8, b/173203654)

Corrections de bugs dans le nouveau gestionnaire d'état

  • Correction de la fuite et de l'artefact visuel lors de l'ajout d'un fragment avec une Animation à une FragmentContainerView, puis lors de l'interruption de cet ajout avec une opération d'affichage. (I952d8)
  • La vue du fragment restait dans la hiérarchie des vues si elle était remplacée lors de l'utilisation de ses méthodes onCreate() ou onViewCreated(). Ce problème a été résolu. (I8a7d5)
  • La sélection est désormais correctement restaurée sur les vues racines de Fragment lorsqu'elles sont réactivées. (Ifc84b)
  • La combinaison des opérations d'affichage et de remplacement de la même transaction de fragment affiche désormais les animations appropriées (Ifd4e4, b/170328691).

Version 1.3.0-beta02

2 décembre 2020

Publication d'androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 et androidx.fragment:fragment-testing:1.3.0-beta02. Liste des commits de la version 1.3.0-beta02

Nouvelles fonctionnalités

  • FragmentScenario a été entièrement converti en Kotlin tout en conservant la compatibilité source et binaire via l'utilisation des interfaces fonctionnelles de Kotlin 1.4 pour FragmentAction. (I19d31)

Nouveaux comportements

  • Les FragmentContainerViews qui ne gonflent pas un fragment à l'aide de l'attribut class ou android:name peuvent désormais être utilisées en dehors d'une FragmentActivity. (Id4397, b/172266337)
  • Si vous essayez de définir le cycle de vie maximal d'un fragment sur DESTROYED, une IllegalArgumentException est désormais générée (Ie7651, b/170765622)
  • L'initialisation d'un FragmentScenario avec un état DESTROYED génère désormais une IllegalArgumentException (I73590, b/170765622)

Corrections de bugs dans le nouveau gestionnaire d'état

  • La vue ne pouvait pas atteindre son état final si vous interrompiez une transition de fragment qui utilisait Animator ou l'une des options de TRANSIT_FRAGMENT_. Ce problème a été résolu. (I92426, b/169874632)
  • Correction d'un problème qui empêchait la destruction correcte des fragments ayant une Animation en sortie. (I83d65)
  • Les fragments dont les effets ont été inversés peuvent désormais s'annuler et redémarrer avec l'effet d'entrée approprié. (I62226, b/167092035)
  • L'Animator de sortie d'un hide() ne s'exécutait pas. Ce problème a été résolu. (Id7ffe)
  • Désormais, les fragments s'affichent correctement lorsqu'ils sont reportés, puis immédiatement démarrés. (Ie713b, b/170022857)
  • Les fragments qui suppriment leur vue sélectionnée lors d'une animation n'essaieront plus de rétablir la sélection sur la vue détachée une fois qu'ils auront atteint RESUMED (I38c65, b/172925703).

Contribution externe

  • FragmentFactory met désormais en cache les classes de fragment séparément pour les différentes instances ClassLoader. Merci, Simon Schiller ! (#87, b/113886460)

Version 1.3.0-beta01

1er octobre 2020

Publication d'androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 et androidx.fragment:fragment-testing:1.3.0-beta01. Liste des commits de la version 1.3.0-beta01

Nouvelles fonctionnalités

  • setMaxLifecycle() permet désormais de définir l'état Lifecycle sur INITIALIZING tant que le fragment n'a pas été placé à l'état CREATED. (b/159662173)

Modifications apportées à l'API

Nouveaux comportements

  • Les fichiers de ressources fragmentés ont été correctement rendus privés. (aosp/1425237)

Corrections de bugs

  • Désormais, les fragments gonflés à l'aide de la balise <fragment> attendent que leurs vues soient ajoutées à un conteneur avant de passer à l'état STARTED (I02f4c).
  • Les fragments visibles exécutent désormais correctement leurs effets de sortie lorsque setMaxLifecycle() est défini sur CREATED. (b/165822335)
  • La suppression d'un fragment dissocié qui n'a pas été ajouté à la pile "Retour" n'entraîne plus de fuite de mémoire. Merci Nicklas Ansman Giertz ! (b/166489383)
  • Désormais, les fragments actifs auront toujours un FragmentManager non nul, et les fragments avec un FragmentManager non nul seront toujours considérés comme actifs. (aosp/1422346)
  • Les effets par défaut des fragments, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE et TRANSIT_FRAGMENT_FADE, utilisent désormais Animator au lieu de Animation. (b/166155034)

Corrections de bugs dans le nouveau gestionnaire d'état

  • Les fragments restaurent désormais correctement l'état de sélection de leur vue juste avant de lancer leur animation. (Icc256)
  • Les fragments qui ne comportent qu'une transition d'élément partagé remplissent désormais correctement leurs effets spéciaux, ce qui signifie qu'ils passent réellement à leur état final (Iaebc7, b/166658128).
  • Les vues de fragment sont désormais toujours supprimées du conteneur avant d'être détruites. (Id5876)
  • Le nouveau gestionnaire d'état supprime désormais systématiquement la vue de fragment sortant avant d'ajouter la vue de fragment entrant. (I41a6e)
  • Les modifications explicites de la visibilité de la vue d'un fragment sont désormais respectées par le nouveau gestionnaire d'état. Cela signifie que si vous définissez la vue d'un fragment entrant sur INVISIBLE avant le début de l'animation, celle-ci restera invisible. (b/164481490)
  • Les fragments donnent désormais la priorité à Animators par rapport à Animations. Cela signifie qu'un fragment avec les deux n'exécute que Animator et ignore Animation. (b/167579557)
  • Le nouveau gestionnaire d'état n'entraîne plus le clignotement des fragments lors de l'utilisation d'animations entrantes. (b/163084315)

Problème connu

Lorsque vous utilisez le nouveau gestionnaire d'état, si vous appuyez sur la touche Retour pendant un effet spécial d'entrée, au lieu de revenir au fragment précédent, l'ancien fragment n'est jamais ajouté à nouveau, ce qui génère un écran vide. (b/167259187, b/167092035, b/168442830)

Version 1.3.0-alpha08

19 août 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08 et androidx.fragment:fragment-testing:1.3.0-alpha08. Liste des commits de la version 1.3.0-alpha08

Nouveau gestionnaire d'état

Cette version inclut une refactorisation majeure de la gestion de l'état interne de FragmentManager, qui affecte l'envoi de méthodes, d'animations et de transitions du cycle de vie et la manière dont les transactions reportées sont gérées. Cette option est activée par défaut. Pour en savoir plus, consultez l'article de blog Fragments: Rebuilding the Internals (Fragments : refonte des principes internes). (b/139536619, b/147749580)

  • Vous pouvez utiliser une API expérimentale dans FragmentManager.enableNewStateManager(boolean) pour contrôler si FragmentManager utilise le nouveau gestionnaire d'état. (I7b6ee)

Les problèmes suivants ne sont résolus que lors de l'utilisation du nouveau gestionnaire d'état :

  • Le fragment précédent d'une opération replace est maintenant correctement arrêté avant le démarrage du nouveau fragment. (b/161654580)
  • Les fragments empêchent à présent l'exécution de plusieurs animations en concurrence sur les mêmes fragments, évitant ainsi les cas où Animation remplacerait tous les effets Transition ou l'exécution d'un Animator et d'une Transition sur un fragment individuel. (b/149569323)
  • L'enterTransition et l'exitTranstion de tous les fragments entrants et sortants sont maintenant exécutées au lieu de celles du premier fragment entrant et du dernier fragment sortant uniquement. (b/149344150)
  • Les fragments reportés ne sont plus bloqués à l'état CREATED, mais sont déplacés vers l'état STARTED avec les autres fragments. (b/129035555)
  • Correction d'un problème qui entraînait l'exécution d'opérations dans le désordre par FragmentManager lors de la combinaison d'une transaction réorganisée reportée et d'une transaction non réorganisée. (b/147297731)
  • L'affichage simultané de plusieurs fragments n'entraîne plus la visibilité temporaire des fragments intermédiaires lors du report de fragments. (b/37140383)
  • FragmentManager renvoie maintenant les fragments corrects lors de l'appel de findFragmentById() ou findFragmentByTag() à partir du rappel onAttachFragment(). (b/153082833)
  • Les fragments n'appellent plus onCreateView() sur les fragments détruits lorsque le fragment qui les remplace est reporté. (b/143915710)
  • Le message d'erreur qui s'affiche lorsque vous tentez de combiner les instances Transition du framework et Transition d'AndroidX mentionne désormais le fragment avec une transition non valide. (b/155574969)

Nouveaux comportements

  • Vous pouvez maintenant appeler launch() sur un ActivityResultLauncher dans la méthode de cycle de vie onCreate() d'un fragment. (b/161464278)
  • L'appel de registerForActivityResult() après onCreate() génère désormais une exception indiquant que l'opération n'est pas autorisée au lieu de ne retourner aucun résultat sans en informer l'utilisateur après une modification de la configuration. (b/162255449)
  • FragmentActivity utilise désormais l'API OnContextAvailableListener introduite dans Activity 1.2.0-alpha08 pour restaurer l'état de FragmentManager. Tous les écouteurs ajoutés aux sous-classes de FragmentActivity s'exécuteront après cet écouteur. (I513da)

Corrections de bugs

  • Les ActivityOptions transmises lors de l'utilisation de startIntentSenderForResult() sont désormais respectées. (b/162247961)

Problème connu

  • Lors de l'utilisation du nouveau gestionnaire d'état, si vous définissez directement la visibilité de la vue racine du fragment après onViewCreated() et avant onResume(), la visibilité que vous avez définie sera remplacée par FragmentManager, qui contrôle la visibilité de la vue racine. Pour contourner ce problème, vous devriez toujours utiliser les opérations hide() et show() pour modifier la visibilité de votre fragment. (b/164481490)

Version 1.3.0-alpha07

22 juillet 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07 et androidx.fragment:fragment-testing:1.3.0-alpha07. Liste des commits de la version 1.3.0-alpha07

Nouvelles fonctionnalités

  • FragmentScenario permet désormais de définir un état de cycle de vie initial de CREATED, STARTED ou RESUMED au lieu de toujours faire passer le fragment à l'état RESUMED. (b/159662750)
  • Ajout d'une alternative à l'API FragmentScenario de onFragment sous la forme de la méthode d'extension réifiée Kotlin (withFragment) qui vous permet de renvoyer une valeur. En particulier, elle élimine les exceptions générées dans le bloc donné. (b/158697631)

Nouveaux comportements

  • FragmentScenario utilise désormais setMaxLifecycle() pour implémenter moveToState(), ce qui garantit un comportement cohérent dans tous les niveaux d'API et dissocie l'état du fragment de l'activité sous-jacente. (b/156527405)
  • Le SavedStateRegistryOwner renvoyé par ViewTreeSavedStateRegistryOwner est désormais lié au cycle de vie de la vue du fragment. Ainsi, son état est enregistré et restauré en même temps que la vue du fragment. (b/158503763)

Corrections de bugs

  • Les fragments attendent désormais que la vue du fragment soit associée avant d'appeler ViewCompat.requestApplyInsets(), ce qui évite les cas où la requête d'encart était supprimée. (b/158095749)
  • L'appel de clearFragmentResultListener efface désormais correctement l'observateur de cycle de vie. (b/159274993)

Version 1.3.0-alpha06

10 juin 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06 et androidx.fragment:fragment-testing:1.3.0-alpha06. Liste des commits de la version 1.3.0-alpha06

Nouvelles fonctionnalités

  • Le rappel onAttachFragment() sur FragmentActivity et Fragment a été abandonné. Un nouveau FragmentOnAttachListener a été ajouté pour fournir une alternative plus flexible, permettant la délégation de onAttachFragment() à des écouteurs séparés pouvant être testés, et une prise en charge de l'ajout d'un écouteur à des FragmentManagers autres que votre FragmentManager enfant direct. (I06d3d)

Corrections de bugs

  • L'état de la vue des fragments parents est maintenant rétabli avant celui de leurs fragments enfants, ce qui résout un problème d'ordre visuel après une modification de configuration lorsqu'un DialogFragment affichait un autre DialogFragment en tant que fragment enfant. (b/157195715)
  • Correction d'un problème qui empêchait la vérification lint UseRequireInsteadOfGet de gérer correctement les utilisations opérateurs ?. et !! de façon enchaînée. (b/157677616)

Version 1.3.0-alpha05

20 mai 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05 et androidx.fragment:fragment-testing:1.3.0-alpha05. Liste des commits de la version 1.3.0-alpha05

Nouvelles fonctionnalités

Modifications apportées à l'API

  • Les API setFragmentResult() et setFragmentResultListener() acceptent désormais respectivement les valeurs Bundle et FragmentResultListener. Pour effacer explicitement un résultat ou un écouteur précédemment défini, utilisez les nouvelles méthodes clearFragmentResult() et clearFragmentResultListener(). (b/155416778)
  • Les extensions Kotlin setFragmentResultListener() qui acceptent un lambda sont désormais marquées comme inline. (b/155323404)

Nouveaux comportements

  • Les startActivityForResult(), startIntentSenderForResult() et requestPermissions précédemment abandonnés sur Fragment, utilisent désormais ActivityResultRegistry en interne, ce qui supprime la restriction qui consistait à n'utiliser que les bits inférieurs (en dessous de 0xFFFF) pour vos codes de requête lors de l'utilisation de ces API. (b/155518741)

Mises à jour de la documentation

  • Développement de la documentation sur les constructeurs Fragment(@LayoutRes int) et DialogFragment(@LayoutRes int) pour préciser qu'ils doivent être appelés à partir du constructeur sans argument de vos sous-classes lorsque vous utilisez la valeur par défaut FragmentFactory. (b/153042497)

Version 1.3.0-alpha04

29 avril 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04 et androidx.fragment:fragment-testing:1.3.0-alpha04. Liste des commits de la version 1.3.0-alpha04

Nouvelles fonctionnalités

  • Ajout de la prise en charge de la transmission de résultats entre deux fragments via de nouvelles API sur FragmentManager. Cela fonctionne pour les fragments de hiérarchie (parent/enfant), les DialogFragments et les fragments dans Navigation, et garantit que les résultats ne sont envoyés à votre fragment que lorsqu'il est au moins à l'état STARTED. (b/149787344)

Modifications apportées à l'API

  • Les API de fragment cible ont été abandonnées. Pour transférer des données entre fragments, utilisez plutôt les nouvelles API Fragment Result. (b/149787344)
  • Les API startActivityForResult()/onActivityResult() et requestPermissions()/onRequestPermissionsResult() sur Fragment ont été abandonnées. Veuillez utiliser les API Activity Result. (aosp/1290887)
  • Modification destructive d'Activity 1.2.0-alpha04 : la méthode prepareCall() a été renommée en registerForActivityResult(). (aosp/1278717)

Corrections de bugs

  • Le getViewLifecycleOwner() du fragment est maintenant arrêté avant l'appel de onSaveInstanceState(), reflétant le comportement du cycle de vie du fragment. (b/154645875)
  • L'appel de setMenuVisibility(false) sur un fragment modifie désormais correctement la visibilité des menus fournis par ses fragments enfants. (b/153593580)
  • Correction d'une illegalStateException lors de l'ajout d'un fragment à la hiérarchie de vues d'un DialogFragment avec FragmentContainerView. (b/154366601)
  • La méthode getDefaultViewModelProviderFactory() exécutée sur des fragments ne plante plus lorsque vous hébergez vos fragments en dehors d'une activité. (b/153762914)

Version 1.3.0-alpha03

1er avril 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 et androidx.fragment:fragment-testing:1.3.0-alpha03. Liste des commits de la version 1.3.0-alpha03.

Modifications apportées à l'API

  • Les méthodes prepareCall sur Fragment sont désormais final. (b/152439361)

Corrections de bugs

  • Correction d'une régression introduite dans Fragment 1.3.0-alpha02 lors de l'utilisation de BottomSheetDialogFragment. (b/151652127, aosp/1263328, aosp/1265163)
  • Correction d'un plantage lors de l'utilisation de prepareCall à partir d'un fragment après un changement de configuration. (b/152137004)
  • Correction d'un problème pour lequel les transitions d'élément partagé et de sortie étaient ignorées lors de l'utilisation de setTargetFragment(). (b/152023196)
  • Depuis Fragment 1.2.4 : mise à jour des règles ProGuard de Fragment pour permettre l'obscurcissement des fragments conservés. (b/151605338)
  • Depuis Fragment 1.2.4 : désactivation de la règle lint FragmentLiveDataObserve sur les classes DialogFragment, car leur cycle de vie et le cycle de vie de leur vue sont toujours synchronisés. Vous pouvez donc utiliser this ou viewLifecycleOwner lors de l'appel de observe. (b/151765086)

Modifications de la dépendance

  • Les fragments dépendent d'Activity 1.2.0-alpha03, qui a considérablement amélioré l'API Activity Result introduite dans Activity 1.2.0-alpha02.

Version 1.3.0-alpha02

18 mars 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02 et androidx.fragment:fragment-testing:1.3.0-alpha02. Liste des commits de la version 1.3.0-alpha02

Nouvelles fonctionnalités

  • Ajout de la compatibilité avec l'API ActivityResultRegistry introduite dans Activity 1.2.0-alpha02 pour gérer les flux startActivityForResult()+onActivityResult() et requestPermissions()+onRequestPermissionsResult() sans remplacer les méthodes dans votre fragment, et fourniture des hooks pour tester ces flux. Consultez la section Obtenir un résultat depuis une activité, qui a été mise à jour. (b/125158199)

Modifications apportées à l'API

  • DialogFragment fournit désormais un constructeur qui accepte une @LayoutRes indiquant la mise en page que onCreateView() doit gonfler par défaut. (b/150327080)
  • La méthode onActivityCreated() est désormais obsolète. Le code touchant la vue du fragment doit être effectué dans onViewCreated() (appelé juste avant onActivityCreated()) et tout autre code d'initialisation dans onCreate(). Pour recevoir un rappel lorsque la méthode onCreate() de l'activité est terminée, un LifeCycleObserver doit être enregistré dans le Lifecycle de l'activité dans onAttach(), puis supprimé une fois le rappel onCreate() reçu. (b/144309266)

Corrections de bugs

  • Depuis Fragment 1.2.3 : correction d'un bug dans DialogFragment qui entraînait une StackOverflowError lors de l'appel de getLayoutInflater() depuis onCreateDialog(). (b/117894767, aosp/1258664)
  • Depuis Fragment 1.2.3 : réduction du champ d'application des règles ProGuard incluses de Fragment pour que les classes Fragment inutilisées puissent être supprimées. (b/149665169)
  • Depuis Fragment 1.2.3 : correction des faux positifs dans la vérification lint UseRequireInsteadOfGet lors de l'utilisation d'un nom de variable locale qui occultait le nom de la propriété Kotlin. (b/149891163)
  • Depuis Fragment 1.2.3 : FragmentContainerView ne génère plus une UnsupportedOperationException en raison de l'utilisation d'un constructeur incorrect dans l'aperçu de mise en page. (b/149707833)

Problèmes connus

  • BottomSheetDialogFragment ne positionne plus correctement sa boîte de dialogue à l'écran. (b/151652127)

Version 1.3.0-alpha01

4 mars 2020

Publication d'androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01 et androidx.fragment:fragment-testing:1.3.0-alpha01. Liste des commits de la version 1.3.0-alpha01

Nouvelles fonctionnalités

Modifications apportées à l'API

  • La méthode setRetainInstance() exécutée sur des fragments a été abandonnée. Avec l'introduction de ViewModels, les développeurs disposent d'une API spécifique pour conserver l'état, qui peut être associée aux graphiques d'Activity, Fragments et Navigation. Cela permet aux développeurs d'utiliser un fragment normal non conservé et de conserver l'état spécifique qu'ils souhaitent conserver séparément, évitant ainsi une source courante de fuites, tout en conservant les propriétés utiles de création et de destruction uniques de l'état conservé (à savoir, le constructeur de ViewModel et le rappel onCleared() qu'il reçoit). (b/143911815)
  • Avec le lancement de ViewPager2 1.0.0, les classes FragmentPagerAdapter et FragmentStatePagerAdapter permettant d'interagir avec ViewPager ont été abandonnées. Consultez Effectuer une migration de ViewPager vers ViewPager2. (b/145132715)

Corrections de bugs

  • Désormais, les règles ProGuard de Fragment conservent uniquement les classes Fragment des constructeurs par défaut qui sont utilisées, et non celles de toutes les instances Fragment, ce qui corrige une régression introduite dans Fragment 1.2.1. (b/149665169
  • Les règles lint require___() ajoutées dans Fragment 1.2.2 n'engendrent plus de faux positifs sur les variables locales qui portent le même nom que les noms de propriété Kotlin occultés (par exemple, view). (b/149891163)
  • FragmentContainerView ne génère plus de UnsupportedOperationException lors de l'utilisation de l'aperçu de mise en page dans Android Studio. (b/149707833)
  • Correction du problème pour lequel les fragments conservés qui étaient ajoutés après l'enregistrement de l'état n'étaient pas continuellement recréés, puis détruits après chaque modification de configuration. (b/145832397)

Version 1.2.5

Version 1.2.5

10 juin 2020

Publication d'androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5 et androidx.fragment:fragment-testing:1.2.5. Liste des commits de la version 1.2.5

Corrections de bugs

  • Le getViewLifecycleOwner() du fragment est maintenant arrêté avant l'appel de onSaveInstanceState(), reflétant le comportement du cycle de vie du fragment. Ce correctif a déjà été publié dans Fragment 1.3.0-alpha04. (b/154645875)
  • L'appel de setMenuVisibility(false) sur un fragment modifie désormais correctement la visibilité des menus fournis par ses fragments enfants. Ce correctif a déjà été publié dans Fragment 1.3.0-alpha04. (b/153593580)

Version 1.2.4

Version 1.2.4

1er avril 2020

Publication d'androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4 et androidx.fragment:fragment-testing:1.2.4. Liste des commits de la version 1.2.4

Corrections de bugs

  • Mise à jour des règles ProGuard de Fragment pour permettre l'obscurcissement des fragments conservés. (b/151605338)
  • Désactivation de la règle lint FragmentLiveDataObserve sur les classes DialogFragment, car leur cycle de vie et le cycle de vie de leur vue sont toujours synchronisés. Vous pouvez donc utiliser this ou viewLifecycleOwner lors de l'appel de observe. (b/151765086)

Version 1.2.3

Version 1.2.3

18 mars 2020

Publication d'androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3 et androidx.fragment:fragment-testing:1.2.3. Liste des commits de la version 1.2.3

Corrections de bugs

  • Correction d'un bug dans DialogFragment qui entraînait une StackOverflowError lors de l'appel de getLayoutInflater() depuis onCreateDialog(). (b/117894767, aosp/1258665)
  • Réduction du champ d'application des règles ProGuard incluses de Fragment pour que les classes Fragment non utilisées puissent être supprimées. (b/149665169)
  • Correction des faux positifs dans la vérification lint UseRequireInsteadOfGet lors de l'utilisation d'un nom de variable locale qui occultait le nom de la propriété Kotlin. (b/149891163)
  • FragmentContainerView ne génère plus de UnsupportedOperationException lors de l'utilisation du mauvais constructeur dans l'aperçu de mise en page. (b/149707833)

Version 1.2.2

Version 1.2.2

19 février 2020

Publication d'androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 et androidx.fragment:fragment-testing:1.2.2. Liste des commits de la version 1.2.2

Nouvelles vérifications lint

  • lint suggère d'utiliser le viewLifecycleOwner en tant que LifecycleOwner dans les appels de OnBackPressedDispatcher dans onCreateView(), onViewCreated() et onActivityCreated(). (b/142117657)
  • Ajout d'une vérification lint qui confirme que vous utilisez le bon debugImplementation lorsque vous utilisez l'artefact fragment-testing. (b/141500106)
  • Les fragments suggèrent maintenant d'utiliser les méthodes require___() associées pour obtenir des messages d'erreur plus descriptifs au lieu de checkNotNull(get___()) ,requireNonNull(get___()) ou get___()!! pour toutes les API de Fragment qui incluent à la fois un get et un require équivalent. (aosp/1202883)

Corrections de bugs

  • Correction des fichiers ProGuard de Fragment pour éviter les avertissements R8 (b/148963981)
  • Amélioration de la vérification lint existante qui suggère d'utiliser viewLifecycleOwner lors de l'utilisation de observe pour gérer également la version de la méthode d'extension observe de livedata-ktx. (b/148996309)
  • Correction de la mise en forme de la plupart des vérifications lint (aosp/1157012)

Contributions externes

  • Merci à Zac Sweers d'avoir participé aux vérifications lint require___() pour le compte de Slack. (aosp/1202883)

Version 1.2.1

Version 1.2.1

5 février 2020

Publication d'androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 et androidx.fragment:fragment-testing:1.2.1. Liste des commits de la version 1.2.1

Corrections de bugs

  • Le constructeur par défaut est désormais conservé par ProGuard pour les fragments ajoutés via les méthodes add et replace qui utilisent une instance Class (ou les versions corrigées de Kotlin). (b/148181315)
  • FragmentStatePagerAdapter et FragmentPagerAdapter ne détectent plus les exceptions générées par FragmentManager lors de l'exécution de finishUpdate(). (aosp/1208711)
  • Correction d'un problème pour lequel FragmentManager.findFragment() ne fonctionnait pas avec les fragments ajoutés via la balise <fragment>. (b/147784323)
  • Désormais, les fragments gonflés à l'aide de la balise <fragment> reçoivent toujours un appel à onInflate() avant onCreate() dans la mise en page. (aosp/1215856)
  • L'appel de toString() sur une instance FragmentManager ne génère plus de NullPointerException lorsque l'activité est déjà détruite. (b/148189412)

Modifications de la dépendance

Version 1.2.0

Version 1.2.0

22 janvier 2020

Publication d'androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0 et androidx.fragment:fragment-testing:1.2.0. Liste des commits de la version 1.2.0

Changements importants depuis la version 1.1.0

  • FragmentContainerView : FragmentContainerView est le conteneur fortement recommandé pour les fragments ajoutés de façon dynamique. Il remplace l'utilisation de FrameLayout ou d'autres mises en page. Il accepte aussi la même class, le même android:name et le même android:tag facultatif que la balise <fragment>, mais utilise une FragmentTransaction normale pour ajouter ce fragment initial, au lieu du chemin de code personnalisé utilisé par <fragment>.
  • Délai de onDestroyView() : les fragments attendent maintenant la fin des animations de sortie, des transitions de framework de sortie et des transitions AndroidX (lorsque vous utilisez Transition 1.3.0) avant d'appeler onDestroyView()
  • add() et replace() basés sur les classes : ajout de nouvelles surcharges de add() et replace() sur FragmentTransaction, qui prennent une Class<? extends Fragment> et un Bundle facultatif d'arguments. Ces méthodes utilisent votre FragmentFactory pour construire une instance du fragment à ajouter. Des extensions Kotlin qui utilisent des types réifiés (fragmentTransaction.replace<YourFragment>(R.id.container), par exemple) ont également été ajoutées à fragment-ktx.
  • Intégration de Lifecycle ViewModel SavedState : SavedStateViewModelFactory est désormais la fabrique par défaut utilisée lorsque vous utilisez by viewModels(), by activityViewModels(), le constructeur ViewModelProvider ou ViewModelProviders.of() avec un fragment.
  • Nouvelles vérifications lint : ajout d'une nouvelle vérification lint qui garantit que vous utilisez getViewLifecycleOwner() lorsque vous observez LiveData depuis onCreateView(), onViewCreated() ou onActivityCreated().
  • Abandon de getFragmentManager() : les méthodes getFragmentManager() et requireFragmentManager() sur Fragment ont été abandonnées et remplacées par une seule méthode getParentFragmentManager(), qui renvoie le FragmentManager non nul auquel le fragment est ajouté (vous pouvez utiliser isAdded() pour déterminer s'il peut être appelé en toute sécurité).
  • Abandon de FragmentManager.enableDebugLogging() : la méthode statique FragmentManager.enableDebugLogging a été abandonnée. FragmentManager respecte désormais Log.isLoggable() pour la balise FragmentManager, ce qui vous permet d'activer la journalisation DEBUG ou VERBOSE sans recompiler votre application.

Problèmes connus

  • Les fragments référencés uniquement via l'attribut class ou android:name sur une FragmentContainerView ne sont pas automatiquement conservés par ProGuard. Vous devez donc ajouter manuellement une règle de conservation pour chaque classe de fragment. (b/142601969)
  • Lorsque vous ajoutez un NavHostFragment à l'aide de class ou android:name en XML avec FragmentContainerView, vous ne pouvez pas utiliser findNavController() dans onCreate() de votre activité. (b/142847973)

Version 1.2.0-rc05

8 janvier 2020

Publication d'androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05 et androidx.fragment:fragment-testing:1.2.0-rc05. Liste des commits de la version 1.2.0-rc05

Corrections de bugs

  • Correction d'une régression dans Fragment 1.2.0-rc04 lors de l'utilisation de la balise <fragment>, qui provoquait un appel incorrect de onViewCreated() lors de la destruction de l'activité. (b/146290333)
  • Désormais, la non-configuration des fragments ajoutés avec la balise <fragment> est effacée même s'ils n'apparaissent que parfois dans la mise en page (par exemple, uniquement en mode Paysage). Par conséquent, ces fragments sont désormais correctement déplacés vers CREATED, même s'ils ne figurent pas dans votre mise en page, au lieu d'être instanciés et de ne jamais passer par aucune méthode de cycle de vie. (b/145769287)

Version 1.2.0-rc04

18 décembre 2019

Publication d'androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04 et androidx.fragment:fragment-testing:1.2.0-rc04. Liste des commits de la version 1.2.0-rc04

Corrections de bugs

  • Ajustement des animations de TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE et TRANSIT_FRAGMENT_FADE pour éviter les problèmes visuels. (b/145468417)

Version 1.2.0-rc03

4 décembre 2019

Publication d'androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03 et androidx.fragment:fragment-testing:1.2.0-rc03. Liste des commits de la version 1.2.0-rc03

Corrections de bugs

  • Modification d'un changement de comportement involontaire : les fragments supprimés étaient toujours renvoyés par findFragmentById()/findFragmentByTag() pendant l'exécution des transitions et animations de sortie. (b/143982969, aosp/1167585)
  • Les fragments enfants sont maintenant correctement arrêtés avant leurs parents lorsque l'activité contenante appelle onSaveInstanceState(). (b/144380645)
  • Correction d'un problème pour lequel des vues étaient marquées comme INVISIBLE par erreur après l'affichage d'un fragment masqué. (b/70793925)
  • Les transitions d'éléments partagés de fragment gèrent désormais les vues ayant fait l'objet d'une rotation, d'une mise à l'échelle, etc. (b/142835261)

Mises à jour de la documentation

  • Clarification de setUserVisibleHint() dans la documentation concernant les fonctionnalités abandonnées. (b/143897055)
  • Amélioration de la documentation concernant setFragmentFactory() et getFragmentFactory() pour indiquer plus clairement que la définition d'une FragmentFactory affecte également les FragmentManagers enfants. (aosp/1170095)

Modifications de la dépendance

  • Fragments dépend désormais de Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 et Activity 1.1.0-rc03.

Version 1.2.0-rc02

7 novembre 2019

Publication d'androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02 et androidx.fragment:fragment-testing:1.2.0-rc02. Liste des commits de la version 1.2.0-rc02

Corrections de bugs

  • En Kotlin, le LintFix pour l'utilisation de getViewLifecycleOwner() lors de l'observation de LiveData à partir de onCreateView(), onViewCreated() ou onActivityCreated() (introduit dans Fragment 1.2.0-rc01) utilise désormais la syntaxe d'accès aux propriétés Kotlin viewLifecycleOwner au lieu de getViewLifecycleOwner(). (aosp/1143821)

Version 1.2.0-rc01

23 octobre 2019

Publication d'androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01 et androidx.fragment:fragment-testing:1.2.0-rc01. Liste des commits de la version 1.2.0-rc01

Nouvelles fonctionnalités

  • FragmentContainerView accepte désormais l'attribut class en plus de android:name, reflétant ainsi la fonctionnalité de la balise <fragment>. (b/142722242)
  • Ajout d'une nouvelle vérification lint qui garantit que vous utilisez getViewLifecycleOwner() lorsque vous observez LiveData depuis onCreateView(), onViewCreated() ou onActivityCreated(). (b/137122478)

Corrections de bugs

  • Les rappels onDismiss et onCancel sur DialogFragment garantissent désormais que la DialogInterface qui leur est transmise est non nulle et que getDialog() renvoie une valeur non nulle lors de leur exécution. (b/141974033)
  • FragmentContainerView ajoute maintenant le fragment défini par class ou android:name pour le gonflement, afin que findFragmentById() et findFragmentByTag() fonctionnent immédiatement après. (b/142520327)
  • Correction d'une IllegalStateException dans FragmentContainerView en raison de l'enregistrement de l'état. (b/142580713)
  • Correction d'une UnsupportedOperationException dans FragmentContainerView lorsque la classe FragmentContainerView est obscurcie. (b/142657034)

Problèmes connus

  • Les fragments référencés uniquement via l'attribut class ou android:name sur une FragmentContainerView ne sont pas automatiquement conservés par ProGuard. Vous devez donc ajouter manuellement une règle de conservation pour chaque classe de fragment. Nous avons désactivé la règle lint suggérant de passer à FragmentContainerView jusqu'à la résolution du problème via aapt2. (b/142601969)

Version 1.2.0-beta02

11 octobre 2019

Publication d'androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02 et androidx.fragment:fragment-testing:1.2.0-beta02. Liste des commits de la version 1.2.0-beta02

Corrections de bugs

  • Correction d'un problème en raison duquel la méthode onInflate() de Fragment ne recevait pas les attributs appropriés de la part de FragmentContainerView, ce qui empêchait par exemple d'utiliser NavHostFragment. (b/142421837)

Version 1.2.0-beta01

9 octobre 2019

Publication d'androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01 et androidx.fragment:fragment-testing:1.2.0-beta01. Liste des commits de la version 1.2.0-beta01

Nouvelles fonctionnalités

  • FragmentContainerView permet d'ajouter un fragment initial avec une prise en charge supplémentaire pour l'attribut XML android:name et l'attribut XML facultatif android:tag. Contrairement à la balise <fragment>, FragmentContainerView utilise une FragmentTransaction standard en arrière-plan pour ajouter le fragment initial, ce qui permet d'effectuer d'autres opérations FragmentTransaction sur la FragmentContainerView et permet d'utiliser la liaison de vue pour la mise en page. (b/139830628, b/141177981)
  • Fragments contient désormais un avertissement lint offrant une solution rapide pour remplacer <fragment> par FragmentContainerView. (b/139830056)

Corrections de bugs

  • Correction d'une ClassCastException lors de l'utilisation d'androidx.transition. (b/140680619)
  • Lorsque vous utilisez Transition 1.3.0-beta01, les fragments attendent désormais la fin des transitions androidx.transition (en plus des animations et des transitions de framework, qui ont été corrigées respectivement dans Fragment 1.2.0-alpha03 et Fragment 1.2.0-alpha02) avant de déclencher onDestroyView(). (aosp/1119841)
  • Lorsque vous utilisez Transition 1.3.0-beta01, les fragments annulent désormais correctement les transitions androidx.transition avant de lancer de nouvelles transitions/animations sur le même conteneur. (aosp/1119841)
  • Correction d'un problème sur l'API 17 et versions antérieures lors de l'utilisation de transitions androidx.transition sur la vue racine de votre fragment avec FragmentContainerView. (b/140361893)
  • L'artefact fragment-testing dépend désormais d'AndroidX Test 1.2.0, ce qui corrige une incompatibilité avec la dernière version d'Espresso 3.2.0. (b/139100149)
  • Suppression de l'utilisation de Log.w dans FragmentManager. (aosp/1126468)

Problèmes connus

  • La méthode onInflate() de Fragment ne reçoit pas les attributs appropriés de la part de FragmentContainerView, ce qui empêche par exemple d'utiliser NavHostFragment. (b/142421837)

Version 1.2.0-alpha04

18 septembre 2019

Publication d'androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04 et androidx.fragment:fragment-testing:1.2.0-alpha04. Liste des commits de la version 1.2.0-alpha04

Modifications apportées à l'API

  • Les méthodes getFragmentManager() et requireFragmentManager() sur Fragment ont été abandonnées et remplacées par une seule méthode getParentFragmentManager(), qui renvoie le FragmentManager non nul auquel le fragment est ajouté (vous pouvez utiliser isAdded() pour déterminer si vous pouvez l'appeler en toute sécurité). (b/140574496)
  • La méthode statique FragmentManager.enableDebugLogging a été abandonnée. FragmentManager respecte désormais Log.isLoggable() pour la balise FragmentManager, ce qui vous permet d'activer la journalisation DEBUG ou VERBOSE sans recompiler votre application. (aosp/1116591)

Corrections de bugs

  • Désormais, les fragments sont correctement détruits lorsque les animations de sortie d'autres fragments sont en cours d'exécution. (b/140574199)
  • Correction d'un problème pour lequel Fragments appelait Activity.findViewById() alors qu'il ne le faisait pas auparavant. (aosp/1116431)

Version 1.2.0-alpha03

5 septembre 2019

Publication de androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 et androidx.fragment:fragment-testing:1.2.0-alpha03. Les commits inclus dans cette version sont disponibles sur cette page.

Modifications apportées à l'API

  • FragmentContainerView est désormais final. (b/140133091)

Corrections de bugs

  • FragmentContainerView inverse désormais correctement l'ordre de dessin lorsque vous faites apparaître des fragments depuis la pile "Retour". (b/139104187)
  • Correction d'un problème qui entraînait l'exécution d'une animation incorrecte lors de l'affichage d'un fragment et de l'ajout d'un nouveau fragment en même temps. (b/111659726)
  • Les fragments attendent désormais la fin des transitions (en plus des animations, ce qui a été corrigé dans Fragment 1.2.0-alpha02) avant de déclencher onDestroyView(). (b/138741697)

Version 1.2.0-alpha02

7 août 2019

Publication d'androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 et androidx.fragment:fragment-testing:11.2.0-alpha02. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • SavedStateViewModelFactory est désormais la fabrique par défaut utilisée lorsque vous utilisez by viewModels(), by activityViewModels(), le constructeur ViewModelProvider ou ViewModelProviders.of() avec un Fragment. (b/135716331)
  • Les animations par défaut lorsque vous utilisez TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE et TRANSIT_FRAGMENT_FADE avec setTransition sur un FragmentTransaction ont été mises à jour pour correspondre aux animations utilisées par les activités sur les appareils Android 10. (aosp/1012812, aosp/1014730)

Modifications apportées à l'API

  • Présente FragmentContainerView comme le conteneur fortement recommandé pour les fragments ajoutés de façon dynamique. Il remplace l'utilisation de FrameLayout, car il corrige les problèmes d'ordre de plan d'animation et d'encarts de fenêtre distribués à Fragments. (b/37036000, aosp/985243, b/136494650)
  • Ajout d'une méthode statique FragmentManager.findFragment(View) pour récupérer le fragment contenant à partir d'une vue gonflée par un fragment. Une extension Kotlin est également disponible dans fragment-ktx. (aosp/1090757)
  • Ajout de nouvelles surcharges pour add() et replace() sur FragmentTransaction, qui acceptent une Class<? extends Fragment> et un Bundle facultatif d'arguments. Ces méthodes utilisent votre FragmentFactory pour construire une instance du fragment à ajouter. Des extensions Kotlin qui utilisent des types réifiés (fragmentTransaction.replace<YourFragment>(R.id.container), par exemple) ont également été ajoutées à fragment-ktx. (b/126124987)
  • Des annotations @MainThread ont été ajoutées aux rappels de cycle de vie de Fragment. (b/127272564)
  • Les API liées au titre du fil d'Ariane sur FragmentTransaction et FragmentManager.BackStackEntry ont été abandonnées. (b/138252944)
  • La méthode setTransitionStyle sur FragmentTransaction a été abandonnée. (aosp/1011537)
  • Un grand nombre des méthodes dans FragmentManager ne sont plus abstract. FragmentManager lui-même reste abstract et ne doit pas être directement instancié ni étendu. Vous ne devriez poursuivre que pour obtenir une instance existante de getSupportFragmentManager(), getChildFragmentManager(), etc.

Corrections de bugs

  • Depuis Fragment 1.1.0-rc04 : les fragments annulent désormais correctement les transitions reportées sur les fragments qui ont été affichés. (b/138251858)
  • Depuis Fragment 1.1.0-rc03 : correction d'un problème pour lequel l'appel de postponeEnterTransition() plusieurs fois avec un délai avant expiration n'annulait pas les délais avant expiration précédents. (b/137797118)
  • Depuis Fragment 1.1.0-rc02 : correction du plantage dans FragmentPagerAdapter et FragmentStatePagerAdapter lors de la suppression de l'élément actuel. (b/137209870)
  • Les fragments attendent désormais la fin des animations avant de déclencher onDestroyView(). (b/136110528)
  • Les animations de fragment issues des fragments enfants et de leurs descendants sont désormais correctement gérées lors de l'animation du fragment parent. (b/116675313)
  • Correction d'une NullPointerException lors de l'utilisation de transitions d'éléments partagés et de la combinaison d'une opération d'affichage et d'ajout. (b/120507394)
  • Ajout d'une solution de contournement aux IllegalStateExceptions lors de l'utilisation de FragmentPagerAdapter et FragmentStatePagerAdapter dans des tests Robolectric. (b/137201343)

Version 1.2.0-alpha01

2 juillet 2019

Publication d'androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 et androidx.fragment:fragment-testing:1.2.0-alpha01. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • FragmentManager appelle désormais requestApplyInsets() après avoir associé la vue du fragment et directement avant d'appeler onViewCreated(), garantissant ainsi que la vue dispose toujours des encarts corrects. (b/135945162)

Corrections de bugs

  • Correction d'une NullPointerException lors de l'affichage d'une FragmentTransaction utilisant setPrimaryNavigationFragment() avant replace(). (b/134673465)

Version 1.1.0

Version 1.1.0

5 septembre 2019

Publication de androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 et androidx.fragment:fragment-testing:1.1.0. Les commits inclus dans cette version sont disponibles sur cette page.

Changements importants depuis la version 1.0.0

  • fragment-testing : l'artefact fragment-testing fournit une classe FragmentScenario permettant de tester un fragment de façon isolée. Pour en savoir plus, consultez la documentation sur le test des fragments de votre application.
  • FragmentFactory : vous pouvez désormais définir une FragmentFactory sur un FragmentManager pour gérer la création d'instances de fragment, en supprimant l'exigence stricte de disposer d'un constructeur sans argument.
  • Délégués de propriété Kotlin pour ViewModels : l'artefact fragment-ktx contient désormais deux délégués de propriété Kotlin : by viewModels() pour accéder aux ViewModels associés au fragment individuel et by activityViewModels() pour accéder aux ViewModels limités à l'activité.
  • Cycle de vie maximal : vous pouvez désormais définir un état de cycle de vie maximal pour un fragment en appelant setMaxLifecycle() sur une FragmentTransaction. Cela remplace setUserVisibleHint(), désormais obsolète. FragmentPagerAdapter et FragmentStatePagerAdapter disposent d'un nouveau constructeur qui vous permet de passer au nouveau comportement.
  • Constructeur FragmentActivity LayoutId : les sous-classes de FragmentActivity peuvent désormais appeler facultativement un constructeur sur FragmentActivity qui accepte un ID R.layout, indiquant la mise en page à définir en tant que vue de contenu, comme alternative à l'appel de setContentView() dans onCreate(). Cela ne change pas l'obligation pour votre sous-classe d'avoir un constructeur sans argument.
  • Constructeur Fragment LayoutId : les sous-classes de Fragment peuvent désormais appeler facultativement un constructeur sur Fragment qui accepte un ID R.layout, indiquant la mise en page à utiliser pour ce fragment comme alternative au remplacement de onCreateView(). Vous pouvez configurer la mise en page gonflée dans onViewCreated().
  • Report avec un délai avant expiration : une nouvelle surcharge de postponeEnterTransition() a été ajoutée et accepte un délai avant expiration.

Version 1.1.0-rc04

7 août 2019

Publication d'androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 et androidx.fragment:fragment-testing:1.1.0-rc04. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Les fragments annulent désormais correctement les transitions reportées sur les fragments qui ont été affichés. (b/138251858)

Version 1.1.0-rc03

19 juillet 2019

Publication d'androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 et androidx.fragment:fragment-testing:1.1.0-rc03. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Correction d'un problème pour lequel l'appel de postponeEnterTransition() plusieurs fois avec un délai avant expiration n'annulait pas les délais avant expiration précédents. (b/137797118)

Version 1.1.0-rc02

17 juillet 2019

Publication d'androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 et androidx.fragment-testing:fragment:1.1.0-rc02. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Correction d'un plantage dans FragmentPagerAdapter et FragmentStatePagerAdapter lors de la suppression de l'élément actuel. (b/137209870)

Version 1.1.0-rc01

2 juillet 2019

Publication d'androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01 et androidx.fragment:fragment-testing:1.1.0-rc01. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Désormais, les fragments mettent correctement à jour leur visibilité lors de l'utilisation d'opérations show() ou hide() alors que la transition est exécutée. (b/133385058)
  • Correction d'une NullPointerException lors de l'affichage d'une FragmentTransaction utilisant setPrimaryNavigationFragment() avant replace(). (b/134673465)

Version 1.1.0-beta01

5 juin 2019

Publication d'androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01 et androidx.fragment:fragment-testing:1.1.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Les rappels androidx.lifecycle.Lifecycle (spécifiquement liés à STARTED, RESUMED, PAUSED, STOPPED et DESTROYED) pour les fragments imbriqués sont désormais correctement imbriqués. (b/133497591)
  • Les instances OnBackPressedCallback enregistrées dans le onCreate() d'un fragment ont désormais correctement priorité sur le FragmentManager enfant. (b/133175997)
  • Les fragments enfants ne sont plus animés lorsque leur fragment parent est remplacé. (b/121017790)
  • Les animations et les transitions de fragment sont désormais ignorées lors de l'utilisation de animateLayoutChanges="true", ce qui corrige un problème de destruction des fragments. (b/116257087)

Version 1.1.0-alpha09

16 mai 2019

Publication d'androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09 et androidx.fragment:fragment-testing:1.1.0-alpha09. Les commits inclus dans cette version sont disponibles sur cette page.

Modifications apportées à l'API

  • Les fragments reçoivent maintenant un rappel vers une nouvelle méthode onPrimaryNavigationFragmentChanged(boolean) lorsque le fragment de navigation principal change. aosp/960857

Corrections de bugs

  • Les éléments de menu gonflés par un fragment enfant sont désormais correctement supprimés lorsque le fragment parent est supprimé. b/131581013

Version 1.1.0-alpha08

7 mai 2019

Publication d'androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 et androidx.fragment:fragment-testing:1.1.0-alpha08. Les commits inclus dans cette version sont disponibles sur cette page.

Cette version n'est pas compatible avec Preferences 1.1.0-alpha01 à 1.1.0-alpha04. Veuillez passer à Preferences 1.1.0-alpha05 lorsque vous utilisez cette version de Fragments.

Nouvelles fonctionnalités

  • Ajout d'une surcharge associée à postponeEnterTransition(), qui accepte un délai avant expiration, au bout duquel le fragment appelle automatiquement startPostponedEnterTransition() b/120803208

Modifications apportées à l'API

  • Modification destructive : la méthode FragmentFactory instantiate qui a été précédemment abandonnée et qui acceptait un Bundle a été supprimée. aosp/953856
  • Modification destructive : les constantes RESUME_ONLY_CURRENT_FRAGMENT et USE_SET_USER_VISIBLE_HINT dans FragmentPagerAdapter et FragmentStatePagerAdapter ont été renommées respectivement en BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT et BEHAVIOR_SET_USER_VISIBLE_HINT. aosp/954782

Corrections de bugs

  • Les fragments dont le cycle de vie était limité via setMaxLifecycle() ne sont plus réactivés avant d'atteindre leur état final. b/131557151
  • Lorsque vous utilisez setMaxLifecycle(Lifecycle.State.CREATED), la vue des fragments est correctement détruite. aosp/954180

Version 1.1.0-alpha07

25 avril 2019

Publication d'androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07 et androidx.fragment:fragment-testing:1.1.0-alpha07. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Vous pouvez désormais définir un état de cycle de vie maximal pour un fragment en appelant setMaxLifecycle() sur une FragmentTransaction. Cela remplace setUserVisibleHint(), désormais obsolète. FragmentPagerAdapter et FragmentStatePagerAdapter disposent d'un nouveau constructeur qui vous permet de passer au nouveau comportement. (b/129780800)

Modifications apportées à l'API

  • moveToState(STARTED) sur FragmentScenario ne peut désormais être appelé que sur les appareils utilisant l'API 24 ou une version ultérieure. (b/129880016)

Nouveaux comportements

  • En raison de (b/129907905), les fragments de la pile "Retour" n'obtiendront pas un rappel à onCreateView() lorsque l'activité d'hébergement est recréée. onCreateView() est désormais appelé uniquement lorsque le fragment devient visible (c.-à-d. que la pile "Retour" est affichée).

Corrections de bugs

  • Correction d'un problème lors de l'utilisation d'une balise <fragment> en XML et du constructeur contentLayoutId de FragmentActivity ou AppCompatActivity. (b/129907905)
  • Correction d'un problème en raison duquel des fragments de la pile "Retour" n'étaient pas déplacés au moins jusqu'à l'état CREATED après une modification de configuration, ce qui empêchait la bonne suppression des ViewModels et des fragments enfants conservés. (b/129593351)
  • Correction d'un plantage de restoreSaveState causé par une désynchronisation des fragments conservés après l'enregistrement de l'état de l'instance. (b/130433793) (aosp/947824)
  • Correction de problèmes pour lesquels un OnBackPressedCallback ajouté avec un cycle de vie de fragment n'était pas appelés si le FragmentManager disposait d'une pile "Retour". Pour plus d'informations, consultez androidx.activity 1.0.0-alpha07. (aosp/948209)
  • Les fragments ne forcent plus l'application de LAYER_TYPE_HARDWARE pour les animations. Si vous avez besoin d'une animation de couche matérielle, veuillez l'intégrer dans votre animation. (b/129486478)

Version 1.1.0-alpha06

3 avril 2019

Publication d'androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06 et androidx.fragment:fragment-testing:1.1.0-alpha06. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Les exceptions générées par FragmentManager incluent désormais le nom du fragment dans le message. (b/67759402)

Modifications apportées à l'API

  • Fragment et FragmentActivity contiennent désormais un deuxième constructeur qui accepte un @LayoutRes int et qui remplace le comportement précédent d'annotation de votre classe par @ContentView. Cette approche fonctionne dans les modules d'application et de bibliothèque. (b/128352521)
  • Le champ onActivityResult() de FragmentActivity est désormais correctement marqué comme @CallSuper. (b/127971684)
  • La méthode instantiate de FragmentFactory qui accepte un lot d'arguments a été abandonnée, et les applications doivent utiliser la nouvelle surcharge instantiate qui n'accepte pas de lot. (b/128836103)
  • Les méthodes FragmentScenario sont désormais correctement annotées avec @StyleRes. (aosp/924193)
  • FragmentTabHost est maintenant obsolète. (b/127971835)
  • L'élément getThemedContext() de FragmentActivity a été supprimé. (aosp/934078)

Corrections de bugs

  • Correction d'une régression dans la version 1.1.0-alpha05 qui entraînait le clignotement du fragment entrant à l'écran. (b/129405432)
  • Correction d'un problème pour lequel le fragment de navigation principal était perdu après une série d'opérations popBackStack+replace+popBackStack. (b/124332597)
  • Correction d'un problème lié à l'utilisation de constructeurs @ContentView sur votre activité lors de la restauration de l'état de fragment. (b/127313094)
  • Correction de la logique de setTargetFragment() lors du remplacement d'un fragment cible existant par un fragment qui n'était pas encore associé à FragmentManager. (aosp/932156)

Version 1.1.0-alpha05

13 mars 2019

Publication d'androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05 et androidx.fragment:fragment-testing:1.1.0-alpha05. La liste complète des commits inclus dans cette version est disponible sur cette page.

Nouvelles fonctionnalités

  • Les recherches d'annotations de @ContentView sont désormais mises en cache. (b/123709449)

Nouveaux comportements

  • L'appel de remove(), hide(), show(), detach() et setPrimaryNavigationFragment() avec un fragment associé à un autre FragmentManager génère désormais une IllegalStateException plutôt qu'un échec silencieux (aosp/904301)

Corrections de bugs

  • onNewIntent pour FragmentActivity est maintenant correctement marqué avec @CallSuper (b/124120586)
  • Correction d'un problème pour lequel la méthode onDismiss() de DialogFragment pouvait être appelée deux fois lors de l'utilisation de getDialog().dismiss() ou getDialog().cancel() (b/126563750).

Version 1.1.0-alpha04

7 février 2019

Publication d'androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 et androidx.fragment:fragment-testing 1.1.0-alpha04.

Nouvelles fonctionnalités

  • Ajout de la prise en charge de l'annotation de classe @ContentView, qui vous permet d'indiquer le fichier XML de mise en page à gonfler au lieu de remplacer onCreateView(). Nous vous recommandons de consulter les tâches associées à la vue dans onViewCreated(). (aosp/837619)
  • fragment-testing dépend désormais de androidx.test:core-ktx 1.1.0 stable (b/121209673)
  • Vous pouvez désormais utiliser openActionBarOverflowOrOptionsMenu avec FragmentScenario pour tester les menus d'options hébergés par Fragment (b/121126668).

Modifications apportées à l'API

  • Ajout d'une méthode requireArguments() qui renvoie un @NonNull Bundle ou génère une IllegalStateException (b/121196360)
  • Ajout d'une remarque indiquant que les méthodes getLifecycle(), getViewLifecycleOwner() et getViewLifecycleOwnerLiveData() ne doivent pas être remplacées et deviendront finales dans une prochaine version. Veuillez envoyer une demande de fonctionnalité si vous remplacez actuellement cette méthode. (aosp/880714)
  • Ajout d'une remarque indiquant que la méthode getViewModelStore() ne doit pas être remplacée et deviendra finale dans une prochaine version. Veuillez envoyer une demande de fonctionnalité si vous remplacez actuellement cette méthode. (aosp/880713)
  • Correction d'un problème de compatibilité binaire avec les versions précédentes de Fragments. (aosp/887877) (aosp/889834)

Corrections de bugs

  • Les fragments cibles sont correctement effacés lorsque vous transmettez null à setTargetFragment(). (aosp/849969)
  • Correction d'un problème pour lequel des fragments cibles étaient parfois indisponibles dans ou après onDestroy(). (b/122312935)
  • La méthode onDismiss() de DialogFragment est maintenant appelée avant onDestroy(). (aosp/874133) (aosp/890734)

Version 1.1.0-alpha03

17 décembre 2018

Nouvelles fonctionnalités

  • Fragment implémente désormais BundleSavedStateRegistryOwner et dépend de la bibliothèque SavedState nouvellement publiée [aosp/824380]
  • Un délégué de propriété Kotlin by activityViewModels a été ajouté pour récupérer les ViewModels associés à l'activité contenante [b/119050253]
  • Le délégué de propriété Kotlin by viewModels a été étendu pour intégrer une méthode lambda facultative permettant d'obtenir le ViewModelStoreOwner, ce qui vous permet de transmettre le fragment parent ou un autre ViewModelStoreOwner personnalisé avec du code tel que val viewModel: MyViewModel by viewModels(::requireParentFragment) [b/119050253]

Modifications apportées à l'API

  • FragmentScenario vous permet désormais de spécifier un thème tel que Theme.AppCompat [b/119054431]. Il s'agit d'une modification destructive.
  • Ajout d'une méthode requireView() qui renvoie une @NonNull View ou génère une IllegalStateException [b/120241368]
  • Ajout d'une méthode requireParentFragment() qui renvoie un @NonNull Fragment ou génère une IllegalStateException [b/112103783]

Corrections de bugs

  • Correction d'une IllegalStateException : échec de l'enregistrement de l'état b/120814739
  • Désormais, les fragments restaurés à partir de l'état d'instance enregistré reçoivent toujours un Bundle non nul [b/119794496]
  • Les fragments supprimés ne réutilisent plus leur objet Lifecycle s'ils sont de nouveau ajoutés [b/118880674]

Version 1.1.0-alpha02

3 décembre 2018

Nouvelles fonctionnalités

  • Les extensions Kotlin de FragmentScenario vous permettent désormais d'utiliser un lambda pour la construction de fragments au lieu de transmettre une instance FragmentFactory. (aosp/812913)

Corrections de bugs

  • Correction d'une IllegalStateException lors de l'utilisation de fragments imbriqués dans la pile "Retour" (b/119256498)
  • Correction du plantage lors de l'utilisation de FragmentScenario.recreate() avec une FragmentFactory (aosp/820540)
  • Correction d'un problème qui empêchait les fragments cibles d'être accessibles après la suppression du fragment (aosp/807634)

Version 1.1.0-alpha01

5 novembre 2018

Il s'agit de la première version de l'artefact fragment-testing et de FragmentScenario, basés sur les API androidx.test:core. Pour en savoir plus, consultez la documentation sur les tests de fragment.

Nouvelles fonctionnalités

  • Nouvelle classe FragmentScenario pour tester des fragments de manière isolée.
  • Vous pouvez maintenant définir une FragmentFactory sur n'importe quel FragmentManager pour contrôler la façon dont les nouvelles instances de fragment sont instanciées.
  • Ajout d'un délégué de propriété Kotlin by viewModels() pour récupérer les ViewModels à partir d'un fragment.
  • Les événements d'entrée en attente (tels que les clics) sont maintenant annulés dans la méthode onStop() d'un fragment.

Modifications apportées à l'API

  • Développement important des annotations de possibilité de valeur nulle sur la surface de l'API Fragment.

Corrections de bugs

  • Correction d'un problème qui entraînait l'échec des opérations de fragment au sein de LiveData (b/77944637)

Problèmes connus

  • Les fragments cibles ne sont plus accessibles après la suppression d'un fragment de FragmentManager.
  • fragment-testing dépend d'androidx.test:core:1.0.0-beta01 au lieu de la version correcte androidx.test:core:1.0.0.