Kako napraviti svoj RecyclerView.Adapter za korišćenje u Android aplikaciji?
sobes.tech АИ
Одговор од АИ
-
Kreirajte klasu koja nasleđuje
RecyclerView.Adapter<ViewHolder>. Gde jeViewHolderunutrašnja klasa koja nasleđujeRecyclerView.ViewHolder. -
Implementirajte tri apstraktne metode:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Kreira novi primerakViewHolder. Obično se ovde vrši inflate layouta elementa liste.onBindViewHolder(holder: ViewHolder, position: Int): Povezuje podatke sa elementima izViewHolderza datu poziciju.getItemCount(): Int: Vraća ukupan broj elemenata u skupu podataka.
-
Unutar klase adaptera odredite listu ili drugi kontejner za čuvanje podataka koji će se prikazivati.
-
U metodi
onCreateViewHolderdobijteLayoutInflateriz kontekstaparent, zatim pozoviteinflater.inflate()za kreiranje View elementa liste. Prosledite kreirani View u konstruktorViewHolder. -
Unutar unutrašnje klase
ViewHolderdobijte reference na View elemente layouta elementa liste sa kojima je potrebno raditi. To se radi u konstruktoruViewHolderkoji prima View. -
U metodi
onBindViewHolderkoristitepositionza dobijanje odgovarajućeg elementa podataka iz kolekcije. Zatim postavite vrednosti svojstava View elemenata uholderna osnovu podataka iz tog elementa. -
Dodajte metode za ažuriranje podataka u adapteru (npr.
setData(newData: List<Item>)iliaddItem(item: Item)). Nakon promene podataka, potrebno je pozvati metode koje obaveštavajuRecyclerViewo promenama, na primer,notifyDataSetChanged()ili specifičnijenotifyItemInserted(),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*
}
}
- U aktivnosti ili fragmentu gde se koristi
RecyclerView, kreirajte instancu ovog adaptera i postavite ga naRecyclerViewpomoću metodesetAdapter(). Takođe, ne zaboravite da postaviteLayoutManagerzaRecyclerView(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)