Sobes.tech
Middle

Kuidas luua oma RecyclerView.Adapter Android rakenduses kasutamiseks?

sobes.tech AI

Vastus AI-lt

  1. Loo klass, mis pärib RecyclerView.Adapter<ViewHolder>. Kus ViewHolder on siseklass, mis pärib RecyclerView.ViewHolder.

  2. Rakenda kolm abstraktset meetodit:

    • onCreateViewHolder(parent: ViewGroup, viewType: Int): loob uue ViewHolder eksemplari. Tavaliselt siin toimub elemendi nime maketi inflatsioon.
    • onBindViewHolder(holder: ViewHolder, position: Int): seob andmed ViewHolder elementidega määratud positsioonil.
    • getItemCount(): Int: tagastab andmekogumi elementide koguarvu.
  3. Määra adapteri klassi sees andmete nimekiri või muu konteiner, kuhu andmed salvestatakse.

  4. onCreateViewHolder meetodis saad LayoutInflateri kontekstist parent, seejärel kutsu inflater.inflate() sarakste elemendi vaate loomiseks. Anna loodud View ViewHolder konstruktorile.

  5. Siseklassis ViewHolder saa viited sarakste elemendi maketi View elementidele, millega töötada. Seda tehakse ViewHolder konstruktoris, mis saab View.

  6. onBindViewHolder meetodis kasuta position, et saada vastav andmeelement kogumist. Seadista seejärel View elementide väärtused holder-is vastavalt andmetele.

  7. Lisa meetodid andmete uuendamiseks adapteris (näiteks setData(newData: List<Item>) või addItem(item: Item)). Pärast andmete muutmist tuleb kutsuda meetodid, mis teavitavad RecyclerView muudatustest, näiteks notifyDataSetChanged() või spetsiifilisemad notifyItemInserted(), notifyItemRemoved(), notifyItemChanged(), notifyItemRangeChanged().

Näide struktuurist:

class MyAdapter(private var dataSet: List<String>) :
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val textView: TextView

        init {
            // Defineeri klikku kuulaja ViewHolderi View jaoks.
            textView = view.findViewById(R.id.textView) // Näide ID maketist
        }
    }

    // Loo uued vaated (kutsub maketi juht)
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
        // Loo uus vaade, mis määratleb nimekirja elemendi UI
        val view = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.item_layout, viewGroup, false) // Näide ID maketist

        return MyViewHolder(view)
    }

    // Asenda vaate sisu (kutsub maketi juht)
    override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
        // Võta element oma andmekogust sellel positsioonil ja asenda
        // vaate elementide väärtused selle elemendi andmetega
        viewHolder.textView.text = dataSet[position]
    }

    // Tagasta andmekogumi suurus (kutsub maketi juht)
    override fun getItemCount() = dataSet.size

    fun updateData(newData: List<String>) {
        dataSet = newData
        notifyDataSetChanged() // Või täpsemad notify* meetodid
    }
}
  1. Aktiivsuses või fragmentis, kus kasutatakse RecyclerView, loo selle adapteri eksemplar ja määra see RecyclerView-le setAdapter() abil. Ära unusta määrata ka LayoutManager-it (näiteks LinearLayoutManager).
// Aktiivsuses/Fragmentis
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Näide ID
val layoutManager = LinearLayoutManager(this) // Või teine layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter

// Andmete uuendamine
myAdapter.updateData(newData)