Ответ
Плюсы:
- Эффективность: переиспользует ViewHolder, что экономит память и улучшает производительность
- Гибкость: поддерживает разные LayoutManager (линейный, сетка, кастомный)
- Анимации: встроенная поддержка анимаций добавления/удаления элементов
- Разделение данных и отображения: четкое разделение через Adapter и ViewHolder
Минусы:
- Сложность: по сравнению с ListView требует больше кода для базовой реализации
- Кастомные анимации сложнее реализовать
- Нет встроенного разделителя между элементами (нужно добавлять вручную)
Пример базовой реализации:
class MyAdapter(private val items: List<String>) :
RecyclerView.Adapter<MyAdapter.ViewHolder>() {
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(R.id.textView)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_layout, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = items[position]
}
override fun getItemCount() = items.size
}