recyclerview数据混乱和局部刷新的问题 - gmtalang/test GitHub Wiki
【解决方法】
-
首先,在绑定adapter给RecycleView之前,设定adapter的stableIds为true。
-
adapter.setHasStableIds(true);
-
recyclerView.setAdapter(adapter);
-
其次,在adapter中,需要重写getItemId方法。
-
@Override
-
public long getItemId(int position) {
-
return position;
-
}
-
之后重新运行app,发现问题完美解决了。
局部刷新的坑
- 实际上RecyclerView做局部刷新是非常容易的,其实就是使用好带payload参数的这个notifyItemRangeChanged方法,
- 以及override带payload的这个onBindViewHolder方法,在onBindViewHolder中去刷新你想更新的控件即可,
- 并非是网上传闻的那些原因,当然此处爬坑时间之长,也可能跟选用开源控件不当有关。
RecyclerView包含以下几个重要的组件:
- 1.LayoutManager: 测量和布局子View
- 2.Recycler: View的缓存、复用
- 3.ViewHolder: 对itemView及其元数据的封装
- 4.ItemAnimator: 动画
- 5.Adapter: 创建ViewHolder、绑定数据、通知数据变更
- 6.ItemDecoration: ItemView的装饰
- 7.SmoothScroller: 平滑滚动
- 8.ViewFlinger: 功能未知...