在使用一叶飘舟的LRecyclerView时 由于该框架使用了观察者模式来处理headerView和footView,因此不能用普通的方法来解决notifyDataSetChanged后图片闪烁的问题
研究了一下解决步骤如下:
解决原理仍旧是使用tag的方式保存信息
在adapter里给viewholder设置tag的方式保存图片url
viewHolder.mPreview.setTag(item.getScaledUrl());
由于LRecyclerView使用了观察者模式,因此仅仅将mDataAdapter设置setHasStableIds为true是不够的,需要同时将mLRecyclerViewAdapter也设置setHasStableIds为true
mDataAdapter.setHasStableIds(true);
mLRecyclerViewAdapter.setHasStableIds(true);
注意:
mLRecyclerViewAdapter.setHasStableIds(true);
需要在
mRecyclerView.setAdapter(mLRecyclerViewAdapter);
前面设置,否则会报错
最后在adapter中重写了getItemId方法
@Override
public long getItemId(int position) {
return position;
}
但是发现报Called attach on a child which is not detached错误
跟踪了下源码发现是由于LRecyclerViewAdapter有一个ArrowRefreshHeader所以导致itemid多了一位
因此将getitemid()方法返回值更改为
return position - 1;
问题就解决了
本文介绍了一叶飘舟的LRecyclerView在使用过程中遇到的图片闪烁问题及其解决方法。通过设置ViewHolder的Tag保存图片URL,并调整LRecyclerViewAdapter及Data Adapter的setHasStableIds属性为true。同时,对getItemId方法进行了特殊处理,确保了图片加载稳定,避免闪烁现象。
6279

被折叠的 条评论
为什么被折叠?



