我正在尝试直接更改数据源并通知适配器任何更改。但是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();
}
答案 0 :(得分:1)
pgs
和temppgs
是相同的ArrayList
对象:
List<String> tmppgs = pgs;
因此,当您致电pgs.clear()
时,您正在清空该列表。 pgs.addAll(tmppgs)
将无效,因为您正在尝试将空列表的内容添加到自身。
目前还不清楚为什么你首先要做clear()
和addAll()
。如果您的目标是结束通过set()
调用修改的列表...您已经通过set()
调用修改了该列表。只需注释掉clear()
和addAll()
行(并最终删除tmppgs
,因为您不再需要它。)
答案 1 :(得分:0)
您可以更改
List<String> tmppgs = pgs;
到
List<String> tmppgs = myClass.getPgs();;
适合你。