RecyclerView 局部刷新 item 闪动问题解决

本文介绍了一种解决RecyclerView在局部刷新时item闪动问题的方法,通过使用notifyItemChanged(int position, Object payload)及重写onBindViewHolder实现平滑刷新,避免了视觉上的不适感,提升了用户体验。

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

列表页面的刷新经常会尝试去对某一个position的item做刷新处理,这时如果调用adapter的notifyItemChanged(int position)的方法,对应positon的item会闪动一下,体验不友好。经多番网上查阅资料后找到了比较可靠的解决方案。
局部刷新调用adapter的notifyItemChanged(int position, Object payload)的方法。然后对应的adapter 重写onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads)。
#以下为示例代码:

1.adapter代码

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List<Object> payloads){
    if (payloads.isEmpty()) {
        onBindViewHolder(holder, position);
    } else {
        onBindItemHolder(holder, position);
    }
}

private void onBindItemHolder(RecyclerView.ViewHolder holder, int position) {
    int viewType = getItemViewType(position);
    if (viewType == 0) {
        ((IndividualInfoViewHolder) holder).bindSomeData(mFunctionEntities.get(position));
    }
}

2.ViewHolder(IndividualInfoViewHolder)代码

public void bindSomeData(MineFunctionEntity dataModel) {
    RoundedImageView rivAvatar = itemView.findViewById(R.id.riv_avatar);
    String imgurl = dataModel.getExtra();
    if (!TextUtils.isEmpty(imgurl) && !imgurl.contains("http")) {
        imgurl = Constant.IMG_HOST + imgurl;
    }
    GlideUtils.loadImageAsBitmap2(mContext, imgurl, rivAvatar);
    TextView tvNickName = itemView.findViewById(R.id.tv_nickname);
    tvNickName.setText(dataModel.getName());
}

如此便可以解决__局部刷新item闪动__的问题,同时可以有选择地更新item中某一个控件的内容。
出现该问题并不是有些开发者提到的诸如“recyclerView刷新时自带动画”、“图片库默认加载图片的动画”等等问题。
参考文章:
https://wetest.qq.com/lab/view/176.html?from=adsout_qqtips_past2&sessionUserType=BFT.PARAMS.201129.TASKID&ADUIN=1217543868&ADSESSION=1477044282&ADTAG=CLIENT.QQ.5503_.0&ADPUBNO=26638

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值