Matheus,
Você pode tentar da seguinte forma:
Em vez de manter a Conversa como atributo de Service, faça dela uma instância global (um atributo de uma subclasse de Application ou então um Singleton) e faça dela uma "observável" da Activity que precisa chamar notifyDataSetChanged(), e que será a "observadora" ou listener (se quiser criar uma subclasse de ListView e fazer dela a observadora no lugar da activity, também pode funcionar). A classe observadora deverá implementar uma interface ConversaListener que contém um método atualizar() por exemplo. A implementação desse método deverá chamar notifyDataSetChanged() na ListView.
Você pode tentar da seguinte forma:
Em vez de manter a Conversa como atributo de Service, faça dela uma instância global (um atributo de uma subclasse de Application ou então um Singleton) e faça dela uma "observável" da Activity que precisa chamar notifyDataSetChanged(), e que será a "observadora" ou listener (se quiser criar uma subclasse de ListView e fazer dela a observadora no lugar da activity, também pode funcionar). A classe observadora deverá implementar uma interface ConversaListener que contém um método atualizar() por exemplo. A implementação desse método deverá chamar notifyDataSetChanged() na ListView.
Conversa deverá ter métodos adicionarListener(ConversaListener) e removerListener(ConversaListener). Quando um listener for adicionado, você pode guardar o listener em um atributo de Conversa.
Os locais adequados para chamar adicionarListener(this) e removerListener(this), no caso de uma activity, serão em onResume() e onPause() respectivamente.
Quando o service receber uma mensagem nova, use um Handler para chamar Conversa.addMessage() pelo thread principal. Acredito que irá funcionar.
2014-11-06 20:37 GMT-02:00 Rodrigo Piovezan <piovezan@gmail.com>:
Como falei, vou ficar devendo uma solução com o Otto porque não conheço event bus. Quem conhece pode ajudar melhor.2014-11-06 12:35 GMT-02:00 Matheus Henrique da Silva <matheustargaryen@gmail.com>:Só me corrigindo. Eu pensei melhor, e acho que o problema pode continuar. Pq afinal, o problema não acontece quando vamos dar notifydatasetchanged e uma nova mudança esta ocorrendo? Então, se eu dar notify e uma nova alteração no service estiver ocorrendo, vou continuar tendo o problema do mesmo jeito por serem a mesma instancia.Eu preciso lançar esse app, a parte de programação ta praticamente pronta e esse IlegalStateException esta atrasando td...Eu pensei uma outra gambiarra aqui... E se eu tiver uma variavel indicando quando a conversa esta sendo exibida? Ela pode ser controlada no onResume() e onPause() do fragment.Ao receber a mensagem, o service verifica e caso a conversa esta ativa, ou seja, o fragment dessa conversa eh que esta sendo exibido pro usuario, ao inves de adicionar a mensagem à conversa ali, envia a mensagem pelo Otto e quem adiciona é o fragment, logo antes de dar notify.Uma questão que eu pensei é: posso confiar na sincronia desse esquema? Por exemplo, pode acontecer de o service identificar a conversa como ativa e enviar via Otto mas antes de receber o usuario foi pra outra aba, o que desregistrou o bus e essa mensagem foi perdida pra sempre?Chatinho esse erro hein, a Google poderia ter pensado nisso... =/Muito obrigado mais uma vez pela paciencia.--
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.






0 comentários:
Postar um comentário