Junior
What is the essence of the ViewHolder pattern?
sobes.tech AI
Answer from AI
ViewHolder is an auxiliary class in Android designed for caching references to View elements within an adapter.
The essence of the pattern:
- Caching: Instead of calling
findViewById()every time when creating or reusing a list item,ViewHolderfinds references to Views once and stores them. - Reusing: When scrolling through the list, Android reuses already created View objects to save memory and resources. A
ViewHolderattached to such a View provides quick access to its child elements. - Performance: Reduces the number of
findViewById()calls, significantly speeding up list rendering (e.g., inRecyclerView,ListView).
Example of usage in 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) // Create ViewHolder once
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
// Use cached references to update data
holder.textView.text = "Item ${position}"
// holder.imageView.setImage...
}
// ... other methods
}