Sobes.tech
Middle

Kā izveidot savu RecyclerView.Adapter, lai to izmantotu Android lietotnē?

sobes.tech AI

Atbilde no AI

  1. Izveidojiet klasi, kas manto RecyclerView.Adapter<ViewHolder>. Kur ViewHolder ir iriekšējā klase, kas manto RecyclerView.ViewHolder.

  2. Realizējiet trīs abstraktās metodes:

    • onCreateViewHolder(parent: ViewGroup, viewType: Int): izveido jaunu ViewHolder eksemplāru. Parasti šeit notiek saraksta elementa maketa inflācija.
    • onBindViewHolder(holder: ViewHolder, position: Int): sasaista datus ar ViewHolder elementiem norādītajā pozīcijā.
    • getItemCount(): Int: atgriež kopējo datu kopas elementu skaitu.
  3. Klases adaptera iekšpusē definējiet datu sarakstu vai citu konteineru, kurā tiks glabāti dati.

  4. onCreateViewHolder metodē iegūstiet LayoutInflater no konteksta parent, tad izsauciet inflater.inflate() saraksta elementa View izveidei. Nododiet izveidoto View ViewHolder konstruktoram.

  5. Iekšējā ViewHolder klasē iegūstiet atsauces uz saraksta elementa maketa View elementiem, ar kuriem jāstrādā. To dara ViewHolder konstruktorā, kas saņem View.

  6. onBindViewHolder metodē izmantojiet position, lai iegūtu atbilstošo datu elementu no kolekcijas. Tad iestatiet View elementu īpašības uz šo datu pamata.

  7. Pievienojiet metodes datu atjaunināšanai adapterī (piemēram, setData(newData: List<Item>) vai addItem(item: Item)). Pēc datu izmaiņām ir jāizsauc metodes, kas informē RecyclerView par izmaiņām, piemēram, notifyDataSetChanged() vai specifiskākas notifyItemInserted(), notifyItemRemoved(), notifyItemChanged(), notifyItemRangeChanged().

Piemērs struktūrai:

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

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

        init {
            // Definēt klikšķa klausītāju ViewHolderView priekšā.
            textView = view.findViewById(R.id.textView) // Piemērs ID no maketa
        }
    }

    // Izveido jaunas skatus (izsauc maketa vadītājs)
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
        // Izveido jaunu skatu, kas definē saraksta elementa UI
        val view = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.item_layout, viewGroup, false) // Piemērs ID no maketa

        return MyViewHolder(view)
    }

    // Aizstāj satura skatu (izsauc maketa vadītājs)
    override fun onBindViewHolder(viewHolder: MyViewHolder, position: Int) {
        // Iegūst elementu no jūsu datu kopas šajā pozīcijā un aizstāj
        // skata elementu vērtības ar šo elementu datiem
        viewHolder.textView.text = dataSet[position]
    }

    // Atgriež jūsu datu kopas lielumu (izsauc maketa vadītājs)
    override fun getItemCount() = dataSet.size

    fun updateData(newData: List<String>) {
        dataSet = newData
        notifyDataSetChanged() // Vai specifiskākas notify* metodes
    }
}
  1. Aktivitātē vai fragmentā, kur tiek izmantots RecyclerView, izveidojiet šī adaptera eksemplāru un iestatiet to RecyclerView ar setAdapter() metodi. Tāpat neaizmirstiet iestatīt LayoutManager (piemēram, LinearLayoutManager).
// Aktivitātē/Fragmentā
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Piemērs ID
val layoutManager = LinearLayoutManager(this) // Vai cits layout vadītājs
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter

// Datu atjaunināšana
myAdapter.updateData(newData)