RecyclerView添加数据时列表不刷新

311 阅读1分钟

封装了一个显示列表数据的Dialog,数据是动态刷新的。

rvMainContent.setLayoutManager(new LinearLayoutManager(mContext, RecyclerView.VERTICAL, false));
rvMainContent.setAdapter(new IBeaconAdapter(mList));
rvMainContent.addItemDecoration(new DividerItemDecoration(mContext, RecyclerView.VERTICAL));
srlMainRefresh.setColorSchemeResources(R.color.accent_color);
srlMainRefresh.setOnRefreshListener(() -> {
    mList.clear();
    rvMainContent.getAdapter().notifyDataSetChanged();
    srlMainRefresh.setRefreshing(false);
});

Activty中刷新数据时调用的代码如下:

public void refreshList(List<MinewBeacon> list){
    mList = list;//错误代码
    rvMainContent.getAdapter().notifyDataSetChanged();
}

通过打印日志看到数据确实是加进去mList里面了,但是列表显示上始终空空如也,甚至连Adapter中的onBindViewHolder方法都没执行,那问题到底出在哪里呢?

whenever adding or removing elements, always make changes to the existing list

这句话的意思是请在原数据集上更新你的数据,而不是用一个新的数据集替代,原因就在于此。所以列表数据添加时要用add()或者addAll()方法Adapter才能监听到数据的改变,而不是用=给原数组赋值,正确代码如下:

public void refreshList(List<MinewBeacon> list){
    mList.addAll(list);//正确代码
    rvMainContent.getAdapter().notifyDataSetChanged();
}