我试图直接对数据源进行更改,并将任何更改通知适配器。但是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();
}

最佳答案

pgstemppgs是相同的ArrayList对象:

List<String> tmppgs = pgs;


因此,当您调用pgs.clear()时,您将清空该列表。 pgs.addAll(tmppgs)无效,因为您正在尝试将一个空列表的内容添加到自身中。

目前尚不清楚为什么要首先执行clear()addAll()。如果您的目标是通过set()调用修改列表,那么您已经在通过set()调用修改列表了。只需注释掉clear()addAll()行(并最终摆脱tmppgs,因为您不再需要它)。

08-18 16:29