Android:从后台线程修改适配器内容

时间:2010-09-14 10:53:48

标签: android listview android-activity

我在阅读使用BaseAdapter时抛出的异常时已经阅读了很多内容,但我似乎无法找到替代解决方案: 确保未从后台主题修改适配器的内容

我想要实现的是在内存中保留消息队列的副本,并使用此消息队列为我的ListView填充BaseAdapter。这样做的原因是,即使ListView当前不存在(例如聊天窗口),消息队列也将继续从套接字获取消息。

问题来自于活动,前景中的 ListView BaseAdapter 绑定到消息队列的数据,并且收到消息在插座中。将新消息添加到队列中将引发上述异常。除非我使用消息队列预填充 BaseAdapter (如在BaseAdapter中有自己的消息队列)并在新消息进入时更新它们,我无法真正找到解决办法这个问题。

我真的不想加倍努力让这两个队列保持最新状态,这肯定有更好的方法吗?发送广播无法正常工作,因为服务滚动的适配器可能会延迟,并且会进行notifyDataSetChanged调用。

2 个答案:

答案 0 :(得分:2)

使用Handler修改主应用程序线程中的“消息队列”。

答案 1 :(得分:2)

我也有这个问题。事实证明我正在为新数据重新创建我的适配器,但旧的适配器仍设置为listview,偶尔会导致崩溃。所以当我需要重新创建适配器时,我会这样做:

//Clear adapter's array
if (!array.isEmpty()) { array.clear(); }
if (adapter != null) { adapter = null; }
setListAdapter(adapter);

//Later code
//array gets repopulated
//adapter gets recreated
setListAdapter(adapter);