为何CompoundButton.OnCheckedChangeListener监听器无法正常工作?
核心问题修正
你的代码存在一个拼写错误:把回调方法名onCheckedChanged写成了onCheckChanged(少了字母e),系统无法识别这个错误的方法名,导致监听完全不生效。
修正后的完整代码
//赋值变量 switchCompat = findViewById(R.id.bt_switch); switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { //检查状态 if (isChecked) { //当开关按钮被选中时 //设置夜间模式 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); } else { //当开关按钮未被选中时 //设置日间模式 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); } } });
额外排查点(若修正后仍不生效)
- 确认
switchCompat变量类型为SwitchCompat,且布局文件中R.id.bt_switch对应的控件确实是SwitchCompat,类型不匹配会导致绑定失败。 - 检查代码其他位置是否调用了
switchCompat.setOnCheckedChangeListener(null),或者重新设置了监听覆盖当前回调。 - 设置夜间模式会触发Activity重启,重启后需重新给
switchCompat绑定监听,并恢复正确的选中状态,避免监听丢失。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

