Hogyan készítsünk saját RecyclerView.Adapter-t Android alkalmazásban való használatra?
sobes.tech MI
Válasz az MI-től
-
Hozzon létre egy osztályt, amely öröklődik a
RecyclerView.Adapter<ViewHolder>-ből. Ahol aViewHolderegy belső osztály, amely öröklődik aRecyclerView.ViewHolder-ből. -
Valósítson meg három absztrakt metódust:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Hozzon létre egy új példányt aViewHolder-ből. Általában itt történik a listaelem layoutjának inflate-elése.onBindViewHolder(holder: ViewHolder, position: Int): Kösse össze az adatokat aViewHolder-ben lévő elemekkel a megadott pozíciónál.getItemCount(): Int: Visszaadja az adathalmaz összes elemének számát.
-
A adapter osztályon belül határozzon meg egy listát vagy más tárolót az adatok tárolására, amelyek megjelennek.
-
Az
onCreateViewHoldermetódusban szerezze be aLayoutInflater-t aparentkontextusából, majd hívja meg ainflater.inflate()-t a listaelem View-jének létrehozásához. A létrehozott View-t adja át aViewHolderkonstruktorának. -
A
ViewHolderbelső osztályban szerezze meg a listaelem layout-jának View elemeire mutató hivatkozásokat, amikkel dolgozni kell. Ez aViewHolderkonstruktorában történik, amely View-t kap. -
A
onBindViewHoldermetódusban használja aposition-t az adott adat elem eléréséhez a kollekcióból. Ezután állítsa be a View elemek tulajdonságértékeit aholder-ben az adatok alapján. -
Adjon hozzá módszereket az adatok frissítésére az adapterben (pl.
setData(newData: List<Item>)vagyaddItem(item: Item)). Az adatok módosítása után hívja meg azRecyclerView-t értesítő metódusokat, például anotifyDataSetChanged()-t vagy specifikusabbakat, mint anotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Példa szerkezet:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Kattintásfigyelő beállítása a ViewHolder View-jára.
textView = view.findViewById(R.id.textView) // Példa ID a layout-ból
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Példa layout ID
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() // Vagy pontosabb notify*
}
}
- Az aktivitásban vagy fragmentben, ahol a
RecyclerView-t használják, hozzon létre egy példányt ennek az adapternek, és állítsa be asetAdapter()segítségével aRecyclerView-re. Ne felejtse el beállítani aLayoutManager-t is aRecyclerView-hez (pl.LinearLayoutManager).
// Az Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Példa ID
val layoutManager = LinearLayoutManager(this) // Vagy más layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Adatok frissítése
myAdapter.updateData(newData)