Java 使用onCheckedChanged的多个复选框事件
我对登录复选框有问题 首先,我要做3个复选框,并为每个复选框创建更改侦听器Java 使用onCheckedChanged的多个复选框事件,java,android,checkbox,Java,Android,Checkbox,我对登录复选框有问题 首先,我要做3个复选框,并为每个复选框创建更改侦听器 public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { private CheckBox main_id_saver; private CheckBox main_pw_saver; private CheckBox main_auto_login; 并在onCrea
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
private CheckBox main_id_saver;
private CheckBox main_pw_saver;
private CheckBox main_auto_login;
并在onCreate中为每个too分配wigets的ID(跳过xml文件)
我想为满足以下条件的复选框设置一个单击事件
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (main_auto_login.isChecked()){
if(!main_id_saver.isChecked() || !main_pw_saver.isChecked()) {
main_id_saver.setChecked(true);
main_pw_saver.setChecked(true);
return;
} else if (main_id_saver.isChecked()&&main_pw_saver.isChecked()&&main_auto_login.isChecked()){
main_auto_login.setChecked(false);
main_id_saver.setChecked(false);
main_pw_saver.setChecked(false);
return;
}
} else if(main_pw_saver.isChecked()){
if(main_id_saver.isChecked()){
main_auto_login.setChecked(true);
return;
} else if(!main_id_saver.isChecked()){
Toast.makeText(MainActivity.this, "CANNOT REMEMBER PASSWORD BUT FOR ID",Toast.LENGTH_SHORT).show();
main_pw_saver.setChecked(false);
return;
}
}
return;
}
但它不像我想的那样管用
解决此问题的最佳代码是什么
在我傲慢的观点中,单独设置onChangedLinster事件是最好的答案,但我无法做到…剩余2个checkboxesTry的
onCheckedChanged
在哪里设置一个实例字段,如dontFire=false
然后在事件中if(dontFire)返回;dontFire=true。dontFire=假
当您调用setChecked
时,事件会再次被调用,我想这会把事情搞砸。@Redman是否对所有复选框更改应用了onCheckedChanged?@alfoks设置布尔类型变量是处理此问题的唯一方法?好的,谢谢sir@timedeveloper这就是我如何在事件本身内部处理调用setChecked
。查看Ekrem的答案以简化代码,但仍然需要停止再次调用事件。剩余2个checkboxesTry的onCheckedChanged
在哪里设置一个实例字段,如dontFire=false
然后在事件中if(dontFire)返回;dontFire=true。dontFire=假
当您调用setChecked
时,事件会再次被调用,我想这会把事情搞砸。@Redman是否对所有复选框更改应用了onCheckedChanged?@alfoks设置布尔类型变量是处理此问题的唯一方法?好的,谢谢sir@timedeveloper这就是我如何在事件本身内部处理调用setChecked
。查看Ekrem的答案以简化代码,但仍然需要停止再次调用事件。啊,这正是我想要的。谢谢,先生,有什么事吗?它是某种分组组件吗?chk是复选框。啊,这就是我想要的。谢谢,先生,有什么事吗?它是某种分组组件吗?chk是复选框。
chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()){
case R.id.checkbox1:
if(isChecked)
//Do something
else
//Do something
break;
case R.id.checkBox2:
if(isChecked)
//Do something
else
//Do something
break;
}
}
});
chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()){
case R.id.checkbox1:
if(isChecked)
//Do something
else
//Do something
break;
case R.id.checkBox2:
if(isChecked)
//Do something
else
//Do something
break;
}
}
});