Sobes.tech
Middle

Android tətbiqində istifadə üçün öz RecyclerView.Adapter-inizi necə yarada bilərsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

  1. RecyclerView.Adapter<ViewHolder> miras alan bir sinif yaradın. Burada ViewHolderRecyclerView.ViewHolder-dən miras alan daxili sinifdir.

  2. Üç abstrakt metodu həyata keçirin:

    • onCreateViewHolder(parent: ViewGroup, viewType: Int): Yeni ViewHolder nü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.
  3. Adapter sinifində məlumatların saxlanması üçün siyahı və ya başqa konteyner müəyyən edin.

  4. onCreateViewHolder metodunda parent-dən LayoutInflater alın, sonra inflater.inflate() istifadə edərək siyahı elementinin View-ni yaradın. Yaradılmış View-i ViewHolder-in konstruktoruna verin.

  5. ViewHolder daxili sinifində siyahı elementinin View elementlərinə referanslar alın, bu ViewHolder-in konstruktorunda View alınır.

  6. onBindViewHolder metodunda position-dan istifadə edərək müvafiq məlumat elementini alın və bu məlumatlara əsasən holder-dəki View elementlərinin dəyərlərini təyin edin.

  7. Adapterdə məlumatları yeniləmək üçün metodlar əlavə edin (məsələn, setData(newData: List<Item>) və ya addItem(item: Item)). Məlumatlar dəyişdikdən sonra notifyDataSetChanged() və ya daha dəqiq notifyItemInserted(), 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*
    }
}
  1. 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)