Основы RecyclerView
Эффективно отображайте большие списки с помощью RecyclerView. Создавайте Adapter и ViewHolder, а также связывайте данные через ViewBinding.
«Основы RecyclerView» — бесплатный урок Android Academy на CoddyKit. Это урок 2 из 6. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 6 уроков всего.
Зачем нужен RecyclerView?
RecyclerView — стандартный способ отображения прокручиваемого списка элементов в Android.
В отличие от устаревшего ListView, RecyclerView:
- Повторно использует представления при прокрутке — создаёт только столько элементов, сколько помещается на экране
- Поддерживает вертикальные и горизонтальные списки, а также сетки
- Позволяет гибко настраивать отображение с помощью LayoutManagers
Архитектура RecyclerView
Для работы RecyclerView нужны три компонента:
- RecyclerView — виджет в XML-разметке
- Адаптер — связывает данные с представлениями элементов
- ViewHolder — хранит ссылки на представления внутри каждого элемента списка
Адаптер создаёт ViewHolders и связывает их с данными во время прокрутки пользователем списка.
Добавление RecyclerView в XML
Добавьте виджет в разметку и объявите зависимость в build.gradle:
<!-- In res/layout/activity_main.xml -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- app/build.gradle dependencies: -->
<!-- implementation 'androidx.recyclerview:recyclerview:1.3.2' -->Разметка элемента
Создайте отдельный XML-файл для каждого элемента списка. Например, res/layout/item_fruit.xml:
<!-- res/layout/item_fruit.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvCalories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp" />
</LinearLayout>Модель данных
Определите класс данных, представляющий каждый элемент списка:
data class Fruit(
val name: String,
val calories: Int
)Создание адаптера
Адаптер связывает данные с разметкой элемента. В нём есть три основных метода:
onCreateViewHolder— создаёт представление из XML элементаonBindViewHolder— заполняет данными один элементgetItemCount— возвращает общее количество элементов
Реализация адаптера
Полный минимальный адаптер RecyclerView:
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class FruitAdapter(
private val fruits: List<Fruit>
) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val tvName: TextView = view.findViewById(R.id.tvName)
val tvCalories: TextView = view.findViewById(R.id.tvCalories)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_fruit, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val fruit = fruits[position]
holder.tvName.text = fruit.name
holder.tvCalories.text = "${fruit.calories} kcal"
}
override fun getItemCount() = fruits.size
}Настройка в Activity
Свяжите RecyclerView, адаптер и LayoutManager в своей Activity:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val fruits = listOf(
Fruit("Apple", 95),
Fruit("Banana", 105),
Fruit("Cherry", 50),
Fruit("Mango", 202)
)
val adapter = FruitAdapter(fruits)
binding.recyclerView.apply {
this.adapter = adapter
layoutManager = LinearLayoutManager(this@MainActivity)
}
}GridLayoutManager
Замените LayoutManager, чтобы отображать сетку вместо одноколоночного списка:
LinearLayoutManager— вертикальный или горизонтальный списокGridLayoutManager(context, spanCount)— сетка с N столбцамиStaggeredGridLayoutManager— мозаичная сетка в стиле Pinterest
Быстрая проверка
Какова задача ViewHolder в адаптере RecyclerView?
Итоги: основы RecyclerView
Теперь вы умеете эффективно отображать списки:
- RecyclerView повторно использует представления для повышения производительности
- Три компонента: виджет RecyclerView, адаптер и ViewHolder
- XML элемента определяет внешний вид одной строки или карточки
- Адаптер связывает данные с представлениями в
onBindViewHolder - LayoutManager управляет отображением списка, сетки или мозаичной сетки
Далее: добавление обработки нажатий к элементам списка.
Часто задаваемые вопросы
Урок «Основы RecyclerView» бесплатный?
Да — полный текст урока «Основы RecyclerView» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 6 уроков всего.
Чему я научусь в уроке «Основы RecyclerView»?
Эффективно отображайте большие списки с помощью RecyclerView. Создавайте Adapter и ViewHolder, а также связывайте данные через ViewBinding. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 6.
Сколько времени занимает урок «Основы RecyclerView»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Коллекции Kotlin
- Основы RecyclerView
- События нажатия в RecyclerView
- SharedPreferences
- Настройки DataStore
- Адаптеры и DiffUtil