Sobes.tech
Middle

Kako napraviti svoj RecyclerView.Adapter za korišćenje u Android aplikaciji?

sobes.tech АИ

Одговор од АИ

  1. Kreirajte klasu koja nasleđuje RecyclerView.Adapter<ViewHolder>. Gde je ViewHolder unutrašnja klasa koja nasleđuje RecyclerView.ViewHolder.

  2. Implementirajte tri apstraktne metode:

    • onCreateViewHolder(parent: ViewGroup, viewType: Int): Kreira novi primerak ViewHolder. Obično se ovde vrši inflate layouta elementa liste.
    • onBindViewHolder(holder: ViewHolder, position: Int): Povezuje podatke sa elementima iz ViewHolder za datu poziciju.
    • getItemCount(): Int: Vraća ukupan broj elemenata u skupu podataka.
  3. Unutar klase adaptera odredite listu ili drugi kontejner za čuvanje podataka koji će se prikazivati.

  4. U metodi onCreateViewHolder dobijte LayoutInflater iz konteksta parent, zatim pozovite inflater.inflate() za kreiranje View elementa liste. Prosledite kreirani View u konstruktor ViewHolder.

  5. Unutar unutrašnje klase ViewHolder dobijte reference na View elemente layouta elementa liste sa kojima je potrebno raditi. To se radi u konstruktoru ViewHolder koji prima View.

  6. U metodi onBindViewHolder koristite position za dobijanje odgovarajućeg elementa podataka iz kolekcije. Zatim postavite vrednosti svojstava View elemenata u holder na osnovu podataka iz tog elementa.

  7. Dodajte metode za ažuriranje podataka u adapteru (npr. setData(newData: List<Item>) ili addItem(item: Item)). Nakon promene podataka, potrebno je pozvati metode koje obaveštavaju RecyclerView o promenama, na primer, notifyDataSetChanged() ili specifičnije notifyItemInserted(), notifyItemRemoved(), notifyItemChanged(), notifyItemRangeChanged().

Primer strukture:

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

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

        init {
            // Definišite klik poslata za ViewHolder-ov View.
            textView = view.findViewById(R.id.textView) // Primer ID iz layout-a
        }
    }

    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.item_layout, viewGroup, false) // Primer ID layout-a elementa
        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() // Ili preciznije notify*
    }
}
  1. U aktivnosti ili fragmentu gde se koristi RecyclerView, kreirajte instancu ovog adaptera i postavite ga na RecyclerView pomoću metode setAdapter(). Takođe, ne zaboravite da postavite LayoutManager za RecyclerView (npr. LinearLayoutManager).
// U Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Primer ID
val layoutManager = LinearLayoutManager(this) // Ili drugi layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter

// Ažuriranje podataka
myAdapter.updateData(newData)