Jak vytvořit svůj vlastní RecyclerView.Adapter pro použití v aplikaci na Androidu?
sobes.tech AI
Odpověď od AI
-
Vytvořte třídu, která dědí od
RecyclerView.Adapter<ViewHolder>. KdeViewHolderje vnitřní třída, která dědí odRecyclerView.ViewHolder. -
Implementujte tři abstraktní metody:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Vytvoří nový instanceViewHolder. Obvykle zde dochází k inflate layoutu prvku seznamu.onBindViewHolder(holder: ViewHolder, position: Int): Propojuje data s prvky zViewHolderna dané pozici.getItemCount(): Int: Vrací celkový počet prvků v datové sadě.
-
Uvnitř třídy adaptéru definujte seznam nebo jinou kontejner pro uchovávání dat, která se budou zobrazovat.
-
V metodě
onCreateViewHolderzískejteLayoutInflaterz kontextuparent, poté zavolejteinflater.inflate()pro vytvoření View prvku seznamu. Předáte vytvořený View do konstruktoruViewHolder. -
Uvnitř vnitřní třídy
ViewHolderzískejte odkazy na View prvky layoutu prvku seznamu, se kterými je třeba pracovat. To se provádí v konstruktoruViewHolder, který přijímá View. -
V metodě
onBindViewHolderpoužijtepositionk získání odpovídajícího prvku dat z kolekce. Poté nastavte hodnoty vlastností View prvků vholderna základě dat z tohoto prvku. -
Přidejte metody pro aktualizaci dat v adapteru (například
setData(newData: List<Item>)neboaddItem(item: Item)). Po změně dat je třeba zavolat metody, které informujíRecyclerViewo změnách, napříkladnotifyDataSetChanged()nebo specifičtějšínotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Příklad struktury:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Definujte klikací posluchač pro ViewHolderův View.
textView = view.findViewById(R.id.textView) // Pří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) // Pří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() // Nebo přesnější notify*
}
}
- V aktivitě nebo fragmentu, kde je použit
RecyclerView, vytvořte instanci tohoto adaptéru a nastavte jej naRecyclerViewpomocí metodysetAdapter(). Také nezapomeňte nastavitLayoutManagerproRecyclerView(napříkladLinearLayoutManager).
// V Activity/Fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Příklad ID
val layoutManager = LinearLayoutManager(this) // Nebo jiný layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Aktualizace dat
myAdapter.updateData(newData)