Android 不添加\删除元素的列表的ListView IllegalStateException
与其他许多人一样,我在使用ListView时遇到了非法状态异常:( java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。请确保适配器的内容未从后台线程修改,而仅从UI线程修改 我知道基本的解释-我可能正试图从后台线程修改列表。在反复研究我的代码后,我找不到一个地方可以这样做。我没有从列表中添加\删除元素-它是静态的,并且不会随着创建而更改。 我所做的只是从工作线程修改列表元素的内部数据,但我不确定这是否是我的问题。 所以-这是我的问题-只要我不通过添加\删除元素来修改列表本身,是否允许从后台线程修改列表元素的底层数据 更新: 我想你是对的,下面是一个伪代码:Android 不添加\删除元素的列表的ListView IllegalStateException,android,android-listview,listadapter,Android,Android Listview,Listadapter,与其他许多人一样,我在使用ListView时遇到了非法状态异常:( java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。请确保适配器的内容未从后台线程修改,而仅从UI线程修改 我知道基本的解释-我可能正试图从后台线程修改列表。在反复研究我的代码后,我找不到一个地方可以这样做。我没有从列表中添加\删除元素-它是静态的,并且不会随着创建而更改。 我所做的只是从工作线程修改列表元素的内部数据,但我不确定这是否是我的问题。 所以-这是我的问题
//from main GUI thread.
ArrayList<People> namesList = // create and populate the list...
//lets assume that NamesArrayAdapter extends ArrayAdapter<People>
NamesArrayAdapter adapter = new NamesArrayAdapter(context, listViewResource, namesList); //instantiate the list adapter
//from backgroung thread
namesList.getItem(0).setName("et"); //Modifying existing element inside the list - is this ligal???
//来自主GUI线程。
ArrayList namesList=//创建并填充列表。。。
//假设NameArrayAdapter扩展了ArrayAdapter
NamesArrayAdapter=新的NamesArrayAdapter(上下文、listViewResource、namesList);//实例化列表适配器
//从背景螺纹
namesList.getItem(0.setName(“et”);//修改列表中的现有元素-这是ligal吗???
我所做的只是从工作线程修改列表元素的内部数据
它是否与您在适配器中设置的静态列表相同
那么您不能从后台线程更改它们。如果您更改它们,请确保调用notifyDataSetChanged
M Mohsin Naeem,谢谢您的回复。我需要从后台线程调用此方法吗?我应该在更新之前还是之后执行此操作?我的意思是,理论上,可能会有一个上下文xt在更新和调用notifyDataSetChanged之前切换。这不是一个问题吗?为避免任何混淆,请始终为适配器设置一个私有列表。完成更改后,请调用一个方法,例如..updateContent
onUI-thread
在该方法中更新适配器的私有列表并调用notifyDataSetChanged