如果用户将其切换为true,我想将Switch切换为false。
为了避免再次触发onCheckChanged,我删除了侦听器,然后在切换后将其添加回来。
mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
mMySwitch.setOnCheckedChangeListener(null);
mMySwitch.setChecked(false);
mMySwitch.setOnCheckedChangeListener(mCheckedChangeListener);
}
};
mMySwitch.setOnCheckedChangeListener(mCheckedChangeListener);
然而,这并不起作用,我不知道为什么。当我切换到true时,它会保持为真。
/ **更新** / 显然我不必将侦听器设置为null,所以这里的另一个仍然没有将开关设置为false:
mMySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
mMySwitch.setChecked(false);
}
}
});
return v;
答案 0 :(得分:2)
我挖了一点,看起来这是一个众所周知的问题:https://code.google.com/p/android/issues/detail?id=57980
这种解决方法似乎有效,直到有人得到更好的答案:
mMySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
// Not sure why I need a delay here, but it won't fire otherwise.
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
mMySwitch.setChecked(false);
}
}, 100);
}
}
});