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

列表页面的刷新经常会尝试去对某一个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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于RecyclerView闪动问题,有几种可能的原因和解决方法。以下是一些常见的解决方案: 1. 检查数据更新方式:确保在更新RecyclerView,使用合适的方法来通知适配器数据集的更改。可以使用`notifyDataSetChanged()`方法或更精细的方法,如`notifyItemInserted()`和`notifyItemRemoved()`,以避免不必要的闪烁。 2. 避免在布局文件中使用`wrap_content`:为了优化RecyclerView的性能,尽量避免在布局文件中使用`wrap_content`属性。这可能导致RecyclerView的大小在每次数据更新重新计算,从而引起闪烁。相反,尝试使用固定的尺寸或`match_parent`属性。 3. 使用合适的布局管理器:选择合适的布局管理器可以改善RecyclerView的性能。例如,如果您的列表是垂直滚动的,可以使用LinearLayoutManager或GridLayoutManager。如果需要水平滚动,可以使用LinearLayoutManager并设置`Orientation`参数为`HORIZONTAL`。 4. 使用ViewHolder模式:确保您在适配器中正确实现了ViewHolder模式。ViewHolder模式可以重用已经创建的视图,减少内存消耗和滚动的闪烁问题。 5. 优化列表项布局:如果您的列表项布局过于复杂或包含大量嵌套的视图层次结构,可能导致滚动的性能问题。尽量优化列表项布局,减少不必要的视图嵌套和复杂度。 希望这些解决方案对您有帮助!如果您有其他问题,请随提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值