boa iniciativa, eu já pensei muito em tentar alguma coisa mas... as pessoas que usam o serviço precisam mudar muito o pensamento. Muito lammer muito op metido a god etc xD
Em sábado, 14 de fevereiro de 2015 12:28:34 UTC-2, Matheus Henrique da Silva escreveu:
-- Em sábado, 14 de fevereiro de 2015 12:28:34 UTC-2, Matheus Henrique da Silva escreveu:
Estou desenvolvendo uma especie de cliente IRC e estou apanhando para gerenciar todas as conversas, carrega-las cada uma em um fragment e atualiza-las corretamente. A mesma questão se aplica à lista de usuarios do canal que também é carregada num fragment mas a diferença é que este fica em um drawerlayout, escondido à direita.
Quando um fragment eh exibido (onActivityCreated()), ele chama a activity para acessar o service e buscar um objeto da classe Conversa que encapsula um array de objetos da classe Mensagem (no caso do fragment de users, eh a msm coisa mas ele carrega um array de objetos da classe User)Em virtude de o chat permanecer conectado tambem quando o aplicativo não esta em execução (apenas o service em background), eu preciso que esses arrays (Conversa's e Userlist) sejam mantidas e manuseadas no service. Porém, apos adicionar uma mensagem nova na Conversa ou atualizar a lista de usuarios, caso o conteudo que sofreu essa atualização esteja sendo exibido no fragment, o listview precisa ser atualizado, e eu não posso chamar essa atualização do service.
Já tentei enviar uma notificação via broadcast apos receber a mensagem, mas tive alguns problemas. Ultimamente eu estava chamando a UI thread do service para atualizar os dados e atualizar a listview:
// metodo no service
new Handler(Looper.getMainLooper()).post(new Runnable() { @Overridepublic void run() {try {userlist.updateUserList(finalUserList); } catch (CalledFromWrongThreadException e) { Crashlytics.logException(e);e.printStackTrace();}}});
// metodo na userlistpublic synchronized void updateUserList(ArrayList<User> lista)throws CalledFromWrongThreadException {this.lista = lista;
// mListener é a interface que o fragment implementa e é adicionada e removida no onResume() e onPause(),
// para saber quando o conteudo esta sendo exibido ou não. (Não sei se é o ideal a fazer)if (mListener != null) {mListener.notifyListview();}}
// metodo no fragmentpublic void notifyListview() {if (listview != null) {UserListAdapter adapter = (UserListAdapter) listview.getAdapter();if (adapter != null) {adapter.notifyDataSetChanged(); }}}
No entando, recentemente ainda tenho recebido pelo crashlytics este erro:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131099759, class android.widget.ListView) with Adapter(class com.example.irclient2.adapter. UserListAdapter)] at android.widget.ListView.layoutChildren(ListView.java: 1527) at android.widget.AbsListView$CheckForTap.run(AbsListView. java:2180) at android.os.Handler.handleCallback(Handler.java: 587) at android.os.Handler.dispatchMessage(Handler.java: 92) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$ MethodAndArgsCaller.run( ZygoteInit.java:842) at com.android.internal.os.ZygoteInit.main(ZygoteInit. java:600) at dalvik.system.NativeStart.main(NativeStart.java) O Asynctask me seria muito util se eu pudesse usa-lo o quanto quisesse e não apenas um por vez.Pensei em fazer o sistema de envio de mensagem exclusivamente com o Otto e ai interceptar onde achar melhor, mas não sei se seria uma boa aproximação também.
Qualquer ajuda será bem vinda. Desde ja, muito obrigado.
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