Personnaliser une liste dynamique Fait partie d'Android Jetpack.

Essayer Compose
Jetpack Compose est le kit d'outils d'interface utilisateur recommandé pour Android. Découvrez comment utiliser les mises en page dans Compose.

Vous pouvez personnaliser les objets RecyclerView en fonction de vos besoins spécifiques. Les classes standards décrites dans la section Créer des listes dynamiques avec RecyclerView offrent toutes les fonctionnalités dont la plupart des développeurs ont besoin. Dans de nombreux cas, il vous suffit de concevoir la vue pour chaque conteneur de vue et d'écrire le code permettant de mettre à jour ces vues avec les données appropriées. Toutefois, si votre application présente des exigences spécifiques, vous pouvez modifier le comportement standard de différentes manières. Ce document décrit certaines des personnalisations possibles.

Modifier la mise en page

RecyclerView utilise un gestionnaire de mise en page pour positionner les éléments individuels à l'écran et pour déterminer quand réutiliser les vues d'éléments qui ne sont plus visibles par l'utilisateur. Pour réutiliser une vue ou la recycler, un gestionnaire de mise en page peut demander à l'adaptateur de remplacer le contenu de la vue par un autre élément de l'ensemble de données. Ce recyclage des vues améliore les performances en évitant la création de vues inutiles ou en effectuant des recherches findViewById() coûteuses. La bibliothèque Android Support comprend trois gestionnaires de mise en page standards, qui offrent de nombreuses options de personnalisation:

  • LinearLayoutManager : organise les éléments dans une liste à une seule dimension. L'utilisation d'un RecyclerView avec LinearLayoutManager permet d'obtenir des fonctionnalités telles qu'une mise en page ListView.
  • GridLayoutManager : organise les éléments sur une grille à deux dimensions, comme les carrés sur un damier. L'utilisation d'un RecyclerView avec GridLayoutManager offre des fonctionnalités telles qu'une mise en page GridView.
  • StaggeredGridLayoutManager : organise les éléments dans une grille à deux dimensions, chaque colonne légèrement décalée par rapport à la précédente, comme les étoiles d'un drapeau américain.

Si ces gestionnaires de mise en page ne répondent pas à vos besoins, vous pouvez créer les vôtres en étendant la classe abstraite RecyclerView.LayoutManager.

Ajouter des animations d'éléments

Chaque fois qu'un élément change, RecyclerView utilise un animateur pour modifier son apparence. Cet animateur est un objet qui étend la classe abstraite RecyclerView.ItemAnimator. Par défaut, RecyclerView utilise DefaultItemAnimator pour fournir l'animation. Si vous souhaitez fournir des animations personnalisées, vous pouvez définir votre propre objet animateur en étendant RecyclerView.ItemAnimator.

Activer la sélection d'éléments de liste

La bibliothèque recyclerview-selection permet aux utilisateurs de sélectionner des éléments dans une liste RecyclerView à l'aide de la saisie tactile ou à la souris. Cela vous permet de garder le contrôle sur la présentation visuelle de l'élément sélectionné. Vous pouvez également garder le contrôle sur les règles qui contrôlent le comportement de sélection, telles que les éléments éligibles à la sélection et le nombre d'éléments pouvant être sélectionnés.

Pour ajouter la compatibilité de la sélection à une instance RecyclerView, procédez comme suit:

  1. Déterminez le type de clé de sélection à utiliser, puis créez une ItemKeyProvider.

    Trois types de clés vous permettent d'identifier les éléments sélectionnés:

    Pour en savoir plus sur les types de clés de sélection, consultez SelectionTracker.Builder.

  2. Implémentez ItemDetailsLookup.
  3. ItemDetailsLookup permet à la bibliothèque de sélection d'accéder aux informations sur les éléments RecyclerView en fonction d'un MotionEvent. Il s'agit en réalité d'une fabrique d'instances ItemDetails sauvegardées par ou extraites d'une instance RecyclerView.ViewHolder.

  4. Mettez à jour les objets View de l'élément dans RecyclerView pour indiquer si l'utilisateur les sélectionne ou les désélectionne.

    La bibliothèque de sélections ne fournit pas de décoration visuelle par défaut pour les éléments sélectionnés. Indiquez-le lorsque vous implémentez onBindViewHolder(). Nous vous recommandons la méthode suivante:

  5. Utilisez ActionMode pour fournir à l'utilisateur les outils permettant d'effectuer une action sur la sélection.
  6. Enregistrez un SelectionTracker.SelectionObserver pour être averti lorsqu'une sélection change. Lorsqu'une sélection est créée pour la première fois, démarrez ActionMode pour la présenter à l'utilisateur et fournir des actions spécifiques à la sélection. Par exemple, vous pouvez ajouter un bouton de suppression à la barre ActionMode et connecter la flèche de retour sur la barre pour effacer la sélection. Lorsque la sélection devient vide (si l'utilisateur l'efface la dernière fois), mettez fin au mode d'action.

  7. Effectuez les actions secondaires interprétées.
  8. À la fin du pipeline de traitement des événements, la bibliothèque peut déterminer que l'utilisateur tente d'activer un élément en appuyant dessus, ou de faire glisser un élément ou un ensemble d'éléments sélectionnés. Réagissez à ces interprétations en enregistrant l'écouteur approprié. Pour en savoir plus, consultez SelectionTracker.Builder.

  9. Assemblez le tout avec SelectionTracker.Builder.
  10. L'exemple suivant montre comment assembler ces pièces:

    Kotlin

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    Java

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    Pour compiler une instance SelectionTracker, votre application doit fournir le même RecyclerView.Adapter que celui que vous utilisez pour initialiser RecyclerView sur SelectionTracker.Builder. Pour cette raison, après avoir créé l'instance SelectionTracker, injectez-la dans votre RecyclerView.Adapter. Sinon, vous ne pouvez pas vérifier l'état sélectionné d'un élément à l'aide de la méthode onBindViewHolder().

  11. Inclure la sélection dans les événements du cycle de vie de l'activité
  12. Pour conserver l'état de sélection lors des événements de cycle de vie d'une activité, votre application doit appeler les méthodes onSaveInstanceState() et onRestoreInstanceState() de l'outil de suivi de la sélection à partir des méthodes onSaveInstanceState() et onRestoreInstanceState() de l'activité, respectivement. Votre application doit également fournir un ID de sélection unique au constructeur SelectionTracker.Builder. Cet ID est requis, car une activité ou un fragment peuvent comporter plusieurs listes distinctes et sélectionnables, qui doivent toutes être conservées dans leur état enregistré.

Ressources supplémentaires

Pour en savoir plus, consultez les références suivantes.