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

Класс ViewHolder

В коде пишут наследника RecyclerView.ViewHolder. Урок на сайте называется ViewHolder и лежит рядом с Adapter, хотя в SDK класс вложен в RecyclerView. Holder держит корневой View пункта в поле itemView и ссылки на TextView через findViewById. Создают в onCreateViewHolder, заполняют в onBindViewHolder.

Синтаксис

class Holder(view: View) : RecyclerView.ViewHolder(view) { val label: TextView = view.findViewById(R.id.label) }

Пример

Давайте сохраним TextView в Holder:

import android.view.View 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 = itemView.findViewById(R.id.label) } override fun onCreateViewHolder( parent: android.view.ViewGroup, viewType: Int, ): Holder { throw UnsupportedOperationException() } override fun onBindViewHolder(holder: Holder, position: Int) { holder.label.text = "abcde" } override fun getItemCount(): Int = 1 }

На экране один пункт списка покажет "abcde" через label в Holder.

Пример

Давайте повесим onClick на itemView Holder:

import android.view.View import android.widget.TextView import androidx.recyclerview.widget.RecyclerView class LineAdapter( private val onRowClick: (Int) -> Unit, ) : RecyclerView.Adapter<LineAdapter.Holder>() { class Holder( view: View, onClick: (Int) -> Unit, ) : RecyclerView.ViewHolder(view) { val label: TextView = view.findViewById(R.id.label) init { view.setOnClickListener { onClick(bindingAdapterPosition) } } } override fun onCreateViewHolder( parent: android.view.ViewGroup, viewType: Int, ): Holder { throw UnsupportedOperationException() } override fun onBindViewHolder(holder: Holder, position: Int) { holder.label.text = "12345" } override fun getItemCount(): Int = 1 }

На экране нажатие по строке списка вызовет переданный onRowClick с позицией пункта.

Смотрите также

  • класс Adapter,
    который создаёт и биндит ViewHolder
  • класс RecyclerView,
    который переиспользует Holder при прокрутке
  • метод findViewById,
    которым ищут label внутри itemView
  • метод onCreateViewHolder,
    который возвращает новый Holder
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить