Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
372 of 502 menu
◀ ▶

Метод 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
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить