美文网首页Android进阶小功能
RecyclerView刷新时候的图片闪烁

RecyclerView刷新时候的图片闪烁

作者: 因为我的心 | 来源:发表于2020-07-10 11:51 被阅读0次

一、前言:

1、RecyclerView的adapter在刷新上方法:

  • notifyItemChanged(int position)
    \color{red}{更新列表position位置上的数据}
  • notifyItemInserted(int position)
    \color{red}{列表position位置添加一条数据,有动画效果}
  • notifyItemRemoved(int position)
    \color{red}{列表position位置移除一条数据,有动画效果}
  • notifyItemMoved(int from,int to)
    \color{red}{列表from位置的数据移动到to位置}
  • notifyItemRangeChanged(int start,int count)
    \color{red}{列表从start开始,count个数数据进行刷新}
  • notifyItemRangeInserted(int start,int count)
    \color{red}{列表从start开始,添加数量count个数据,有动画效果}
  • notifyItemRangeRemoved(int start,int count)
    \color{red}{列表从start开始,移除数量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.最后解决:

  1. recyclerView调用方法取消动画效果
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
  1. 刷新列表使用
//进行全部刷新
adapter.notifyItemRangeChanged(0,list.size()) 

相关文章

网友评论

    本文标题:RecyclerView刷新时候的图片闪烁

    本文链接:https://www.haomeiwen.com/subject/fuwpcktx.html