Sobes.tech
Middle

Ինչպես ստեղծել ձեր սեփական RecyclerView.Adapter-ը Android հավելվածում օգտագործելու համար:

sobes.tech AI

Պատասխան AI-ից

  1. Ստեղծեք դաս, որը ժառանգում է RecyclerView.Adapter<ViewHolder>: որտեղ ViewHolder-ը ներքին դաս է, որը ժառանգում է RecyclerView.ViewHolder-ից:

  2. Իրականացրեք երեք աբստրակտ մեթոդներ:

    • onCreateViewHolder(parent: ViewGroup, viewType: Int): Ստեղծում է նոր ViewHolder օրինակ: սովորաբար այստեղ կատարվում է ցուցակի տարրերի layout-ի inflate-ումը:
    • onBindViewHolder(holder: ViewHolder, position: Int): Կապում է տվյալները ViewHolder-ի տարրերի հետ նշված դիրքում:
    • getItemCount(): Int: Վերադարձնում է տվյալների հավաքածուի ընդհանուր տարրերի քանակը:
  3. Կոդի ներսում սահմանեք ցուցակի կամ այլ կոնտեյներ տվյալների պահեստավորման համար, որոնք պետք է ցուցադրվեն:

  4. onCreateViewHolder մեթոդում ստացեք LayoutInflaterparent-ից, ապա կանչեք inflater.inflate()``-ը ցուցակի տարրերի View-ների ստեղծման համար: Տրված View-ը փոխանցեք ViewHolder`-ի կոնստրուկտորին:

  5. Ներքին ViewHolder դասում ստացեք ցուցակի տարրերի layout-ի View տարրերի հղումները, որոնցով պետք է աշխատել: Դա կատարվում է ViewHolder-ի կոնստրուկտորում, որը ստանում է View:

  6. onBindViewHolder-ում օգտագործեք position-ը համապատասխան տվյալ տարրին հասնելու համար, ապա սահմանեք View տարրերի հատկությունների արժեքները տվյալներից:

  7. Ավելացրեք մեթոդներ տվյալների թարմացման համար (օրինակ, 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*
    }
}
  1. Ֆունկցիայում կամ ֆրագմենտում, որտեղ օգտագործվում է RecyclerView, ստեղծեք այս ադապտերի օրինակ և սահմանեք այն RecyclerView-ին setAdapter() մեթոդով: Միևնույն ժամանակ, չմոռանաք սահմանել LayoutManagerRecyclerView-ի համար (օրինակ, 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)