Πώς να δημιουργήσετε το δικό σας RecyclerView.Adapter για χρήση σε μια εφαρμογή Android;
sobes.tech AI
Απάντηση από AI
-
Δημιουργήστε μια κλάση που κληρονομεί από
RecyclerView.Adapter<ViewHolder>. Όπου τοViewHolderείναι μια εσωτερική κλάση που κληρονομεί απόRecyclerView.ViewHolder. -
Υλοποιήστε τρεις αφηρημένες μεθόδους:
onCreateViewHolder(parent: ViewGroup, viewType: Int): Δημιουργεί ένα νέο στιγμιότυποViewHolder. Συνήθως εδώ γίνεται inflate το layout του στοιχείου της λίστας.onBindViewHolder(holder: ViewHolder, position: Int): Συνδέει τα δεδομένα με τα στοιχεία τουViewHolderγια τη συγκεκριμένη θέση.getItemCount(): Int: Επιστρέφει το συνολικό αριθμό των στοιχείων στη συλλογή δεδομένων.
-
Στην κλάση του adapter, ορίστε μια λίστα ή άλλο κοντέινερ για την αποθήκευση των δεδομένων που θα εμφανίζονται.
-
Στη μέθοδο
onCreateViewHolder, πάρτε τοLayoutInflaterαπό το context τουparent, και κατόπιν καλέστεinflater.inflate()για να δημιουργήσετε το View του στοιχείου της λίστας. Μεταβιβάστε το δημιουργημένο View στον κατασκευαστή τουViewHolder. -
Στην εσωτερική κλάση
ViewHolder, πάρτε τις αναφορές στα View στοιχεία του layout του στοιχείου της λίστας, που χρειάζεται να εργαστείτε. Αυτό γίνεται στον κατασκευαστή τουViewHolder, που λαμβάνει View. -
Στη μέθοδο
onBindViewHolder, χρησιμοποιήστε τοpositionγια να πάρετε το αντίστοιχο στοιχείο δεδομένων από τη συλλογή. Στη συνέχεια, ορίστε τις τιμές των ιδιοτήτων των View στοιχείων στοholderβάσει των δεδομένων αυτού του στοιχείου. -
Προσθέστε μεθόδους για την ενημέρωση των δεδομένων στον adapter (π.χ.,
setData(newData: List<Item>)ήaddItem(item: Item)). Μετά την αλλαγή των δεδομένων, καλέστε τις μεθόδους που ενημερώνουν τοRecyclerView, όπωςnotifyDataSetChanged()ή πιο συγκεκριμένεςnotifyItemInserted(),notifyItemRemoved(),notifyItemChanged(),notifyItemRangeChanged().
Παράδειγμα δομής:
class MyAdapter(private var dataSet: List<String>) :
RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView
init {
// Ορισμός ακροατή κλικ για το View του ViewHolder.
textView = view.findViewById(R.id.textView) // Παράδειγμα ID από το layout
}
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.item_layout, viewGroup, false) // Παράδειγμα ID layout στοιχείου
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() // Ή πιο συγκεκριμένα notify*
}
}
- Στην δραστηριότητα ή το fragment όπου χρησιμοποιείται το
RecyclerView, δημιουργήστε ένα στιγμιότυπο αυτού του adapter και ορίστε το στοRecyclerViewμε τη μέθοδοsetAdapter(). Μην ξεχάσετε επίσης να ορίσετε τοLayoutManagerγια τοRecyclerView(π.χ.,LinearLayoutManager).
// Στη δραστηριότητα/fragment
val recyclerView: RecyclerView = findViewById(R.id.recyclerView) // Παράδειγμα ID
val layoutManager = LinearLayoutManager(this) // Ή άλλο layout manager
recyclerView.layoutManager = layoutManager
val myAdapter = MyAdapter(initialData)
recyclerView.adapter = myAdapter
// Ενημέρωση δεδομένων
myAdapter.updateData(newData)