一、前言:
1、RecyclerView的adapter在刷新上方法:
- notifyItemChanged(int position)
- notifyItemInserted(int position)
- notifyItemRemoved(int position)
- notifyItemMoved(int from,int to)
- notifyItemRangeChanged(int start,int count)
- notifyItemRangeInserted(int start,int count)
- notifyItemRangeRemoved(int start,int count)
二、解决:
1. 问题:recyclerView使用notifyDataSetChanged()刷新时出现图片闪烁?
原因: notifyDataSetChanged()会导致整个itemView刷新,已经测试:相同position刷新其itemView是不同的对象。
例如,刷新后,position为12的用了position为13的itemView,再次刷新时,又用了position为10的itemView,这样每次position上对应的itemview的imageView就会在重设size时发生闪烁
2.解决思路:
用notifyItemRangeInserted()进行增加数据使用的局部刷新,这样原先的itemView就不会重绘
或者用notifyItemRangeChanged()进行单纯的局部刷新。
注意 : 虽然方法是用来局部刷新的,但我们可以把局部刷新变成全部刷新,itemcount设置成list.size()就可以实现不闪烁的全部。
刷新了,但最好加上一句
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
这句话会取消recyclerview的动画效果,不然刷新的话的确不会快闪但会有个动画效果,体验也是不好的。
3.最后解决:
- recyclerView调用方法取消动画效果
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
- 刷新列表使用
//进行全部刷新
adapter.notifyItemRangeChanged(0,list.size())
网友评论