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

最近在做一个项目的时候,是一个加上checkbox的recyclerview,然后选中状态或者取消时候有相应的效果产生,然后有button用于增加或者减少item的个数,然后发现点击过快或者有些时候会出现这样一个错误

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

表示不能在加载布局还未完成时候使用这个方法,定位在了这个方法上面

	public void setDefItem(int position){
		lightIndex = position;
		notifyDataSetChanged();
	}

,后来在网上查阅,说是在isComputingLayout()方法为true的时候就会抛出这个异常,然后判断这个方法的返回值如果是true就使用post去刷新这个界面

			if (recyclerView.isComputingLayout()) {
				recyclerView.post(new Runnable() {
					@Override
					public void run() {
						mAdapter.setDefItem(position);
					}
				});
			} else {
				mAdapter.setDefItem(position);
			}

参考链接http://www.manongjc.com/article/50422.html

但是后来仔细看我自己的代码发现之前在写这里的时候对checkbox的绑定时忘记对这个触发事件进行判断,所以在加载时候会不断地去刷新这个界面而且导致选中的框很容易出现错乱

holder.mCheckAble.setChecked(info.isChecked());
	holder.mCheckAble.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				
				mItemClick.checkedChange(position,isChecked);
				
			}
		});

因为setchecked()方法在每一次调用的时候都会去执行一次这个切换的点击事件,但是我真是想要的只是观察用户的点击切换,所以使用isPressed();方法去做一次判断,是否是用户点击的而不是setchecked()方法,

		holder.mCheckAble.setChecked(info.isChecked());
		holder.mCheckAble.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if(buttonView.isPressed()){
					mItemClick.checkedChange(position,isChecked);
				}
			}
		});

然后修改了这个地方之后我又去对post方法进行了log打印,发现这时已经不会在使用到post方法里面的刷新了,不过为了防止特殊情况的发生,这里还是对这个方法进行了保留

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值