Android ListView / Adapter - 更新ArrayList时出现IllegalStateException

时间:2011-04-05 20:06:42

标签: android exception listview arraylist illegalstateexception

首先,我查看了网站,除了“隐藏ListView”之外,找不到我的问题的解决方案。在我的情况下,这不是一个可行的解决方案!

所以,问题是: 我创建了自己的“EndlessAdapter”,它允许我填充ArrayList<>当用户滚动到List的底部时,使用更多数据支持ListView。这一切都完美无缺,除非用户在List更新时选择Row,或者在List更新时更改方向(我想它可能是任何UI交互)。

我在try catch中包装了我的mAdapter.notifyDatasetChanged()方法,但我似乎永远无法捕获这个IllegalStateException,所以我不知道它在哪里发生!

有没有办法,当适配器更新ListView时,我可以阻止用户与应用程序交互直到完成? EndlessAdapter进程的很长一部分是下载新数据。更新ListView是一个快速的过程imo。

我真的需要对此问题进行排序。我宁愿不发布源代码,但如果需要,我可以尝试发布生命周期?否则,如果有经验的人可以通过电子邮件或IM聊天,我将非常感激。

这是堆栈跟踪:

04-05 21:11:35.363: ERROR/AndroidRuntime(25707): 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(16908298, class android.widget.ListView) with Adapter(class com.mimminito.heatdroid.view.DealsView$DealAdapter)

以下是我的代码示例的链接: http://pastebin.com/wfmWSGwQ

我在onCreate()中创建了适配器。然后,一旦解析了XML,我就将Adapter分配给ListView。在同一个方法中,我调用updateList()方法。这将获取已下载的数据,然后通知mAdapter其数据已更改(全部在UI线程上运行)

感谢您的时间

亚当

1 个答案:

答案 0 :(得分:1)

你正在进行添加到列表和UI线程中的通知吗?这是保证UI和其他线程不会同时使用该列表的唯一方法。