Android 不添加\删除元素的列表的ListView IllegalStateException

Android 不添加\删除元素的列表的ListView IllegalStateException,android,android-listview,listadapter,Android,Android Listview,Listadapter,与其他许多人一样,我在使用ListView时遇到了非法状态异常:( java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。请确保适配器的内容未从后台线程修改,而仅从UI线程修改 我知道基本的解释-我可能正试图从后台线程修改列表。在反复研究我的代码后,我找不到一个地方可以这样做。我没有从列表中添加\删除元素-它是静态的,并且不会随着创建而更改。 我所做的只是从工作线程修改列表元素的内部数据,但我不确定这是否是我的问题。 所以-这是我的问题

与其他许多人一样,我在使用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
on
UI-thread
在该方法中更新适配器的私有列表并调用
notifyDataSetChanged