LRecyclerView框架 notifyDataSetChanged 图片闪烁的问题

本文介绍了一叶飘舟的LRecyclerView在使用过程中遇到的图片闪烁问题及其解决方法。通过设置ViewHolder的Tag保存图片URL,并调整LRecyclerViewAdapter及Data Adapter的setHasStableIds属性为true。同时,对getItemId方法进行了特殊处理,确保了图片加载稳定,避免闪烁现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用一叶飘舟的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;

问题就解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值