Класс Adapter
В коде списка пишут наследника
RecyclerView.Adapter.
На сайте урок назван
Adapter и лежит отдельно от папки RecyclerView,
но речь о том же базовом классе adapter.
Он создаёт
ViewHolder,
то есть RecyclerView.ViewHolder,
в
onCreateViewHolder,
заполняет данные в
onBindViewHolder
и возвращает размер в
getItemCount.
Синтаксис
class LineAdapter : RecyclerView.Adapter<LineAdapter.Holder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder { }
override fun onBindViewHolder(holder: Holder, position: Int) { }
override fun getItemCount(): Int = 0
}
Методы
| Метод | Описание |
|---|---|
onCreateViewHolder |
Создаёт ViewHolder и раздувает XML пункта. |
onBindViewHolder |
Подставляет данные в ViewHolder на позиции. |
getItemCount |
Возвращает число пунктов списка. |
notifyDataSetChanged |
Просит RecyclerView перерисовать список. |
Пример
Давайте выведем две строки через adapter:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class LineAdapter(private val items: List<String>) :
RecyclerView.Adapter<LineAdapter.Holder>() {
class Holder(view: View) : RecyclerView.ViewHolder(view) {
val label: TextView = view.findViewById(R.id.label)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_line, parent, false)
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
holder.label.text = items[position]
}
override fun getItemCount(): Int = items.size
}
После setAdapter на RecyclerView
на экране появятся строки "abcde" и "12345" из списка items.
Смотрите также
-
класс
RecyclerView,
который показывает пункты adapter -
класс
ViewHolder,
который хранит View одной строки -
класс
LayoutInflater,
который раздувает item_line.xml в onCreateViewHolder -
метод
setAdapter,
который подключает adapter к списку