Sobes.tech
Junior

Qual é a essência do padrão ViewHolder?

sobes.tech IA

Resposta da IA

O ViewHolder é uma classe auxiliar no Android, destinada a fazer cache de referências aos elementos View dentro de um adaptador.

A essência do padrão:

  1. Caching: Em vez de chamar findViewById() toda vez que um elemento da lista é criado ou reutilizado, o ViewHolder encontra e armazena as referências às View uma única vez.
  2. Reutilização: Ao percorrer a lista, o Android reutiliza objetos View já criados para economizar memória e recursos. O ViewHolder, vinculado a uma View assim, fornece acesso rápido aos seus elementos filhos.
  3. Desempenho: Reduz o número de chamadas a findViewById(), acelerando significativamente a renderização das listas (por exemplo, em RecyclerView, ListView).

Exemplo de uso em 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) // Cria um ViewHolder uma única vez
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        // Usa as referências em cache para atualizar os dados
        holder.textView.text = "Item ${position}"
        // holder.imageView.setImage...
    }

    // ... outros métodos
}