Kuidas luua oma RecyclerView.Adapter Android rakenduses kasutamiseks?
sobes.tech AI
Vastus AI-lt
-
Loo klass, mis pärib
RecyclerView.Adapter<ViewHolder>. KusViewHolderon siseklass, mis päribRecyclerView.ViewHolder. -
Rakenda kolm abstraktset meetodit:
onCreateViewHolder(parent: ViewGroup, viewType: Int): loob uueViewHoldereksemplari. Tavaliselt siin toimub elemendi nime maketi inflatsioon.onBindViewHolder(holder: ViewHolder, position: Int): seob andmedViewHolderelementidega määratud positsioonil.getItemCount(): Int: tagastab andmekogumi elementide koguarvu.
-
Määra adapteri klassi sees andmete nimekiri või muu konteiner, kuhu andmed salvestatakse.
-
onCreateViewHoldermeetodis saad LayoutInflateri kontekstistparent, seejärel kutsuinflater.inflate()sarakste elemendi vaate loomiseks. Anna loodud ViewViewHolderkonstruktorile. -
Siseklassis
ViewHoldersaa viited sarakste elemendi maketi View elementidele, millega töötada. Seda tehakseViewHolderkonstruktoris, mis saab View. -
onBindViewHoldermeetodis kasutaposition, et saada vastav andmeelement kogumist. Seadista seejärel View elementide väärtusedholder-is vastavalt andmetele. -
Lisa meetodid andmete uuendamiseks adapteris (näiteks
setData(newData: List<Item>)võiaddItem(item: Item)). Pärast andmete muutmist tuleb kutsuda meetodid, mis teavitavadRecyclerViewmuudatustest, näiteksnotifyDataSetChanged()või spetsiifilisemadnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Näide struktuurist:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Defineeri klikku kuulaja ViewHolderi View jaoks.
textView = view.findViewById(R.id.textView) // Näide ID maketist
}
}
// Loo uued vaated (kutsub maketi juht)
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
// Loo uus vaade, mis määratleb nimekirja elemendi UI
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Näide ID maketist
return MyViewHolder(view)
}
// Asenda vaate sisu (kutsub maketi juht)
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
// Võta element oma andmekogust sellel positsioonil ja asenda
// vaate elementide väärtused selle elemendi andmetega
viewHolder.textView.text = dataSet[position]
}
// Tagasta andmekogumi suurus (kutsub maketi juht)
override fun getItemCount() = dataSet.size
fun updateData(newData: List<String>) {
dataSet = newData
notifyDataSetChanged() // Või täpsemad notify* meetodid
}
}
- Aktiivsuses või fragmentis, kus kasutatakse
RecyclerView, loo selle adapteri eksemplar ja määra seeRecyclerView-lesetAdapter()abil. Ära unusta määrata kaLayoutManager-it (näiteksLinearLayoutManager).
// Aktiivsuses/Fragmentis
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Näide ID
val layoutManager = LinearLayoutManager(this) // Või teine layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Andmete uuendamine
myAdapter.updateData(newData)