ViewPager2

Affichez les vues ou les fragments dans un format balayable.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
14 mai 2024 1.1.0 - - -

Dépendances AndroidX

Pour utiliser ViewPager2, ajoutez la dépendance AndroidX suivante au fichier build.gradle de votre projet :

Groovy

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.1.0"
}

Kotlin

dependencies {
    implementation("androidx.viewpager2:viewpager2:1.1.0")
}

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

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

Version 1.1.0

Version 1.1.0

14 mai 2024

Publication d'androidx.viewpager2:viewpager2:1.1.0. La version 1.1.0 contient ces commits.

Modifications importantes depuis la version 1.0.0

  • Correction des plantages en cas d'utilisation avec RecyclerView 1.3.1-rc01 ou version ultérieure.
  • Mise à jour de ViewPager2, qui renseigne désormais correctement les éléments CollectionInfo et CollectionItemInfo qui ne sont plus insérés par défaut dans RecyclerView 1.2.0-alpha02 ou version ultérieure.
  • Ajout de l'interface FragmentTransactionCallback pour écouter les modifications du cycle de vie des fragments qui se produisent dans FragmentStateAdapter.
  • Correction d'un problème de FragmentStateAdapter qui concerne la visibilité initiale du menu de fragment lors de l'ajout d'un fragment à FragmentManager.
  • Correction de l'envoi des encarts de fenêtre: toutes les pages ont désormais les mêmes encarts. En raison du mode de distribution des WindowInsets sur les anciennes versions d'API (< 30 d'API), qui peut empêcher les encarts d'être disponibles pour les vues sœurs, vous devez activer ce correctif via WindowInsetsApplier.install(viewPager2) si vous souhaitez appliquer des encarts sur des appareils inférieurs à l'API 30.

Version 1.1.0-rc01

1er mai 2024

Publication d'androidx.viewpager2:viewpager2:1.1.0-rc01 sans modification notable par rapport à la version 1.1.0-beta02. La version 1.1.0-rc01 contient ces commits.

Version 1.1.0-beta02

24 mai 2023

Publication d'androidx.viewpager2:viewpager2:1.1.0-beta02. Liste des commits de la version 1.1.0-beta02

Modifications apportées à l'API

  • Ajout de rappels d'enregistrement de l'état de fragment à FragmentTransactionCallback. (I45b90).
  • Désormais, ViewPager2 n'essaie plus de corriger la distribution WindowInsets défectueuse des anciennes versions de l'API (< 30), car le correctif lui-même peut nuire aux frères et sœurs de ViewPager2. Le correctif est toujours disponible, mais il est désormais possible de la rendre disponible aux développeurs au cas par cas. Activez le correctif en appelant WindowInsetsApplier.install(viewPager2)). (Ic9a85).

Correction de bugs

  • Correction des problèmes de compatibilité avec les versions plus récentes de RecyclerView. Les utilisateurs de cette version de ViewPager2 doivent passer à RecyclerView 1.3.1-rc01 ou version ultérieure.

Version 1.1.0-beta01

4 août 2021

Publication d'androidx.viewpager2:viewpager2:1.1.0-beta01. Liste des commits de la version 1.1.0-beta01

Modifications apportées à l'API

Correction de bugs

  • Correction de l'envoi des encarts, toutes les pages ont désormais les mêmes encarts. (I47fef)

Version 1.1.0-alpha01

1er avril 2020

Publication d'androidx.viewpager2:viewpager2:1.1.0-alpha01. Liste des commits de la version 1.1.0-alpha01

Cette version accompagne un changement dans RecyclerView 1.2.0-alpha02, via l'ajout de CollectionInfo et CollectionItemInfo, qui ne sont plus fournis par défaut par RecyclerView. Lorsque vous passez à RecyclerView 1.2.0-alpha02, mettez également à jour ViewPager2 pour empêcher les régressions d'accessibilité.

Nouvelles fonctionnalités

  • Ajout de l'interface FragmentTransactionCallback pour écouter les modifications du cycle de vie des fragments qui se produisent dans FragmentStateAdapter. (Ibda77)

Correction de bugs

  • Correction d'un problème de FragmentStateAdapter qui concerne la visibilité initiale du menu de fragment lors de l'ajout d'un fragment à FragmentManager. (I9d2ff, b/144442240)

Version 1.0.0

Version 1.0.0

20 novembre 2019

Publication de androidx.viewpager2:viewpager2:1.0.0 sans aucune modification par rapport à la version 1.0.0-rc01. Liste des commits de la version 1.0.0

