现象:
有一组RadioGroup,这一组RadioGroup中有两个RadioButton。当调用RadioButton的setChecked(true)
时候,有时候会触发两次以上的setOnCheckedChangeListener
的监听事件。触发后结果也会乱掉,比如想设置第二个RadioButton为选中状态,但是会出现一中情况,第二个选中了,然后又切回第一个选中了…
现有代码:
RadioButton btn = findViewById(R.id.rbn);
btn.setOnCheckedChangeListener((buttonView, isChecked) -> {
});
btn.setCheck(true);
解决办法,设置监听后不要立刻设置选择状态,延迟后再进行设置。具体时间可以多测试后进行调整
修改后逻辑:
RadioButton btn = findViewById(R.id.rbn);
btn.setOnCheckedChangeListener((buttonView, isChecked) -> {
// if(!buttonView.isPressed()){//判断是否由手动点击引起的事件
//}
});
getView().postDelayed(new Runnable() {
@Override
public void run() {
btn.setCheck(true);
}
},50);
猜测可能是监听没有设置完就进行状态设置引起的问题。
这个是TV 上的操作,版本上Anroid4.0上,其余环境可能没有这个现象