Класс RecyclerView
Класс RecyclerView показывает прокручиваемый список
и создаёт только видимые пункты.
Данные и разметку пункта задаёт
Adapter,
наследник RecyclerView.Adapter.
Направление списка задаёт
setLayoutManager
с
LinearLayoutManager
или
GridLayoutManager.
Adapter передают через
setAdapter.
Синтаксис
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Параметры
| Параметр | Описание |
|---|---|
android:id |
Id списка для findViewById. |
android:layout_width |
Ширина области списка. |
android:layout_height |
Высота области списка. |
android:clipToPadding |
Обрезает ли список содержимое по padding. |
android:padding |
Отступы вокруг пунктов списка. |
Методы
| Метод | Описание |
|---|---|
setAdapter |
Подключает adapter с данными пунктов. |
setLayoutManager |
Задаёт схему: столбец, ряд или сетка. |
Пример
Давайте займём RecyclerView весь экран:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp" />
На экране появится пустая область списка, пока из кода не вызовут setAdapter.
Пример
Давайте подключим adapter и LinearLayoutManager:
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val list = findViewById<RecyclerView>(R.id.list)
list.layoutManager = LinearLayoutManager(this)
list.adapter = LineAdapter(listOf("abcde", "12345"))
}
}
class LineAdapter(private val items: List<String>) :
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) {
holder.label.text = items[position]
}
override fun getItemCount(): Int = items.size
}
На экране в столбец появятся две строки "abcde" и "12345".
Смотрите также
-
класс
Adapter,
который наполняет RecyclerView -
класс
ViewHolder,
который держит View одного пункта -
класс
LinearLayoutManager,
вертикальный или горизонтальный список -
класс
LayoutInflater,
который раздувает item_line.xml для пункта