美文网首页
setChecked方法触发onCheckedChanged问题

setChecked方法触发onCheckedChanged问题

作者: 灰灰手记 | 来源:发表于2017-06-19 16:28 被阅读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);
    

    相关文章

      网友评论

          本文标题:setChecked方法触发onCheckedChanged问题

          本文链接:https://www.haomeiwen.com/subject/gqzgqxtx.html