最近遇到了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="www.baidu.com/test.png";

String tag= (String) holder.img.getTag();

if (!uri.eques(tag)){

holder.img.setTag(imgPath);

//设置图片

}

}

2017-03-23更新:

还有一种情况:当我们使用瀑布流效果时,通常一个页面展示的item超过5个,而recycler默认存储的数量为5个,当大于5个时,执行notifyDataSetChanged 会导致页面刷新,因为此时执行onCreateViewHolder 方法,所以当数量大于5个时,建议使用notifyItemInserted 和notifyItemRangeChange 来更新页面。(并且包含settag)

参考资料:http://blog.csdn.net/issingleman/article/details/52717652

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