Hoe maak je je eigen RecyclerView.Adapter voor gebruik in een Android-app?
sobes.tech AI
Antwoord van AI
-
Maak een klasse die erft van
RecyclerView.Adapter<ViewHolder>. WaarViewHoldereen interne klasse is die erft vanRecyclerView.ViewHolder. -
Implementeer drie abstracte methoden:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Maakt een nieuwe instantie vanViewHolder. Hier wordt meestal het inflaten van het layout van het lijstitem gedaan.onBindViewHolder(holder: ViewHolder, position: Int): Koppelt de gegevens aan de elementen vanViewHoldervoor de aangegeven positie.getItemCount(): Int: Geeft het totale aantal elementen in de dataset terug.
-
Binnen de adapterklasse, definieer een lijst of een andere container om de te tonen gegevens op te slaan.
-
In de methode
onCreateViewHolder, haalLayoutInflateruit de context vanparent, en roep vervolgensinflater.inflate()aan om het View-element van de lijst te maken. Geef de gemaakte View door aan de constructor vanViewHolder. -
Binnen de interne klasse
ViewHolder, haal referenties op naar de View-elementen van het layout van het lijstitem, waarmee gewerkt moet worden. Dit gebeurt in de constructor vanViewHolder, die een View ontvangt. -
In de methode
onBindViewHolder, gebruikpositionom het juiste gegevensitem uit de collectie te krijgen. Stel vervolgens de waarden van de eigenschappen van de View-elementen inholderin op basis van de gegevens van dat item. -
Voeg methoden toe om de gegevens in de adapter bij te werken (bijvoorbeeld
setData(newData: List<Item>)ofaddItem(item: Item)). Na het wijzigen van de gegevens, moet je methoden aanroepen dieRecyclerViewinformeren over de wijzigingen, zoalsnotifyDataSetChanged()of meer specifieke zoalsnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Voorbeeldstructuur:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Definieer kliklistener voor de ViewHolder's View.
textView = view.findViewById(R.id.textView) // Voorbeeld ID uit layout
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Voorbeeld ID van layout
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() // Of meer specifieke notify*
}
}
- In de activiteit of fragment waar
RecyclerViewwordt gebruikt, maak een instantie van deze adapter en stel deze in op deRecyclerViewmet behulp van de methodesetAdapter(). Vergeet ook niet om eenLayoutManagerin te stellen voor deRecyclerView(bijvoorbeeldLinearLayoutManager).
// In Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Voorbeeld ID
val layoutManager = LinearLayoutManager(this) // Of andere layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Gegevens bijwerken
myAdapter.updateData(newData)