Ответ
RecyclerView использует паттерн ViewHolder и отображает только видимые на экране элементы + несколько запасных для плавного скролла. При прокрутке элементы переиспользуются через пул вьюхолдеров.
Пример базовой реализации:
val adapter = object : RecyclerView.Adapter<MyViewHolder>() {
override fun getItemCount() = 100
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item, parent, false))
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind(data[position])
}
}
recyclerView.adapter = adapter
Оптимизации:
- Используйте
setHasFixedSize(true)если размеры элементов фиксированы - Для сложных списков - DiffUtil для эффективных обновлений
- Разные viewType для разных типов элементов