在RecyclerView的适配器中向List <string>添加项目时出现ConcurrentModificationException

时间:2017-09-13 14:27:23

标签: android pagination android-recyclerview recycler-adapter concurrentmodification

我在RecyclerView中实施分页,所以在每次&#39;之后n&#39; items,onScroll()调用抽象loadMore(),它在MainActivity中的匿名类中实现,如下所示。 然后loadMore()调用我的AsyncTaskLoader来加载项目。 LoaderManager.LoaderCallBacks在MainActivity上设置。 然后在onLoadFinished()中,我调用了adapter.addItems(List newItems),但是在这个方法中抛出了CME。

这是MainActivity

public class MainActivity ... implements LM.LC{

    //this gets initiliase in onCreate() - activity = this;
    MainActivity activity;

    //RecyclerView's adapter
    CustomAdapter adapter;

    ...
    someMethod() {
        ...
        adapter.addOnScrollListener(new ScrolListener() {
            ...
            @Override
             loadMore() {
                 ...
                 loaderManager.restartLoader(id,null,activity);
             }
        });
    }

    @Override
    public Loader onCreateLoader() {

       return new DataLoader(params);
    }

    @Override
    public void onLoadFinished(params) {

        adapter.addItems(List<String> someData);
    }
}

这是CustomAdapter

public class CustomAdapter ... {

    /*this is list in which data is to be added and
    onBindViewHolder() populates view's data from it
    */
    List<String> data;

    ...

    addItems(List<String> someData) {
        //first I tried this
        data.addAll(someData);

        //then even I tried this
        ListIterator<String> it = data.listIterator();

        for(Iterator<String> it1 = someData.listItertor();
              it1.hasNext(); ) {
            it.add(it1.next());
        }

        notifyItem...();


    }

}

这是我的DataLoader

class DataLoader extends AsyncTaskLoader {

    ...

    DataLoader(someParams) {
        ...
        //some initialization
        ...
    }

    ...loadInBackground() { ... }
}

但这两种方法都会引发CME。

我在网上搜索但找不到任何有用的信息。

0 个答案:

没有答案