Kā izveidot savu RecyclerView.Adapter, lai to izmantotu Android lietotnē?
sobes.tech AI
Atbilde no AI
-
Izveidojiet klasi, kas manto
RecyclerView.Adapter<ViewHolder>. KurViewHolderir iriekšējā klase, kas mantoRecyclerView.ViewHolder. -
Realizējiet trīs abstraktās metodes:
onCreateViewHolder(parent: ViewGroup, viewType: Int): izveido jaunuViewHoldereksemplāru. Parasti šeit notiek saraksta elementa maketa inflācija.onBindViewHolder(holder: ViewHolder, position: Int): sasaista datus arViewHolderelementiem norādītajā pozīcijā.getItemCount(): Int: atgriež kopējo datu kopas elementu skaitu.
-
Klases adaptera iekšpusē definējiet datu sarakstu vai citu konteineru, kurā tiks glabāti dati.
-
onCreateViewHoldermetodē iegūstietLayoutInflaterno kontekstaparent, tad izsaucietinflater.inflate()saraksta elementa View izveidei. Nododiet izveidoto ViewViewHolderkonstruktoram. -
Iekšējā
ViewHolderklasē iegūstiet atsauces uz saraksta elementa maketa View elementiem, ar kuriem jāstrādā. To daraViewHolderkonstruktorā, kas saņem View. -
onBindViewHoldermetodē izmantojietposition, lai iegūtu atbilstošo datu elementu no kolekcijas. Tad iestatiet View elementu īpašības uz šo datu pamata. -
Pievienojiet metodes datu atjaunināšanai adapterī (piemēram,
setData(newData: List<Item>)vaiaddItem(item: Item)). Pēc datu izmaiņām ir jāizsauc metodes, kas informēRecyclerViewpar izmaiņām, piemēram,notifyDataSetChanged()vai specifiskākasnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Piemērs struktūrai:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Definēt klikšķa klausītāju ViewHolderView priekšā.
textView = view.findViewById(R.id.textView) // Piemērs ID no maketa
}
}
// Izveido jaunas skatus (izsauc maketa vadītājs)
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
// Izveido jaunu skatu, kas definē saraksta elementa UI
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Piemērs ID no maketa
return MyViewHolder(view)
}
// Aizstāj satura skatu (izsauc maketa vadītājs)
override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
// Iegūst elementu no jūsu datu kopas šajā pozīcijā un aizstāj
// skata elementu vērtības ar šo elementu datiem
viewHolder.textView.text = dataSet[position]
}
// Atgriež jūsu datu kopas lielumu (izsauc maketa vadītājs)
override fun getItemCount() = dataSet.size
fun updateData(newData: List<String>) {
dataSet = newData
notifyDataSetChanged() // Vai specifiskākas notify* metodes
}
}
- Aktivitātē vai fragmentā, kur tiek izmantots
RecyclerView, izveidojiet šī adaptera eksemplāru un iestatiet toRecyclerViewarsetAdapter()metodi. Tāpat neaizmirstiet iestatītLayoutManager(piemēram,LinearLayoutManager).
// Aktivitātē/Fragmentā
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Piemērs ID
val layoutManager = LinearLayoutManager(this) // Vai cits layout vadītājs
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Datu atjaunināšana
myAdapter.updateData(newData)