setChecked方法触发onCheckedChanged问题

2017-06-19  本文已影响610人  灰灰手记

有时需要在初始化程序时,需要初始化有Switch、CheckBox、ToggleButton等控件的初始状态。此时会发现,当我setChecked时也会触发onCheckedChanged监听器,导致这部分代码被调用两次。

解决方法

区分人为点击和setChecked,在监听器中加入一个判断,是否按下:

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    //判断是不是点击触发的,否则当我setChecked()时会触发此listener
    if(!buttonView.isPressed())
        return; 
    
    //其他响应代码省略
}

但在使用 setChecked 初始化时发现,当setChecked(true)时才会触发onCheckedChanged,而 setChecked(false) 不会触发。
如果此时有控件与之相关联,那么关联控件的初始化时,就没那么完全指望onCheckedChanged了。

解决方法:

得到default值之后,先设置 !default,再设置 default,前提是先得像上面那样添加 isPressed 判断。

boolean isChecked = getDefaultChecked();
xxx.setChecked(!isChecked);
xxx.setChecked(isChecked);
上一篇下一篇

猜你喜欢

热点阅读