1
resposta

Reutilização dos ViewHolders pelo Adapter não funcionando corretamente

Fiz um teste ao final do projeto, colocando novamente aquele contador de quantas vezes o método onCreateViewHolder() é executado. O que notei foi o seguinte:

  • Quando carrego uma lista de Notas de exemplo (por exemplo, 1000 notas), ele cria 10 ViewHolders e reutiliza - tudo OK conforme esperado!
  • Quando vou criando um-por-um, ele sempre adiciona um novo ViewHolder, inclusive quando faço scroll tudo para cima, ou tudo para baixo (também cria novos itens)

A solução melhor que achei, foi utilizar o método notifyItemInserted(posicao) quando chamado o método adiciona(nota) do Adapter. Dessa forma, ele criou 12 ViewHolders e parou de criar novos (reutilizando corretamente, conforme esperado).

Esse comportamento de sempre criar um novo ViewHolder quando utilizado o método notifyDataSetChanged() está correta? Sempre irá criar novos itens?

Obrigado!!

1 resposta

Oi Ulisses, tudo bem ?

O notifyDataSetChanged() você está falando pro recycler view que tudo mudou, então ele não sabe ao certo o que precisa ser alterado, por esse motivo, ele recria tudo, o ideal é usarmos sempre os métodos certos, avisando de onde foi mexido na lista, assim ele consegue manipular e manter a performance.