Personnaliser une liste dynamique Fait partie d'Android Jetpack.
Vous pouvez personnaliser
RecyclerView
objets pour répondre à vos besoins spécifiques. Les classes standards décrites dans
Créer des listes dynamiques avec
RecyclerView fournissent 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 vues et d'écrire le
code permettant de mettre à jour ces vues avec les données appropriées. Toutefois, si votre application a des
exigences spécifiques, vous pouvez modifier le comportement standard de plusieurs manières.
Ce document décrit certaines des personnalisations possibles.
Modifier la mise en page
RecyclerView utilise un gestionnaire de mises 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
élément différent de l'ensemble de données. Le recyclage des vues de cette manière améliore
les performances en évitant la création de vues inutiles ou l'exécution de
recherches
findViewById()
coûteuses. La bibliothèque d'assistance Android inclut trois gestionnaires de mises en page standards,
chacun offrant de nombreuses options de personnalisation :
LinearLayoutManager: organise les éléments dans une liste unidimensionnelle. L'utilisation d'unRecyclerViewavecLinearLayoutManageroffre des fonctionnalités semblables à une mise en pageListView.GridLayoutManager: organise les éléments dans une grille bidimensionnelle, comme les cases d'un damier. L'utilisation d'unRecyclerViewavecGridLayoutManageroffre des fonctionnalités semblables à uneGridViewmise en page.StaggeredGridLayoutManager: organise les éléments dans une grille bidimensionnelle, chaque colonne étant légèrement décalée par rapport à la précédente, comme les étoiles sur le drapeau américain.
Si ces gestionnaires de mises en page ne répondent pas à vos besoins, vous pouvez créer les vôtres en
étendant la
RecyclerView.LayoutManager
classe abstraite.
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
classe. Par défaut, le 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 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 d'une entrée tactile
ou d'une souris. Cela vous permet de conserver le contrôle sur la présentation visuelle d'un
élément sélectionné. Vous pouvez également conserver le contrôle sur les règles régissant le comportement de sélection, par exemple les éléments pouvant être sélectionnés 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 un
ItemKeyProvider.Vous pouvez utiliser trois types de clés pour identifier les éléments sélectionnés :
Parcelableet ses sous-classes, commeUriStringLong
Pour obtenir des informations détaillées sur les types de clés de sélection, consultez
SelectionTracker.Builder. - Implémentez
ItemDetailsLookup. - Mettez à jour les objets
Viewdans leRecyclerViewpour 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-la lorsque vous implémentez
onBindViewHolder(). Nous vous recommandons l'approche suivante :- Dans
onBindViewHolder(), appelezsetActivated()—et nonsetSelected()—sur l'objetViewavectrueoufalse, selon que l'élément est sélectionné ou non. - Mettez à jour le style de la vue pour représenter l'état activé. Nous vous recommandons d'utiliser une ressource de liste d'états de couleur pour configurer le style.
- Dans
- Utilisez
ActionModepour fournir à l'utilisateur des outils permettant d'effectuer une action sur la sélection. - Effectuez toutes les actions secondaires interprétées.
- Assemblez tout 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 à des informations sur les éléments RecyclerView à partir d'un MotionEvent.
Il s'agit en fait d'une usine pour
ItemDetails
instances qui sont sauvegardées ou extraites d'une
RecyclerView.ViewHolder
instance.
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
ActionMode barre et connecter la flèche de retour de 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 qu'il
tente 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 éléments :
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
SelectionTracker
instance, votre application doit fournir le même
RecyclerView.Adapter
que celui que vous utilisez pour initialiser RecyclerView à
SelectionTracker.Builder. Pour cette raison, une fois que vous avez créé l'
SelectionTracker instance, injectez-la dans votre
RecyclerView.Adapter. Sinon, vous ne pouvez pas vérifier l'état sélectionné d'un élément à partir de la méthode onBindViewHolder().
Pour préserver l'état de sélection lors des événements du cycle de vie de l'activité, votre application
doit appeler les méthodes
onSaveInstanceState()
et
onRestoreInstanceState()
du suivi de 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
SelectionTracker.Builder constructeur. Cet ID est obligatoire, car
une activité ou un fragment peut 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.
- Application de démonstration
Sunflower, qui utilise
RecyclerView. - Utiliser RecyclerView pour afficher une liste déroulante atelier de programmation.
- Principes de base d'Android en Kotlin : atelier de programmation sur les principes de base de RecyclerView.