Ako vytvoriť vlastný RecyclerView.Adapter na použitie v aplikácii Android?
sobes.tech AI
Odpoveď od AI
-
Vytvorte triedu, ktorá dedí od
RecyclerView.Adapter<ViewHolder>. KdeViewHolderje vnútorná trieda, ktorá dedí odRecyclerView.ViewHolder. -
Implementujte tri abstraktné metódy:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Vytvorí nový príkladokViewHolder. Zvyčajne tu dochádza k inflate layoutu prvku zoznamu.onBindViewHolder(holder: ViewHolder, position: Int): Spája údaje s prvkami zViewHolderpre danú pozíciu.getItemCount(): Int: Vráti celkový počet prvkov v súbore údajov.
-
Vo vnútri triedy adaptéra určte zoznam alebo iný kontajner na uloženie údajov, ktoré sa budú zobrazovať.
-
V metóde
onCreateViewHolderzískajteLayoutInflaterz kontextuparent, potom zavolajteinflater.inflate()na vytvorenie View prvku zoznamu. Odovzdajte vytvorený View do konštruktoraViewHolder. -
Vo vnútornej triede
ViewHolderzískajte odkazy na View prvky layoutu prvku zoznamu, s ktorými je potrebné pracovať. To sa robí v konštruktoreViewHolder, ktorý prijíma View. -
V metóde
onBindViewHolderpoužitepositionna získanie zodpovedajúceho prvku údajov z kolekcie. Potom nastavte hodnoty vlastností View prvkov vholderna základe údajov z tohto prvku. -
Pridajte metódy na aktualizáciu údajov v adaptéri (napríklad
setData(newData: List<Item>)aleboaddItem(item: Item)). Po zmene údajov je potrebné zavolať metódy, ktoré informujúRecyclerViewo zmenách, napríkladnotifyDataSetChanged()alebo špecifickejšienotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Príklad štruktúry:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Definujte klikacieho poslucháča pre ViewHolder-ov View.
textView = view.findViewById(R.id.textView) // Príklad ID z layoutu
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Príklad ID layoutu prvku
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() // Alebo presnejšie notify*
}
}
- V aktivite alebo fragmente, kde sa používa
RecyclerView, vytvorte inštanciu tohto adaptéra a nastavte ho naRecyclerViewpomocou metódysetAdapter(). Taktiež nezabudnite nastaviťLayoutManagerpreRecyclerView(napríkladLinearLayoutManager).
// V Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Príklad ID
val layoutManager = LinearLayoutManager(this) // Alebo iný layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Aktualizácia údajov
myAdapter.updateData(newData)