与其他许多人一样,使用ListView时我收到了IllegalStateException :(
java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。确保未从后台线程修改适配器的内容,但仅限于UI线程
我知道基本的解释 - 我可能正在尝试从后台线程修改列表。在一遍又一遍地探索我的代码之后,我找不到一个我实际上在做的地方。我没有添加\从列表中删除元素 - 它是静态的,并且不会从创建中更改。 我所做的只是修改工作线程中列表元素的内部数据 - 但我不确定它是否真的是我的问题。 所以 - 这是我的问题 - 是否允许从后台线程修改列表元素的下层数据,只要我不通过添加\ remove元素来修改列表本身?
更新 嗯,我想你是对的,所以这里有一个伪代码:
//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???
答案 0 :(得分:2)
I AM doing is only modifying the internal data of the list's elements from a worker thread
它与您在Adapter
中设置的静态列表相同吗?
然后你无法从Background Thread
更改它们。如果您更改了它们,请务必致电notifyDataSetChanged
。