美文网首页
Android switchButton当代码setCheck时

Android switchButton当代码setCheck时

作者: Yang_Bob | 来源:发表于2016-10-27 18:31 被阅读296次

    有一种场景,在某一activity中有一个switchButton,进入该页面时通过保存的boolean值通过setCheck(boolean)控制switchButton开启还是关闭,而该switchButton也注册了OnCheckedChangeListener事件,并在里面做相应的操作。
    这时候如果一进来通过setCheck(boolean)控制switchButton开启还是关闭时,会进入到onCheckedChanged(),而这不是我们想要的结果,我们想要的是通过手动点击/滑动switchButton,进入onCheckedChanged()方法,而setCheck(boolean)不进入,关于该问题,网上解决办法有三种:

    第一种:
    设置booleanignoreChange=true;若果是setCheck(boolean)方法,设置booleanignoreChange=true,不然设置booleanignoreChange=false;但实际调测过程中发现onCheckedChanged有时会被调用多次,导致不是每次操作都符合预期;之后找到另一种方案是onCheckedChanged中调用switch.isPressed方法,如果为true,则处理,否则当做程序处理。但当滑动打开关闭switch时不起作用。该方案应该在Radiogroup和checkbox控件有作用(未测试过)。

    第二种
    不注册OnCheckedChangeListener,改注册OnClickListener()

    这个方法一开始可行,不行的地方是switchButton滑动的时候监听不到,pass

    第三种
    最终找到的解决方案是在代码调用setchecked之前unregister listener,调用完之后register listener,最后成功解决该问题。部分代码如下:

    @Override
    
    publicvoidonCheckedChanged(CompoundButton buttonView,booleanisChecked)
    
    {
    
                Intent toCreateGesturePwd =newIntent(this,
    
                 CreateGesturePasswrodActivity.class);
    
                 startActivity(toCreateGesturePwd);
    
    }
    
    @OverrideprotectedvoidonResume()
    
                {super.onResume();
    
                //反注册
    
                mGesturePwdSwitch.setOnCheckedChangeListener(null);
    
               if(isShowGesturePwd)
    
               {
    
                  mGesturePwdSwitch.setChecked(true);
    
                 }
    
                else
    
                {
    
                 mGesturePwdSwitch.setChecked(false);
    
                 }
    
              //注册回调
    
                mGesturePwdSwitch.setOnCheckedChangeListener(this);
    
               }
    

    相关文章

      网友评论

          本文标题:Android switchButton当代码setCheck时

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