2

和其他许多人一样,我在使用 ListView 时遇到 IllegalStateException :(

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???
4

1 回答 1

2

I AM doing is only modifying the internal data of the list's elements from a worker thread

它与您设置的静态列表相同Adapter吗?

然后你不能改变它们Background Thread。如果您更改它们,请确保您致电notifyDataSetChanged.

于 2012-10-15T19:29:30.290 回答