Android switch当代码setCheck时,不调用onCheckedChanged
2015-07-22 22:18
1456 查看
最近做项目需要使用switch控件去设置手势密码,当手动打开或者关闭switch控件时,会跳转到设置手势密码页面,并且设置成功后,会保存switch状态到文件中。每次进入手势密码页面,都去获取switch状态,然后通过setChecked设置switch状态。实际使用中发现当手动或者使用打开关闭switch时,都会进入onCheckedChanged回调方法。导致一直进入设置手势密码页面。
最开始的解决方案是设置一个标志位来进行控制,但实际调测过程中发现onCheckedChanged有时会被调用多次,导致不是每次操作都符合预期;之后找到另一种方案是onCheckedChanged中调用switch.isPressed方法,如果为true,则处理,否则当做程序处理。但当滑动打开关闭switch时不起作用。该方案应该在Radiogroup和checkbox控件有作用(未测试过)。
最终找到的解决方案是在代码调用setchecked之前unregister listener,调用完之后register listener,最后成功解决该问题。部分代码如下:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
Intent toCreateGesturePwd = new Intent(this,
CreateGesturePasswrodActivity.class);
startActivity(toCreateGesturePwd);
}
@Override protected void onResume()
{ super.onResume();
//反注册
mGesturePwdSwitch.setOnCheckedChangeListener(null);
if (isShowGesturePwd)
{
mGesturePwdSwitch.setChecked(true);
}
else
{
mGesturePwdSwitch.setChecked(false);
}
//注册回调
mGesturePwdSwitch.setOnCheckedChangeListener(this);
}
最开始的解决方案是设置一个标志位来进行控制,但实际调测过程中发现onCheckedChanged有时会被调用多次,导致不是每次操作都符合预期;之后找到另一种方案是onCheckedChanged中调用switch.isPressed方法,如果为true,则处理,否则当做程序处理。但当滑动打开关闭switch时不起作用。该方案应该在Radiogroup和checkbox控件有作用(未测试过)。
最终找到的解决方案是在代码调用setchecked之前unregister listener,调用完之后register listener,最后成功解决该问题。部分代码如下:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
Intent toCreateGesturePwd = new Intent(this,
CreateGesturePasswrodActivity.class);
startActivity(toCreateGesturePwd);
}
@Override protected void onResume()
{ super.onResume();
//反注册
mGesturePwdSwitch.setOnCheckedChangeListener(null);
if (isShowGesturePwd)
{
mGesturePwdSwitch.setChecked(true);
}
else
{
mGesturePwdSwitch.setChecked(false);
}
//注册回调
mGesturePwdSwitch.setOnCheckedChangeListener(this);
}
相关文章推荐
- 设计模式在Java/Android中的应用
- Android入门
- Android之——申请应用系统管理员权限
- Android 之 GridView初探
- 如何让你的APK跑在 com.android.phone 进程
- android之适配器
- Android小记:SpannableString
- 51-android.rules详解
- Android 底部菜单配合listview的问题
- Android学习笔记(十二)
- Android控件介绍
- android view 绘制流程
- Android的生命周期
- Android实战简易教程-第二十三枪(基于Baas的用户注册验证用户名是否重复功能!)
- Android入门:短信和拨打电话
- Android 动态logo bootanimation.zip 制作
- 使用线程执行堆栈StackTraceElement设计Android日志模块
- Android中的回调函数使用
- [Android&Java]浅谈设计模式-代码篇:观察者模式Observer
- 利用WIFI(不用数据线)连接Android手机进行调试