相关问题如下:
问题代码如下:
WorkAchievementAdapter adapter = new WorkAchievementAdapter(item.getWorkResultsPic(), mContext);
RecyclerView rvWorkAchievement = helper.getView(R.id.rv_work_achievement);
rvWorkAchievement.setAdapter(adapter);
adapter.notifyDataSetChanged();
代码看着没什么问题,但是数据就是不刷新,即使调用了adapter.notifyDataSetChanged();也没有作用。
问题出现原因:
RecyclerView跟ListView不一样,当我们想要更新数据的时候,有两种情况:
dataList = createDataList(5); //这是错误的做法,dataList为初始传入的List
dataList.addAll(createDataList(5)); //这是正确的做法
我们想要更新数据的时候,请记住这句话
“whenever adding or removing elements, always make changes to the existing list”
也就是说,请在原数据集上更新你的数据,而不是用一个新的数据集替代,记得最后要 mAdapter.notifyDataSetChanged()一下哟。
结论: 改变数据源的时候,一定要改变adapter真正的数据源:
所以修改之后的代码如下:
WorkAchievementAdapter adapter = new WorkAchievementAdapter(item.getWorkResultsPic(), mContext);
RecyclerView rvWorkAchievement = helper.getView(R.id.rv_work_achievement);
rvWorkAchievement.setAdapter(adapter);
adapter.setNewData(item.getWorkResultsPic());
adapter.notifyDataSetChanged();
在设置adapter之后需要在原地址数据上更新数据。