0

首先,我环顾了整个网站,除了“隐藏 ListView”之外,找不到我的问题的解决方案。就我而言,这不是一个可行的解决方案!

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

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

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

我真的需要解决这个问题。我宁愿不发布源代码,但如果需要,我可以尝试发布生命体征?否则,如果有这方面经验的人可以通过电子邮件或 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 后,我将适配器分配给 ListView。在同一个方法中,我调用了 updateList() 方法。这会获取已经下载的数据,然后通知mAdapter它的数据已经改变(全部运行在UI线程上)

谢谢你的时间

亚当

4

1 回答 1

1

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

于 2011-04-05T22:06:53.890 回答