Principales fonctionnalités de la version 1.0.0

  • Améliorations de l'implémentation précédente de ViewPager :
    • Compatibilité avec l'orientation de droite à gauche
    • Prise en charge de l'orientation verticale
    • Prise en charge fiable de Fragment (y compris la gestion des modifications apportées à la collection Fragment sous-jacente).
    • Animations de modification de l'ensemble de données (y compris DiffUtil).
  • Migration simplifiée à partir de l'implémentation ViewPager précédente (parité d'API si possible). Consultez le guide de migration et l'application exemple.

Consultez le guide d'utilisation de ViewPager2 pour découvrir comment faire glisser les fragments.

Version 1.0.0-rc01

23 octobre 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-rc01 sans aucune modification par rapport à la version 1.0.0-beta05. Liste des commits de la version 1.0.0-rc01

Version 1.0.0-beta05

9 octobre 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-beta05. Liste des commits de la version 1.0.0-beta05

Corrections de bugs

  • Correction d'un problème de changement de page au niveau de requestFocus sur une page hors écran. Le comportement est désormais cohérent avec celui de l'outil ViewPager d'origine. (b/140656866)
  • Correction de focus, qui restait sur une page hors écran après un changement de page. Le curseur est maintenant effacé lors d'un changement de page. (b/140656866)
  • Correction de l'ordre des transactions de Fragment (suspendre/reprendre) lors du changement de page (nous suspendons toujours l'ancien élément principal avant de réactiver le nouvel élément). (b/139489059)
  • Correction de canScrollHorizontally(int) et de canScrollVertically(int) : ils renvoient désormais l'affichage du défilement de la page (ViewPager2) dans la direction donnée. (b/141848404)
  • Un problème a été résolu dans SlideRefreshLayout pour améliorer son fonctionnement avec ViewPager2.

Version 1.0.0-beta04

5 septembre 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-beta04. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Correction d'un problème spécifique au niveau de FragmentStateAdapter avec la pile "Retour" de Fragment. (b/139095195)
  • Correction de EditText avec certaines configurations d'attribut qui entraînaient un saut de page/défilement lors de la saisie/sélection. (b/138044582, b/139432498)
  • Correction d'un problème lié aux instances ItemDecoration et solution de contournement pour le positionnement de l'indicateur avec défilement hors limites. (b/139012032)
  • Un certain nombre de problèmes ont été résolus dans d'autres composants pour mieux fonctionner avec ViewPager2 : RecyclerView, Nested ScrollView et Navigation.

Version 1.0.0-beta03

7 août 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-beta03. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Correction d'un problème de FragmentStateAdapter avec l'état Fragment temporaire. b/134246546
  • Correction des problèmes de currentItem et de scrollState lorsqu'un ensemble de données est modifié pendant un défilement fluide (traitement des cas particuliers). b/137642608
  • Correction de l'erreur liée aux animations PageTransformer (y compris MarginPageTransformer) et aux animations de modification de l'ensemble de données. b/134658996
  • Correction des animations de défilement fluide dans les ensembles de données volumineux (limite de float entiers). b/134858960

Version 1.0.0-beta02

19 juillet 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-beta02. Les commits inclus dans cette version sont disponibles sur cette page.

Correction de bugs

  • Suppression de la dépendance JaCoCo non intentionnelle introduite dans 1.0.0-beta01. (b/137782951)

Version 1.0.0-beta01

17 juillet 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.

