列表<string> addAll()方法不添加

时间:2016-04-09 20:42:56

标签: java android arrays string android-recyclerview

我正在尝试直接更改数据源并通知适配器任何更改。但是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();
}

2 个答案:

答案 0 :(得分:1)

pgstemppgs是相同的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();;

适合你。