我试图直接对数据源进行更改,并将任何更改通知适配器。但是addAll()不会更新我的列表。在我的代码中似乎一切正常,但在运行期间却没有。请帮助我更正代码。先感谢您。
List<String> pgs = myClass.getPgs();
List<String> tmppgs = pgs;
/*
.
lots of code for string processing which results in >> String content for each i
.
*/
for (int i = 0; i < tmppgs.size(); i++) {
tmppgs.set(i, content);
}
Toast.makeText(getActivity(),String.valueOf(tmppgs.size()), Toast.LENGTH_LONG).show();
// Toast shows desired result which is OK.
pgs.clear();
pgs.addAll(tmppgs);
Toast.makeText(getActivity(),String.valueOf(pgs.size()), Toast.LENGTH_LONG).show();
//Unexpectedly shows zero
mAdapter.notifyDataSetChanged();
}
最佳答案
pgs
和temppgs
是相同的ArrayList
对象:
List<String> tmppgs = pgs;
因此,当您调用
pgs.clear()
时,您将清空该列表。 pgs.addAll(tmppgs)
无效,因为您正在尝试将一个空列表的内容添加到自身中。目前尚不清楚为什么要首先执行
clear()
和addAll()
。如果您的目标是通过set()
调用修改列表,那么您已经在通过set()
调用修改列表了。只需注释掉clear()
和addAll()
行(并最终摆脱tmppgs
,因为您不再需要它)。