Comment créer votre propre RecyclerView.Adapter pour une utilisation dans une application Android?
sobes.tech IA
Réponse de l'IA
-
Créer une classe héritant de
RecyclerView.Adapter<ViewHolder>. OùViewHolderest une classe interne héritant deRecyclerView.ViewHolder. -
Implémenter trois méthodes abstraites :
onCreateViewHolder(parent: ViewGroup, viewType: Int): Crée une nouvelle instance deViewHolder. En général, c'est ici que l'inflation du layout de l'élément de la liste se produit.onBindViewHolder(holder: ViewHolder, position: Int): Lie les données aux éléments duViewHolderpour la position indiquée.getItemCount(): Int: Retourne le nombre total d'éléments dans le jeu de données.
-
À l'intérieur de la classe adaptateur, définir une liste ou un autre conteneur pour stocker les données à afficher.
-
Dans la méthode
onCreateViewHolder, obtenirLayoutInflaterdepuis le contexte deparent, puis appelerinflater.inflate()pour créer l'élément View de la liste. Passer la View créée au constructeur deViewHolder. -
À l'intérieur de la classe interne
ViewHolder, obtenir des références aux éléments View du layout de l'élément de la liste, avec lesquels travailler. Cela se fait dans le constructeur deViewHolder, qui reçoit la View. -
Dans la méthode
onBindViewHolder, utiliserpositionpour obtenir l'élément de données correspondant dans la collection. Ensuite, définir les valeurs des propriétés des éléments View dansholderen fonction des données de cet élément. -
Ajouter des méthodes pour mettre à jour les données dans l'adaptateur (par exemple,
setData(newData: List<Item>)ouaddItem(item: Item)). Après modification des données, appeler des méthodes pour informerRecyclerViewdes changements, commenotifyDataSetChanged()ou des méthodes plus spécifiques telles quenotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Exemple de structure :
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Définir le listener de clic pour la vue du ViewHolder.
textView = view.findViewById(R.id.textView) // ID d'exemple du layout
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // ID d'exemple du layout de l'élément
return MyViewHolder(view)
}
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
viewHolder.textView.text = dataSet[position]
}
override fun getItemCount() = dataSet.size
fun updateData(newData: List<String>) {
dataSet = newData
notifyDataSetChanged() // Ou méthodes notify* plus précises
}
}
- Dans l'activité ou le fragment où
RecyclerViewest utilisé, créer une instance de cet adaptateur et le définir pour leRecyclerViewavec la méthodesetAdapter(). N'oubliez pas également de définir unLayoutManagerpour leRecyclerView(par exemple,LinearLayoutManager).
// Dans Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // ID d'exemple
val layoutManager = LinearLayoutManager(this) // Ou un autre layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Mise à jour des données
myAdapter.updateData(newData)