java.lang.IllegalStateException:适配器的内容已更改,但 ListView 没有收到通知。确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。
我的列表视图包含大量数据
当列表中的数据发生更改时,我正在使用处理程序调用波纹管代码
listviewAdapter.notifyDataSetChanged();
但我有时会遇到同样的错误,而不是每次我加载它都提前谢谢
java.lang.IllegalStateException:适配器的内容已更改,但 ListView 没有收到通知。确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。
我的列表视图包含大量数据
当列表中的数据发生更改时,我正在使用处理程序调用波纹管代码
listviewAdapter.notifyDataSetChanged();
但我有时会遇到同样的错误,而不是每次我加载它都提前谢谢
问题不在于适配器在哪里更新,而应该是:适配器更新的时间。
它看起来像:您绑定到适配器的数据已更改,并且 ui 已更新,所以这一次,系统发现数据已更改但无法调用notifyDataSetChanged
.
所以,建议当您更改适配器的数据时,notifyDataSetChanged
立即调用,
或者
不要在你的线程中直接更改适配器的数据,你应该将数据发送到hanlder
,并在handler
使用数据替换或更改适配器的数据和notifyDataSetChanged
。
所以无论如何,建议获取数据可以在后台线程中运行,并更新数据,notifyDataSetChanged
用于ui线程。
错误很明显。您不必 listviewAdapter.notifyDataSetChanged();
从不同于 UI 线程的线程调用。
在 runOnUIThread() 中修改适配器的参数或使用处理程序通知适配器数据集已更改。