Adapter刷新时,列表中ImageView闪烁

应用场景:图片列表,数据发生改变调用 adapter.notifyDataSetChanged()时,图片重新加载导致闪烁抖动。

原因:notifyDataSetChanged()会重新加载数据

解决方案:图片地址未发生改变时,不需要重新加载,通过设置setTag()的方式判断数据是否发生改变,从而决定是否重新记载,不重新加载就不会发生闪烁

eg:
未处理前

 Item item = list.get(position);
 ImageLoader.display(item.getImage(), holder.image);

处理后

Item item = list.get(position);
if(!item.getImage().equals(holder.image.getTag())){
     ImageLoader.display(item.getImage(), holder.image);
     holder.image.setTag(item.getImage());
}

But……………然并卵

listView滑动时因为Holder的重用(没有使用相同的ViewHolder)导致图片显示错误
解决办法:
使用RecycleView
使用RecycleView的notifyItemRangeChanged(int positionStart, int itemCount)局部刷新取代notifyDataSetChanged(),同时设置((SimpleItemAnimator)recycleView.getItemAnimator()).setSupportsChangeAnimations(false);取消动画效果

你可能感兴趣的:(ListView)