1.解决办法
使用 notifyItemRangeChanged(int positionStart, int itemCount) 方法替换 notifyDataSetChanged();
HomeAdapter适配中的部分代码,如下:
public void appendData(List dataSet) {
int positon = this.listData.size();
if (dataSet != null && !dataSet.isEmpty()) {
this.listData.addAll(dataSet);
// notifyDataSetChanged();
/**
* 解决recyclerview刷新数据导致的闪屏
* 用notifyItemRangeChanged方法替换notifyDataSetChanged
*/
notifyItemRangeChanged(positon, dataSet.size());
}
}
2.适配器HomeAdapter中:glide加载图片的时候,setTag
/**
* 解决滑动recyclerview导致glide图片加载闪烁
* 1.利用setTag
* 2.Glide设置skipMemoryCache(true),跳过缓存
*/
if (!bean.getImage().equals(articleViewHolder.iv.getTag(R.id.iv_hot))) {
// 加载图片
Glide.with(activity).load(bean.getImage()).skipMemoryCache(true)
// .apply(options)
.into(articleViewHolder.iv);
articleViewHolder.iv.setTag(R.id.iv_hot, bean.getImage());
}
只要设置为false,就可以不显示动画了,也就解决了闪烁问题。
代码其实就一句话。
((SimpleItemAnimator)recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);