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.

Já fiz isso usando o Otto e não tive problemas.


Abraços,
Pedro Subutzki


Em 31 de outubro de 2014 12:23, Rodrigo Piovezan <piovezan@gmail.com> escreveu:
Já resolvi esse problema uma vez de uma forma que não sei se é a mais certa: meu adapter não estava associado diretamente à lista de dados do serviço, e sim a uma cópia da mesma, e quando o serviço recebia dados novos ele os enviava para a minha activity através de um broadcast. Com isso na activity eu tinha oportunidade de atualizar a a cópia da lista e chamar notifyDataSetChanged no UI thread evitando que ocorresse a exception.

Imagino que haja uma forma melhor de fazer; por exemplo, no SOPT o luciofm recomendou usar um Loader e eventualmente um Message Bus.

Não tentei mas talvez possa ser feito sem esses recursos, apenas fazendo a activity ser um listener (padrão Observer, com métodos addListener e removeListener estáticos) do serviço, daí quando chega uma nova mensagem o serviço executa as duas operações (adicionar a mensagem à conversa e notificar seus listeners) no UI thread através de um Handler. Para funcionar a conversa deveria ser mantida em uma variável estática ou em uma classe à parte, fora do serviço (um Singleton). Alternativamente aos métodos estáticos a activity poderia se acoplar ao serviço via binding. Como falei, não sei se funciona, nem se é muito elegante resolver assim.


2014-10-31 10:16 GMT-02:00 Matheus Henrique da Silva <matheustargaryen@gmail.com>:

Rodrigo, muito obrigado. Parte disso eu até que sabia, mas o meu problema é que o meu app é baseado num service, e todas as conversas ficam nele. E eu preciso que fique nele porque o app tb vai funcionar em segundo plano, vai receber mensagens enquanto a activity não estiver aberta e notificar o usuario também.
Quando a activity não esta aberta é tranquilo, só adicionar a mensagem na conversa, mas quando está, eu preciso notificar a UI que essa conversa foi alterada dentro do service.
Eu pensei em puxar um handler dentro da propria classe que encapsula a conversa pra add a mensagem e notificar da UI, de dentro da conversa, mas achei que seria muita gambiarra e usando o broadcast seria mais elegante/correto.

--
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.

--
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