Corrections de bugs

  • Correction du plantage de ViewPager2.updateCurrentItem lors du défilement et de la mise à jour de l'ensemble de données.
  • Correction du plantage de NullPointerException en lien avec ViewPager2.isLayoutRtl.
  • TOUCH_SLOP_PAGING : nouvelle pente tactile par défaut.
  • Événements OnPageChangeCallback corrigés pour les adaptateurs vides (page 0 au lieu de -1 pour s'aligner avec ViewPager1)

Problèmes connus

Version 1.0.0-alpha06

2 juillet 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-alpha06. Les commits inclus dans cette version sont disponibles sur cette page.

Il s'agit de la dernière version alpha prévue avant la fixation de l'API et le passage à la version bêta. N'hésitez pas à nous faire part de vos commentaires sur l'API.

Nouvelles fonctionnalités

  • Principes de base pour une meilleure accessibilité : ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN, etc.

Modifications apportées à l'API

  • FragmentStateAdapter : les éléments Fragment non principaux sont limités à STARTED et leur menuVisibility est défini sur "false".
  • PageTransformer, MarginPageTransformer, CompositePageTransformer : correction de la documentation pour position.

Corrections de bugs

  • currentItem après la modification de l'ensemble de données ou la modification de l'adaptateur.
  • Résolution du problème affectant MarginPageTransformer avec offscreenPageLimit.
  • Correction des actions d'accessibilité dans le comportement de FakeDrag.

Version 1.0.0-alpha05

5 juin 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-alpha05. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • ItemDecorator introduit un comportement cohérent avec RecyclerView.
  • MarginPageTransformer introduit pour permettre l'ajout d'un espace entre les pages (en dehors du relief intérieur).
  • CompositePageTransformer fourni pour permettre de combiner plusieurs PageTransformer.

Modifications apportées à l'API

  • La méthode FragmentStateAdapter#getItem a été renommée FragmentStateAdapter#createFragment. L'ancien nom de la méthode était autrefois à l'origine de certains bugs.
  • La valeur de OFFSCREEN_PAGE_LIMIT_DEFAULT est passée de 0 à -1. Pas besoin de modifier le code client si la constante OFFSCREEN_PAGE_LIMIT_DEFAULT est utilisée.

Corrections de bugs

  • Correction du comportement de getCurrentItem() lorsque SCROLL_STATE_SETTLING est interrompu par un déplacement dans la direction opposée.
  • Correction de problèmes liés au chargeur de la classe FragmentStateAdapter dans le contexte "Ne pas conserver les activités".
  • Amélioration de la documentation setOffscreenPageLimit.

Version 1.0.0-alpha04

7 mai 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-alpha04. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • offscreenPageLimit : permet de contrôler étroitement le nombre de View et de Fragment conservés dans la hiérarchie des vues.

Modifications apportées à l'API

  • Les attributs orientation et isUserScrollable ne font plus partie de SavedState.
  • Les méthodes saveState et restoreState ont été finalisées dans FragmentStateAdapter.
  • Les annotations ViewPager2.Orientation et ViewPager2.ScrollState ne sont pas publiques.

Corrections de bugs

  • SavedState : correction du problème de restauration en cas de destruction / recréation de Activity.
  • SavedState : restauration retardée jusqu'à ce que l'adaptateur soit défini.
  • OnPageChangeCallback : corrections mineures de certaines cas particuliers.

Version 1.0.0-alpha03

3 avril 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-alpha03. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Possibilité de faire défiler le composant ViewPager2 de manière automatisée : fakeDragBy(offsetPx).

Modifications apportées à l'API

  • FragmentStateAdapter nécessite désormais un objet Lifecycle. Deux constructeurs utilitaires ont été ajoutés pour l'obtenir à partir de l'hôte FragmentActivity ou de l'hôte Fragment.

Corrections de bugs

  • Nombreux correctifs de prise en charge de Fragment :
    • gestion des mises à jour de l'ensemble de données lorsque celui-ci est réduit ou pendant la rotation de l'écran ;
    • suppression des fragments non pertinents après la rotation ;
    • suppression de l'état enregistré des éléments supprimés.
  • PageChangeCallback : calcul du décalage de page fixe pour les pages comportant des marges.

Version 1.0.0-alpha02

13 mars 2019

Publication d'androidx.viewpager2:viewpager2:1.0.0-alpha02. La liste complète des commits inclus dans cette version est disponible sur cette page.

Nouvelles fonctionnalités

  • Possibilité de désactiver l'entrée utilisateur (setUserInputEnabled, isUserInputEnabled).

Modifications apportées à l'API

  • Ajout de "class final" pour ViewPager2

Corrections de bugs

  • Améliorations de la stabilité de FragmentStateAdapter.

Version 1.0.0-alpha01

7 février 2019

Publication d'androidx.viewpager2:viewpager2 1.0.0-alpha01. Il s'agit de la première version de ViewPager2.

Nouvelles fonctionnalités

  • Par rapport à son prédécesseur android.support.v4.view.ViewPager (VP1) :
    • Compatibilité avec la mise en page de droite à gauche
    • Prise en charge de l'orientation verticale
    • notifyDataSetChanged entièrement fonctionnel (bugs VP1 corrigés)

Modifications apportées à l'API

  • Remplacement de FragmentStatePagerAdapter par FragmentStateAdapter.
  • Remplacement de PagerAdapter par RecyclerView.Adapter.
  • registerOnPageChangeCallback remplace addPageChangeListener.

Problèmes connus

  • clipToPadding
  • pas de fakeDrag
  • JavaDoc
  • défilement imbriqué parallèle à l'orientation
  • aucun contrôle des limites hors écran
  • nécessite une meilleure intégration de TabLayout
  • aucun setter pour pageWidth (forcé à 100 %/100 %)
  • Transformateur de page : pas de choix de couche matérielle/logicielle ; aucun ordre de dessin inversé
  • garder l'élément actuel visible lorsque vous insérez une page avant la page actuelle
  • la navigation au clavier nécessite des améliorations
  • Amélioration de la stabilité et des performances de FragmentStateAdapter.