以编程方式更改选中状态后未调用 CheckBox onCheckedChanged?

CheckBox's onCheckedChanged not called after programatically changing checked state?

在我的代码中,我 setOnCheckedChangeListener 在将初始值设置为 CheckBox 之前,但在设置初始值后未调用侦听器方法:

final CheckBox check_box = convertView.findViewById(R.id.check_box);

check_box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

// Some logic 
}
}

在上面一行之后,我将初始值设置为 CheckBox 如下,

if (isConditionTrue) {
            check_box.setChecked(true);
        } else {
            check_box.setChecked(false);
        }
}

但是当使用方法 setChecked() 以编程方式更改检查值时,侦听器方法 onCheckedChanged 从未被调用,但是当用户通过显示更改它时,它被调用。这是正常行为还是我实施错误?

setOnCheckedChangeListener() 当这个按钮的选中状态改变时被调用。但是查看您的代码,复选框的状态似乎没有改变。

if (isConditionTrue) {
            check_box.setChecked(true);
        } else {
            check_box.;
        }
}

如果 isConditionTrue 为 false 且 check_box 已取消选中,则 setChecked(false) 不会导致调用 setOnCheckedChangeListener 不会被调用。同样适用于 check_box 已经检查并且您尝试 setChecked(true);

是的,这是正常现象。因为侦听器附加到复选框,当您在应用程序 ui 上更改它时,它会调用。但如果您以编程方式更改它,它将不会执行。