Метод onCreateViewHolder
Метод onCreateViewHolder
у
RecyclerView.Adapter
вызывается, когда RecyclerView нужен
новый
ViewHolder.
Обычно раздувают R.layout.item_*
через
inflate
и оборачивают корневой View в Holder.
Синтаксис
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_line, parent, false)
return Holder(view)
}
Параметры
| Параметр | Описание |
|---|---|
parent |
RecyclerView, куда попадёт пункт. |
viewType |
Тип разметки, если их несколько. |
Пример
Давайте раздуем item_line.xml для TextView с id label:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="abcde" />
Файл item_line задаёт разметку одного пункта списка.
Пример
Давайте вернём Holder из onCreateViewHolder:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class LineAdapter : 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) { }
override fun getItemCount(): Int = 0
}
RecyclerView сможет создавать Holder с TextView label внутри каждого пункта.
Смотрите также
-
метод
onBindViewHolder,
который заполняет Holder данными -
класс
ViewHolder,
который возвращает onCreateViewHolder -
метод
inflate,
который создаёт View из XML -
класс
Adapter,
где переопределяют onCreateViewHolder