开关设置检查错误
Switch Set Checked False
我有一个带监听器的 Switch:
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
}
正在做:
mSwitch.setChecked(false);
没有效果,没有触发回调。
而是这样:
mSwitch.setChecked(true);
mSwitch.setChecked(false);
按预期工作。难道我做错了什么?如果复选框状态为 false 并且使用 setChecked(false),正常行为是跳过回调?或者这是一个错误?
它将在复合按钮的选中状态发生变化时调用。
所以如果它的状态已经是 false,当你调用 false 时它不会被调用。
只有当你定义了你的监听器并且后记尝试通过 setChecked(false/true)
来改变它时,回调才会被调用
不,这不是错误,是正常现象。
如果您查看 CompoundButton 的代码,您会看到
/**
* <p>Changes the checked state of this button.</p>
*
* @param checked true to check the button, false to uncheck it
*/
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
notifyViewAccessibilityStateChangedIfNeeded(
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
// Avoid infinite recursions if setChecked() is called from a listener
if (mBroadcasting) {
return;
}
mBroadcasting = true;
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
}
if (mOnCheckedChangeWidgetListener != null) {
mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
}
mBroadcasting = false;
}
}
其中 mChecked
是开关的实际值。
如果你想每次都触发,像这样简单重写onClick监听器
mSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Is checked? "+mSwitch.isChecked(), Toast.LENGTH_SHORT).show();
}
});
我有一个带监听器的 Switch:
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
}
正在做:
mSwitch.setChecked(false);
没有效果,没有触发回调。 而是这样:
mSwitch.setChecked(true);
mSwitch.setChecked(false);
按预期工作。难道我做错了什么?如果复选框状态为 false 并且使用 setChecked(false),正常行为是跳过回调?或者这是一个错误?
它将在复合按钮的选中状态发生变化时调用。
所以如果它的状态已经是 false,当你调用 false 时它不会被调用。
只有当你定义了你的监听器并且后记尝试通过 setChecked(false/true)
来改变它时,回调才会被调用不,这不是错误,是正常现象。
如果您查看 CompoundButton 的代码,您会看到
/**
* <p>Changes the checked state of this button.</p>
*
* @param checked true to check the button, false to uncheck it
*/
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
notifyViewAccessibilityStateChangedIfNeeded(
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
// Avoid infinite recursions if setChecked() is called from a listener
if (mBroadcasting) {
return;
}
mBroadcasting = true;
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
}
if (mOnCheckedChangeWidgetListener != null) {
mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
}
mBroadcasting = false;
}
}
其中 mChecked
是开关的实际值。
如果你想每次都触发,像这样简单重写onClick监听器
mSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Is checked? "+mSwitch.isChecked(), Toast.LENGTH_SHORT).show();
}
});