Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用onCheckedChanged的多个复选框事件_Java_Android_Checkbox - Fatal编程技术网

Java 使用onCheckedChanged的多个复选框事件

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

我对登录复选框有问题

首先,我要做3个复选框,并为每个复选框创建更改侦听器

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文件)

我想为满足以下条件的复选框设置一个单击事件

  • 如果选中ID、PW复选框,则自动选中自动登录复选框

  • 无法仅选中PW复选框

  • 如果选中自动登录,则自动检查ID、PW

  • 如果在“所有复选框均已选中”状态下单击了任何复选框,则所有复选框均未选中

  • 我做了一些尝试,下面就是

    @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;
    
    
                }
            }
        });