RecycleView中使用RadioButton和CheckBox刷新报错

今天在做但单选列表时使用了RadioButton,就在最后快好了的时候出现报错!!!

IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling

就是它

百度看了一下,有人说:

@川峰
因为RecyclerView在计算layout的时候不允许你更新Adapter内容


@川峰
解决方法比较简单,既然RecyclerView已经给了判断方法了,那我们在onCheckedChanged方法中直接调用isComputingLayout()判断一下就可以了,如果该方法返回为true我们需要进行延时处理这里我直接调用RecyclerView对象的post方法或者你用Handler处理也可以。


ssnu 2021.09.14
个人认为问题根源在于只要有item处于checked状态setOnCheckedChangeListener里面的方法就会被循环调用,导至报错。用setOnClickListener可以节约资源。


养生程序yuan 2021.07.09
我的解决方案是Checkbox改为用onclicklistener,可以

当他们都提出是setOnCheckedChangeListener回调状态导致进入循环无限刷新时,我想到了我认为最佳的办法,解决办法如下:

RadioButton mRbButton = holder.getView(R.id.mRbButton);
            mRbButton.setText(str);
            mRbButton.setTextColor(Color.WHITE);
            mRbButton.setChecked(selectIndex == position);
            mRbButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (!buttonView.isPressed()) {
                        return;
                    }
                    int oldIndex = selectIndex;
                    selectIndex = position;
                    notifyItemChanged(oldIndex);
                    notifyItemChanged(position);
                }
            });

看出什么区别了吗?

我在 onCheckedChanged(CompoundButton buttonView, boolean isChecked) 回调下加了

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  
  if (!buttonView.isPressed()) {
       return;
  }
   /**----**/             
 }

没错就是 buttonView.isPressed() 这样就判断是主动触发状态切换还是被动触发,完美解决onCheckedChanged无限回调问题

当然RadioButton状态切换报错也没有啦

有更好的办法或者疑问可以在下方留言

欢迎收藏 Felix的Android笔记

持续更新

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Felix_Fly2021

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值