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: 功能未知...