最近遇到了RecyclerView 在执行notifyDataSetChanged操作时会出现闪屏,图片刷新,然后根据网上资料提示使用 修改动画,设置动画时间
recyclerView.getItemAnimator().setAddDuration(0);
recyclerView.getItemAnimator().setChangeDuration(0);
recyclerView.getItemAnimator().setMoveDuration(0);
recyclerView.getItemAnimator().setRemoveDuration(0);
recyclerView.getItemAnimator().setSupportsChangeAnimations(false);
以上方法均无效果。
后查找原因:原来notifyDataSetChanged 刷新时,图片会重新加载,刷新操作时图片会线变为占位图,然后再重新加载。
解决办法:在图片控件第一次设置图片时,给控件设置tag,下一次加载时,先判断tag是否存在,存在的话就不重新加载。
eg:
public void onBindViewHolder(RackHolder holder, int position) {
String imgPath="/test.png";
String tag= (String) holder.img.getTag();
if (!uri.eques(tag)){
holder.img.setTag(imgPath);
//设置图片
}
}
-03-23更新:
还有一种情况:当我们使用瀑布流效果时,通常一个页面展示的item超过5个,而recycler默认存储的数量为5个,当大于5个时,执行notifyDataSetChanged 会导致页面刷新,因为此时执行onCreateViewHolder 方法,所以当数量大于5个时,建议使用notifyItemInserted 和notifyItemRangeChange 来更新页面。(并且包含settag)
参考资料:/issingleman/article/details/52717652