Kaip sukurti savo RecyclerView.Adapter, skirtą naudoti Android programoje?
sobes.tech AI
Atsakymas iš AI
-
Sukurkite klasę, kuri paveldi
RecyclerView.Adapter<ViewHolder>. KurViewHolderyra vidinė klasė, paveldintiRecyclerView.ViewHolder. -
Įgyvendinkite tris abstrakčius metodus:
onCreateViewHolder(parent: ViewGroup, viewType: Int): sukuria naująViewHolderegzempliorių. Paprastai čia vyksta elemento maketo inflacija.onBindViewHolder(holder: ViewHolder, position: Int): susieja duomenis suViewHolderelementais nurodytoje pozicijoje.getItemCount(): Int: grąžina bendrą duomenų rinkinio elementų skaičių.
-
Viduje adapterio klasės apibrėžkite duomenų sąrašą arba kitą konteinerį, kuriame bus saugomi duomenys.
-
onCreateViewHoldermetode gautiLayoutInflateriš tėvo konteksto, tada iškviestiinflater.inflate()norint sukurti sąrašo elemento View. Paduoti sukurtą View įViewHolderkonstruktorių. -
Vidinėje
ViewHolderklasėje gauti nuorodas į sąrašo elemento maketo View elementus, su kuriais dirbti reikia. Tai daromaViewHolderkonstruktoriuje, kuris gauna View. -
onBindViewHoldermetode naudotiposition, kad gauti atitinkamą duomenų elementą iš kolekcijos. Tada nustatytiViewelementų savybesholderremiantis šiuo duomeniu. -
Pridėti metodus duomenų atnaujinimui adapteryje (pvz.,
setData(newData: List<Item>)arbaaddItem(item: Item)). Po duomenų pakeitimo būtina iškviesti metodus, informuojančiusRecyclerViewapie pakeitimus, pvz.,notifyDataSetChanged()arba tikslesniusnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Pavyzdinė struktūra:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Apibrėžti paspaudimo klausytoją ViewHolder'o View.
textView = view.findViewById(R.id.textView) // Pavyzdinis ID iš maketo
}
}
// Kurti naujus vaizdus (kviečia maketo valdytojas)
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
// Kurti naują vaizdą, kuris apibrėžia sąrašo elemento UI
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Pavyzdinis ID iš maketo
return MyViewHolder(view)
}
// Pakeisti turinį vaizde (kviečia maketo valdytojas)
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
// Gauti duomenų elementą iš duomenų rinkinio šioje pozicijoje ir pakeisti
// `View` elementų savybes pagal šiuos duomenis
viewHolder.textView.text = dataSet[position]
}
// Grąžinti duomenų rinkinio dydį (kviečia maketo valdytojas)
override fun getItemCount() = dataSet.size
fun updateData(newData: List<String>) {
dataSet = newData
notifyDataSetChanged() // Arba tikslesni notify* metodai
}
}
- Veikloje arba fragmento, kur naudojamas
RecyclerView, sukurkite šio adapterio egzempliorių ir nustatykite jįRecyclerViewnaudojantsetAdapter(). Taip pat nepamirškite nustatytiLayoutManager(pvz.,LinearLayoutManager).
// Veikloje/Fragmento
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Pavyzdinis ID
val layoutManager = LinearLayoutManager(this) // Arba kitas layout valdytojas
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Duomenų atnaujinimas
myAdapter.updateData(newData)