Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Re: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification.

Matheus,

Não sei se você ainda está tendo esse problema, mas é o seguinte: a sugestão do Javanator não resolve. Você deve seguir o que a resposta aceita da questão diz. Ela diz que você deve adicionar um novo item aos dados que a ListView exibe (ou seja, adicionar uma mensagem à conversa) no UI THREAD e LOGO EM SEGUIDA chamar notifyDataSetChanged(). Fazer uma coisa em um thread e outra em outro como você está fazendo não resolve, as duas devem ser feitas no mesmo thread, que é o UI thread. Você até pode fazer coisas entre uma e outra desde que não seja nenhum código que mexa na ListView.

Em outras palavras, você deve chamar addMessage(mensagem) e notifyDataSetChanged() ambos um seguido o outro dentro do seu método onReceive().

Para fazer isso minha sugestão é adicionar a mensagem ao Intent que você faz broadcast (para isso ela deve ser Parcelable ou Serializable, você vai ter que aprender como implementar uma dessas interfaces) e extrair a mensagem desse intent dentro de onReceive().

Outra coisa, você não precisa usar o recurso de broadcast para fazer um trecho de código rodar no UI thread. Para isso pode usar Handler ou então o método Activity.runOnUiThread().


On Tue, Oct 28, 2014 at 3:28 PM, Matheus Henrique da Silva <matheustargaryen@gmail.com> wrote:
http://stackoverflow.com/questions/3132021/android-listview-illegalstateexception-the-content-of-the-adapter-has-changed/6357973#6357973

Vou seguir o conselho do Javanator, ele parece saber do que esta falando:

"This is a MultiThreading Issue and Using Properly Synchronized Blocks This can be prevented. Without putting extra things on UI Thread and causing loss of responsiveness of app.

I also faced the same. And as the most accepted answer suggests making change to adapter data from UI Thread can solve the issue. That will work but is a quick and easy solution but not the best one.

As you can see for a normal case. Updating data adapter from background thread and calling notifyDataSetChanged in UI thread works.

This illegalStateException arises when a ui thread is updating the view and another background thread changes the data again. That moment causes this issue.

So if you will synchronize all the code which is changing the adapter data and making notifydatasetchange call. This issue should be gone. As gone for me and i am still updating the data from background thread."

O problema é que eu não sei ao certo onde usar synchronized, nem sei se vai funcionar, nunca precisei usar esse modificador.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário