Назад к вопросам
Junior
84
questionbank
В чем суть паттерна ViewHolder?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
ViewHolder — это вспомогательный класс в Android, предназначенный для кэширования ссылок на View-элементы innerhalb адаптера.
Суть паттерна:
- Кэширование: Вместо того чтобы каждый раз вызывать
findViewById()при создании или переиспользовании элемента списка,ViewHolderединожды находит ссылки на View и хранит их. - Переиспользование: При прокрутке списка Android переиспользует уже созданные View-объекты для экономии памяти и ресурсов.
ViewHolder, привязанный к такому View, предоставляет быстрый доступ к его дочерним элементам. - Производительность: Уменьшает количество вызовов
findViewById(), что значительно ускоряет отрисовку списков (например, вRecyclerView,ListView).
Пример использования в RecyclerView.Adapter:
class MyAdapter(...) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView.findViewById(R.id.my_text_view)
val imageView: ImageView = itemView.findViewById(R.id.my_image_view)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.list_item_layout, parent, false)
return MyViewHolder(view) // Создаем ViewHolder один раз
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
// Используем кэшированные ссылки для обновления данных
holder.textView.text = "Item ${position}"
// holder.imageView.setImage...
}
// ... other methods
}