Personnaliser une liste dynamique Fait partie d'Android Jetpack.
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 pour 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 plusieurs manières.
Ce document décrit quelques-unes 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 déterminer quand réutiliser les vues d'éléments qui ne sont plus visibles par l'utilisateur. Pour réutiliser (ou recycler) une vue, un gestionnaire de mises 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 procédé améliore les performances en évitant la création de vues inutiles ou l'exécution de recherches findViewById()
coûteuses. La bibliothèque Android Support comprend trois gestionnaires de mise en page standards, chacun offrant de nombreuses options de personnalisation:
LinearLayoutManager
: organise les éléments dans une liste unidimensionnelle. L'utilisation d'unRecyclerView
avecLinearLayoutManager
fournit des fonctionnalités telles qu'une mise en pageListView
.GridLayoutManager
: organise les éléments dans une grille à deux dimensions, comme les carrés sur un damier. L'utilisation d'unRecyclerView
avecGridLayoutManager
fournit des fonctionnalités telles qu'une mise en pageGridView
.StaggeredGridLayoutManager
: organise les éléments dans une grille à deux dimensions, chaque colonne étant légèrement décalée par rapport à la précédente, comme les étoiles sur 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 aux éléments
Chaque fois qu'un élément est modifié, 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 d'animation en étendant RecyclerView.ItemAnimator
.
Activer la sélection des é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. Vous pouvez ainsi contrôler la présentation visuelle d'un élément sélectionné. Vous pouvez également garder le contrôle sur les règles contrôlant le comportement de la sélection, telles que les éléments éligibles et le nombre d'éléments pouvant être sélectionnés.
Pour ajouter la prise en charge de la sélection à une instance RecyclerView
, procédez comme suit:
- Déterminez le type de clé de sélection à utiliser, puis créez une
ItemKeyProvider
.Il existe trois types de clés pour identifier les éléments sélectionnés:
Parcelable
et ses sous-classes, commeUri
String
Long
Pour en savoir plus sur les types de clés de sélection, consultez
SelectionTracker.Builder
. - Implémentez
ItemDetailsLookup
. - Mettez à jour les objets
View
des éléments dansRecyclerView
pour indiquer si l'utilisateur les sélectionne ou les désélectionne.La bibliothèque de sélection ne fournit pas de décoration visuelle par défaut pour les éléments sélectionnés. Fournissez ces informations lorsque vous implémentez
onBindViewHolder()
. Nous recommandons l'approche suivante:- Dans
onBindViewHolder()
, appelezsetActivated()
(passetSelected()
) sur l'objetView
avectrue
oufalse
, selon que l'élément est sélectionné ou non. - Modifiez le style de la vue pour représenter l'état d'activation. Nous vous recommandons d'utiliser une ressource de liste des états des couleurs pour configurer le style.
- Dans
- Utilisez
ActionMode
pour fournir à l'utilisateur les outils nécessaires pour effectuer une action sur la sélection. - Effectuez toute action secondaire interprétée.
- Assemblez tous les éléments avec
SelectionTracker.Builder
. - Incluez la sélection dans les événements du cycle de vie de l'activité.
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 pour les instances ItemDetails
qui sont sauvegardées ou extraites d'une instance RecyclerView.ViewHolder
.
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 proposer 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.
À 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 essaie 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
.
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 créer 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 pourrez pas vérifier l'état sélectionné d'un élément à partir de la méthode onBindViewHolder()
.
Pour conserver l'état de sélection dans les événements de cycle de vie de l'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 obligatoire, car une activité ou un fragment peut comporter plusieurs listes distinctes 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.
- L'application de démonstration de Sunflower, qui utilise
RecyclerView
. - Atelier de programmation Utiliser RecyclerView pour afficher une liste déroulante
- Atelier de programmation Principes de base d'Android en Kotlin: Principes de base de RecyclerView