2011-04-05 78 views
0

首先,我浏览了网站,找不到解决我的问题,除了“隐藏ListView”。对我来说这不是一个可行的解决方案!Android ListView/Adaptor - 更新ArrayList时出现IllegalStateException

那么,问题: 我已经创建了自己的“EndlessAdapter”,让我来填充的ArrayList <>更多的数据当用户滚动到列表的底部支持ListView控件。除了当用户在列表更新时选择一个行,或者在列表正在更新时(我认为它可能是任何UI交互)更改方向时,这一切都完美运行。

我已经在try catch中包装了我的mAdapter.notifyDatasetChanged()方法,但我似乎无法捕获此IllegalStateException,因此我不知道它在哪里发生!

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

我真的需要解决这个问题。 Id而不是张贴源代码,但如果需要的话,我可以尝试和张贴生命体征?否则,我会非常感激,如果有经验的人可以通过电子邮件或即时通讯聊天?

这里是堆栈跟踪:

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线程上的所有运行)

感谢您的时间

亚当

+0

只是一个想法 - 你如何访问'onListItemClicked()'中的数据?我想你应该通过调用'getListView()。getItemAtPosition(position)'来访问相关的项目,以避免并发问题。另外,如果您通过电子邮件或即时消息发现解决方案,您是否会将其发布到此处,以便其他人可以参考它? – 2011-04-05 20:56:38

+0

另外,如果不是代码,发布堆栈跟踪可能会有所帮助。 – 2011-04-05 20:58:02

回答

1

你这样做既正如它所说的,在UI线程中添加列表和通知?这是保证列表不会同时被UI和其他线程使用的唯一方法。

+0

是的,我正在确保正在发生。我会试着去掉我的私人密码,然后加入准系统,这样你就可以看到我的流量 – Mimminito 2011-04-06 09:42:22

相关问题