【问题标题】:Event of multiple checkboxes using onCheckedChanged使用 onCheckedChanged 的​​多个复选框的事件
【发布时间】:2017-05-09 17:17:38
【问题描述】:

我的登录复选框有问题

首先,我将制作 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中也为每个wiget分配ID(xml文件被跳过)

main_id_saver = (CheckBox) findViewById(R.id.main_id_saver);
main_pw_saver = (CheckBox) findViewById(R.id.main_pw_saver);
main_auto_login = (CheckBox) findViewById(R.id.main_auto_login);

main_id_saver.setOnCheckedChangeListener(this);
main_pw_saver.setOnCheckedChangeListener(this);
main_auto_login.setOnCheckedChangeListener(this);

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

  1. 如果选中了 ID、PW 复选框,则自动选中自动登录复选框

  2. 不能只勾选 PW 复选框

  3. 如果勾选自动登录,则自动勾选ID、PW

  4. 如果在所有复选框都选中的状态下单击任何复选框,则所有复选框都未选中

我做了一些尝试,下面是那个

@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个复选框的onCheckedChanged在哪里
  • 尝试设置一个像dontFire = false;这样的实例字段,然后在事件if(dontFire) return; dontFire = true; . . dontFire = false;当你调用setChecked时再次调用事件,我猜这会搞砸。
  • @Redman onCheckedChanged 是否适用于所有复选框更改?
  • @alfoks 设置布尔类型变量是解决这个问题的唯一方法吗?好的,谢谢楼主
  • @timedeveloper 这就是我处理在事件本身内部调用setChecked 的方式。请参阅 Ekrem 的答案以简化您的代码,但您仍然需要停止再次调用该事件。

标签: java android checkbox


【解决方案1】:
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 是什么?它是某种分组组件吗?
  • chk 是 CheckBox。
猜你喜欢
  • 2016-04-13
  • 1970-01-01
  • 2010-10-29
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
相关资源
最近更新 更多