【发布时间】:2010-09-14 10:53:48
【问题描述】:
我已经阅读了很多关于使用 BaseAdapter 时引发的异常的信息,但我似乎找不到替代解决方案: 确保您的适配器的内容未被后台线程修改
我想要实现的是在内存中保留消息队列的副本,并使用此消息队列为我的 ListView 填充 BaseAdapter。我这样做的原因是,即使 ListView 当前不存在(例如聊天窗口),消息队列也会继续从套接字获取消息。
当我的 Activity 和 ListView 在前台,BaseAdapter 绑定到消息队列的数据时,问题就来了,并且消息来了在插座中。将新消息添加到队列中会抛出上述异常。除非我用消息队列预先填充我的 BaseAdapter(就像在 BaseAdapter 中拥有自己的消息队列一样)并在有新消息进入时更新它们,否则我真的找不到解决办法这个问题。
我真的不想像这样加倍努力保持这 2 个队列是最新的,肯定有更好的方法吗?发送广播也不起作用,因为适配器服务滚动和 notifyDataSetChanged 调用的潜在延迟。
【问题讨论】:
-
您真正使用的是什么适配器?您确实意识到 BaseAdapter 是抽象的吧?另外,你有什么例外?你没有提到它。
-
嗨,目前我只是通过扩展 BaseAdapter 创建自己的类,实现方法 getCount()、getItem()、getItemId() 和 getView();例外情况是上面提到的:“确保您的适配器的内容不是从后台线程修改的”。由尝试从非 ui 线程(在本例中为保存消息队列的控制器类)更新适配器的数据集引起。我正在尝试找到一种方法来更新我的消息队列以及 Activity(如果它在前台)。
标签: android listview android-activity