2

java.lang.IllegalStateException:适配器的内容已更改,但 ListView 没有收到通知。确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。

我的列表视图包含大量数据

当列表中的数据发生更改时,我正在使用处理程序调用波纹管代码

  listviewAdapter.notifyDataSetChanged();

但我有时会遇到同样的错误,而不是每次我加载它都提前谢谢

4

3 回答 3

2

问题不在于适配器在哪里更新,而应该是:适配器更新的时间

它看起来像:您绑定到适配器的数据已更改,并且 ui 已更新,所以这一次,系统发现数据已更改但无法调用notifyDataSetChanged.

所以,建议当您更改适配器的数据时,notifyDataSetChanged立即调用,

或者

不要在你的线程中直接更改适配器的数据,你应该将数据发送到hanlder,并在handler使用数据替换或更改适配器的数据和notifyDataSetChanged

所以无论如何,建议获取数据可以在后台线程中运行,并更新数据,notifyDataSetChanged用于ui线程。

于 2012-04-20T07:24:47.207 回答
0

错误很明显。您不必 listviewAdapter.notifyDataSetChanged();从不同于 UI 线程的线程调用。

于 2012-04-20T07:13:04.010 回答
0

在 runOnUIThread() 中修改适配器的参数或使用处理程序通知适配器数据集已更改。

于 2012-04-20T07:21:32.017 回答