RecyclerView - Objet
Étapes de mise en place d'un RecyclerView
qui gère une liste d'objets sur un projet existant.
Le code de cette recette est disponible ici.
La liste que nous allons afficher est une liste de Personne
:
- build.gradle.kts
- personne_item.xml
- Personne.kt
- PersonneAdapter.kt
- ActivityMain.xml
- MainActivity.kt
Nous allons utiliser le ViewBinding pour la suite des choses. Assurez-vous qu'il est activé dans votre fichier build.gradle.kts
.
android {
...
buildFeatures {
viewBinding = true
}
}
L'interface graphique de chaque item à afficher dans la liste est définie dans un fichier xml
, comme c'est le cas pour les fichiers xml
qui sont utilisés pour définir l'interface graphique.
Dans l'explorateur de projet, créez un nouveau fichier Layout Resource File
dans le dossier res/layout
.
Nommez le fichier personne_item.xml
. Dans Root element
, choisissez LinearLayout
.
Il faudra personnaliser votre fichier en fonction de ce que vous voulez afficher sur chaque élément de la liste.
- Assignez des
id
aux éléments avec lesquels vous allez interagir. - Attention à la hauteur de chaque élément. Ils doivent tous avoir une hauteur fixe ou une hauteur définie en fonction de leur contenu (
wrap_content
).
Voici un exemple de fichier personne_item.xml
si on souhaite afficher les différents champs de la classe Personne
dans différents TextView
:
Créez une classe Personne
dans un package models
que vous devez aussi créer dans votre projet.
Vous allez créer une classe qui est responsable de la gestion de TOUS les éléments de la liste et de leur mise à jour. En Android, ce type de classe est appelé un Adapter.
Créez une nouvelle classe PersonneAdapter.kt
dans un package adapters
que vous devez aussi créer dans votre projet.
ViewHolder
Dans la classe PersonneAdapter
, vous devez définir une classe interne, qui sera responsable de gérer le contenu affiché dans UN SEUL élément de la liste.
Cette classe est appelée un ViewHolder.
Cette classe ressemble en quelque sorte à une classe d'Activité.
DiffCallback
Pour que l'Adapter
sache quels éléments d'une liste doivent être affichés lorsqu'on la modifie, on doit définir un objet qui implémente la classe abstraite DiffUtil.ItemCallback.
Nous vous recommandons de définir cet objet dans le même fichier que votre Adapter
, mais à l'extérieur de la classe PersonneAdapter
.
ListAdapter
Afin d'accéder aux outils de gestion de liste fournis par Android, vous devez étendre la classe ListAdapter.
La classe a besoin du ViewHolder et du DiffCallback que vous avez défini précédemment.
À ce point-ci, votre environnement de développement devrait vous indiquer des erreurs. C'est normal, car vous n'avez pas encore implémenté les méthodes requises par la classe ListAdapter.
Pour corriger une erreur, vous pouvez placer votre curseur sur l'erreur, et cliquer sur "Implement members", ce qui va générer les méthodes. Dans la prochaine étape, nous allons remplir ces méthodes.
onCreateViewHolder
La méthode onCreateViewHolder
est appelée lorsqu'un nouvel élément de la liste doit être affiché.
onBindViewHolder
La méthode onBindViewHolder
est appelée lorsqu'un élément de la liste doit être mis à jour.
Résultat
Votre fichier PersonneAdapter.kt devrait maintenant ressembler à ceci :
On ajoute le RecyclerView
dans le fichier xml
de l'activité.
ViewBinding
Commencez par mettre en place le ViewBinding dans votre activité.
Configurer le RecyclerView
Créez une méthode pour lier l'Adapteur
que nous venons de créer au RecyclerView
.
Remplir le RecyclerView
Remplissez le recycler view avec 10 000 éléments.