Android tətbiqində istifadə üçün öz RecyclerView.Adapter-inizi necə yarada bilərsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
-
RecyclerView.Adapter<ViewHolder>miras alan bir sinif yaradın. BuradaViewHolder—RecyclerView.ViewHolder-dən miras alan daxili sinifdir. -
Üç abstrakt metodu həyata keçirin:
onCreateViewHolder(parent: ViewGroup, viewType: Int): YeniViewHoldernümunəsi yaradın. Adətən burada siyahı elementinin layout-u inflate edilir.onBindViewHolder(holder: ViewHolder, position: Int): MəlumatlarıViewHolder-dən olan elementlərlə əlaqələndirin.getItemCount(): Int: Məlumatlar toplusundakı ümumi element sayını qaytarır.
-
Adapter sinifində məlumatların saxlanması üçün siyahı və ya başqa konteyner müəyyən edin.
-
onCreateViewHoldermetodundaparent-dənLayoutInflateralın, sonrainflater.inflate()istifadə edərək siyahı elementinin View-ni yaradın. Yaradılmış View-iViewHolder-in konstruktoruna verin. -
ViewHolderdaxili sinifində siyahı elementinin View elementlərinə referanslar alın, buViewHolder-in konstruktorunda View alınır. -
onBindViewHoldermetodundaposition-dan istifadə edərək müvafiq məlumat elementini alın və bu məlumatlara əsasənholder-dəki View elementlərinin dəyərlərini təyin edin. -
Adapterdə məlumatları yeniləmək üçün metodlar əlavə edin (məsələn,
setData(newData: List<Item>)və yaaddItem(item: Item)). Məlumatlar dəyişdikdən sonranotifyDataSetChanged()və ya daha dəqiqnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged()metodlarını çağırın.
Nümunə strukturu:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// ViewHolder-ın View üçün klik dinləyicisini təyin edin.
textView = view.findViewById(R.id.textView) // Layout-dan ID nümunəsi
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Element layout ID nümunəsi
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() // və ya daha dəqiq notify*
}
}
- Aktivlik və ya fragmentdə, burada
RecyclerView-dən istifadə edən, bu adapter nümunəsini yaradın vəsetAdapter()metodu iləRecyclerView-ə təyin edin. Həmçinin,LayoutManager-i təyin etməyi unutmayın (məsələn,LinearLayoutManager).
// Aktivlik/Fragmentdə
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // ID nümunəsi
val layoutManager = LinearLayoutManager(this) // və ya başqa layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Məlumatların yenilənməsi
myAdapter.updateData(newData)