Android 列表视图java.lang.IllegalStateException,即使在调用notifyDataSetCanged()之后;

Android 列表视图java.lang.IllegalStateException,即使在调用notifyDataSetCanged()之后;,android,listview,android-listview,illegalstateexception,Android,Listview,Android Listview,Illegalstateexception,java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。确保适配器的内容不是从后台线程修改的,而是仅从UI线程修改的 我的列表视图包含大量数据 当列表中的数据发生更改时,我使用处理程序调用下面的代码 listviewAdapter.notifyDataSetChanged(); 但我有时会遇到同样的错误,而不是每次加载它时 提前感谢错误很明显。您不必调用listviewAdapter.notifyDataSetChanged()。在

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

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

当列表中的数据发生更改时,我使用处理程序调用下面的代码

  listviewAdapter.notifyDataSetChanged();
但我有时会遇到同样的错误,而不是每次加载它时
提前感谢

错误很明显。您不必调用
listviewAdapter.notifyDataSetChanged()

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

问题不是适配器更新的位置,而是:适配器更新的时间

看起来是这样的:您与适配器的数据绑定已更改,并且ui已更新,因此这次,系统发现数据已更改,但无法调用
notifyDataSetChanged

因此,建议在更改适配器的数据时,立即调用
notifyDataSetChanged

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


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

添加到它,您可以调用
listviewAdapter.notifyDataSetChanged()runOnUiThread()
从非UI线程执行code>适配器的内容已更改,但ListView未收到通知。确保适配器的内容不是从后台线程(粗体
修改的,而是从UI线程修改的,我们应该只从UI线程修改。。仅从UI线程更改am不从后台线程更改适配器数据。。此外,当提供给适配器的列表内容发生更改时,我会调用notifyDataSetChanged。。只有当大量数据(如超过500个数据)加载到列表中时,我才会出现此错误。因此,您能否描述一下如何在短时间内更新适配器的数据?我会在后台线程中更改列表,而该列表最初会提供给适配器。。更改后,我调用处理程序i cal NOTIFYDATASETCHENGED()中的处理程序(UI线程)。。这正是我所做的,但当存在大量数据
s时,我会出现此异常,但我不会在小的情况下(最多300个列表项)出现此错误数据量
s我称之为notifyDataSetCahnged,用于用新的或更新的数据刷新我的列表
我在后台线程中更改列表,该线程最初会提供给适配器
,如果您只是更新列表的数据,可能没问题,但是如果更改列表的大小,例如添加一些项目,在很短的时间内,它会出现一些问题,因此,当您想更改列表的大小时,能否将新数据发送到
handler
,并在
handler
中更新?否,我没有向列表中添加项目,但我通过一些修改更改了数据。我使用的处理程序用于通知,请参见回答3中的以下注释