封装了一个显示列表数据的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();
}