Android RecycleView notifyItemChanged()刷新闪烁问题处理

 在RecycleView notifyItemChanged(position) 刷新得时候部分情况下会出现图片闪烁问题,导致此问题出现的原因有几种,项目中出现了这个问题再次记录下集中解决思路供大家梳理

 原因:
1.条件情况下执行了动画操作导致了刷新闪烁问题

2.图片重新加载导致了刷新问题

3:全局刷新导致Item数据重新填充刷新了Item

 解决方案:

1.关闭动画效果

//关闭动画效果
SimpleItemAnimator sa=(SimpleItemAnimator )recycleView.getItemAnimator();
sa.setSupportsChangeAnimations(false);
//设置动画为空
setItemAnimator(null)

2.设置setHasFixedSize(true) 让RecyclView 不走重绘逻辑


 

//设置为True 不走重绘逻辑

recycleView.setHasFixedSize(true)

 3.做单条局部刷新 不刷新不必要的数据(这个最好使用)


1.调用 notifyItemChanged() 传入payload 参数的时候执行局部刷新

mMediaAdapter.notifyItemChanged(position,  "1")

2.在Adapter中实现三个参数的 onBindViewHolder()方法,带有payloads

   @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List<Object> payloads) {
      //判断是做局部刷新还是单条刷新
        if (payloads != null && payloads.size() > 0 && "1".equals(payloads.get(0))) {
            Log.e("", "");
            MediaViewHolder mediaViewHolder = (MediaViewHolder) holder;
            int temType = getItemViewType(position);
            if (temType == MediaAdapter.TYPE_NORMAL) {
                Media mMedia = getItem(position);
                binding = (MediaImageItemBinding) mediaViewHolder.getBinding();
                //单选
                if (mOptions.singlePick || mOptions.isNeedCrop() || (mOptions.getSelectMode() == PickerConfig.PICKER_ONLY_ONE_TYPE && mMedia.mediaType == 3)) {
                    binding.checkImage.setVisibility(View.GONE);
                } else {
                    binding.checkImage.setVisibility(View.VISIBLE);
                    binding.checkImage.setImageDrawable(mMedia.isSelect() ? ContextCompat.getDrawable(mContext, R.drawable.iv_media_checked) : ContextCompat.getDrawable(mContext, R.drawable.xc_weixuan));
                }
            }
        } else {
//单挑刷新
            super.onBindViewHolder(holder, position, payloads);
        }
    }

总结:


刷新的闪烁问题导致原因很多,要具体问题具体分析,去除动画比较方便简单适合一部分需求,当去除动画以及设置不刷新还不生效的时候可以考虑单条局部刷新的逻辑

留个赞再走吧,点击有惊喜!!!

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值