0Pricing
Android Academy · Урок

Основы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Коллекции Kotlin
  2. Основы RecyclerView
  3. События нажатия в RecyclerView
  4. SharedPreferences
  5. Настройки DataStore
  6. Адаптеры и DiffUtil
← Назад к Android Academy