Back to questions
Junior — Middle
70
Можешь ли ты описать ключевые специфики использования ViewHolder в списках и адаптерах?
Companies where asked
Центр Инвест Банк
Answer from AI
sobes.tech AI
ViewHolder — это паттерн, используемый в Android для оптимизации работы списков (например, ListView или RecyclerView). Его ключевая задача — избежать многократного вызова findViewById при прокрутке списка, что значительно повышает производительность.
Основные особенности использования ViewHolder:
- Кэширование ссылок на View: Вместо того, чтобы каждый раз искать элементы разметки, ViewHolder хранит ссылки на нужные View внутри элемента списка.
- Переиспользование View: При прокрутке списка адаптер переиспользует уже созданные View, а ViewHolder помогает быстро обновить содержимое.
- Уменьшение нагрузки на GC: Меньше создания новых объектов и вызовов findViewById снижает нагрузку на сборщик мусора.
Пример для RecyclerView:
class MyAdapter(private val items: List<String>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView.findViewById(R.id.textView)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.textView.text = items[position]
}
override fun getItemCount() = items.size
}
Здесь MyViewHolder хранит ссылку на TextView, что позволяет быстро обновлять данные без повторного поиска View.