Ինչպես ստեղծել ձեր սեփական RecyclerView.Adapter-ը Android հավելվածում օգտագործելու համար:
sobes.tech AI
Պատասխան AI-ից
-
Ստեղծեք դաս, որը ժառանգում է
RecyclerView.Adapter<ViewHolder>: որտեղViewHolder-ը ներքին դաս է, որը ժառանգում էRecyclerView.ViewHolder-ից: -
Իրականացրեք երեք աբստրակտ մեթոդներ:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Ստեղծում է նորViewHolderօրինակ: սովորաբար այստեղ կատարվում է ցուցակի տարրերի layout-ի inflate-ումը:onBindViewHolder(holder: ViewHolder, position: Int): Կապում է տվյալներըViewHolder-ի տարրերի հետ նշված դիրքում:getItemCount(): Int: Վերադարձնում է տվյալների հավաքածուի ընդհանուր տարրերի քանակը:
-
Կոդի ներսում սահմանեք ցուցակի կամ այլ կոնտեյներ տվյալների պահեստավորման համար, որոնք պետք է ցուցադրվեն:
-
onCreateViewHolderմեթոդում ստացեքLayoutInflater-ըparent-ից, ապա կանչեքinflater.inflate()``-ը ցուցակի տարրերի View-ների ստեղծման համար: Տրված View-ը փոխանցեքViewHolder`-ի կոնստրուկտորին: -
Ներքին
ViewHolderդասում ստացեք ցուցակի տարրերի layout-ի View տարրերի հղումները, որոնցով պետք է աշխատել: Դա կատարվում էViewHolder-ի կոնստրուկտորում, որը ստանում է View: -
onBindViewHolder-ում օգտագործեքposition-ը համապատասխան տվյալ տարրին հասնելու համար, ապա սահմանեք View տարրերի հատկությունների արժեքները տվյալներից: -
Ավելացրեք մեթոդներ տվյալների թարմացման համար (օրինակ,
setData(newData: List<Item>)կամaddItem(item: Item)). Տվյալների փոփոխությունից հետո կանչեքnotifyDataSetChanged()կամ ավելի հատուկnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged():
Նմուշային կառուցվածք:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Հստակեցրեք click listener-ը ViewHolder-ի View-ի համար:
textView = view.findViewById(R.id.textView) // Օրինակ ID layout-ից
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Օրինակ ID 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() // կամ ավելի ճշգրիտ notify*
}
}
- Ֆունկցիայում կամ ֆրագմենտում, որտեղ օգտագործվում է
RecyclerView, ստեղծեք այս ադապտերի օրինակ և սահմանեք այնRecyclerView-ինsetAdapter()մեթոդով: Միևնույն ժամանակ, չմոռանաք սահմանելLayoutManager-ըRecyclerView-ի համար (օրինակ,LinearLayoutManager):
// Activity/Fragment-ում
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Օրինակ ID
val layoutManager = LinearLayoutManager(this) // կամ այլ layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Տվյալների թարմացում
myAdapter.updateData(newData)