Sobes.tech
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:

  1. Caching: Instead of calling findViewById() every time when creating or reusing a list item, ViewHolder finds references to Views once and stores them.
  2. Reusing: When scrolling through the list, Android reuses already created View objects to save memory and resources. A ViewHolder attached to such a View provides quick access to its child elements.
  3. Performance: Reduces the number of findViewById() calls, significantly speeding up list rendering (e.g., in RecyclerView, 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
}