Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Android SDK recomendou @SuppressLint no notifyDataSetChanged()

Ps: vim do futuro desse post para dizer que modificação que eu tinha feito me trouxe um erro que ocorreria mais para frente. no comentário abaixo eu explico melhor o que aconteceu. Podem ignorar esse post

Bom dia a todos

Ao usar onotifyDataSetChanged() (como foi indicado na aula) para avisar o sistema de que a lista de produtos foi atualizada, o android SDK sugeriu que usasse uma anotação de @SuppressLint("NotifyDataSetChanged") para suprimir o notifyDataSetChanged()

    @SuppressLint("NotifyDataSetChanged")
    fun atualiza(produtos: List<Produto>) {
        this.produtos.clear()
        this.produtos.addAll(produtos)
        notifyDataSetChanged()
    }

Pelo que eu entendi lendo este fórum, é que esse código foi identificado pelo android como um código problemático, e possível causador de bug. e com essa anotação, ele é suprimido e diminui a chance de acontecer uma exceção.

Eu não sei se entendi exatamente, e se eu falei de forma correta. Se for, quer dizer que o notifyDataSetChanged() nem rodou por causa da anotação? E se for suprimido, quer dizer que ele não é necessário?

Ps: meu código rodou normalmente desse jeito

2 respostas
solução!

Olá Murilo, tudo bem?

Isso acontece pois o notifyDataSetChanged() é bem generalista, podendo ser executado em qualquer mudança seja ela de adição, remoção, etc. O recomendado é utilizar as funções específicas:

  • notifyItemInserted() apenas no caso de inserir itens.
  • notifyItemRemoved() apenas no caso de excluir itens.
  • notifyItemMoved() apenas no caso de trocar itens de lugar.

Então por questões de performance e garantia do procedimento, é recomendado utilizar estes métodos específicos.

Qualquer coisa estarei à disposição :)

Eu vim do futuro para dizer que quando eu fui colocar a propriedade de poder excluir os itens, deu ruim.

Me apareceu essa mensagem de erro

FATAL EXCEPTION: main
Process: br.com.alura.orgs, PID: 11509
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolderMapper

Tentei utilizar o notifyItemInserted() e notifyItemRemoved() e deu ruim denovo. Só resolveu quando eu voltei a utilizar o notifyDataSetChanged()

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software