简体   繁体   English

单击以启用 Java Android 开发中的按钮时,如何处理两个复选框?

[英]How can I handle two checkbox when clicked to enable a button in Java Android develop?

I am going to design my app in android.我将在 android 中设计我的应用程序。 And I facing a problem about in a registration when I have two checkbox.当我有两个复选框时,我在注册时遇到了问题。 When two checkbox is clicked, and the button will be enable and can be clicked to go to next activity.单击两个复选框时,该按钮将启用并且可以单击到 go 到下一个活动。 Here are my script.这是我的脚本。

private static final String TAG_Clicked = "TagClicked";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_term_signup);

    CheckBox checkBoxTOS = (CheckBox) findViewById(R.id.checkBox_termsOfService);
    CheckBox checkBoxPNP = (CheckBox) findViewById(R.id.checkBox_privacy_policy);
    Button buttonNext = (Button) findViewById(R.id.btn_next);


    checkBoxTOS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                checkBoxTOS.isChecked();
                Log.d(TAG_Clicked,"Agreed TOS "+isChecked);
            }
        }
    });
    checkBoxPNP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                checkBoxPNP.isChecked();
                Log.d(TAG_Clicked,"Agreed PNP "+isChecked);
            }
        }
    });
    if ((checkBoxTOS.isChecked() == true) && (checkBoxPNP.isChecked() == true)){
        buttonNext.setEnabled(true);
        Log.d(TAG_Clicked,"A");
    } else {
        buttonNext.setEnabled(false);
        Log.d(TAG_Clicked,"B");
    }
}

You can have a counter of checked boxes and manage the button state by comparing the count.您可以拥有一个复选框计数器并通过比较计数来管理按钮 state。 For example:例如:

      private static final String TAG_Clicked = "TagClicked";
      private int counter = 0;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_term_signup);

        CheckBox checkBoxTOS = (CheckBox) findViewById(R.id.checkBox_termsOfService);
        CheckBox checkBoxPNP = (CheckBox) findViewById(R.id.checkBox_privacy_policy);
        Button buttonNext = (Button) findViewById(R.id.btn_next);

        checkBoxTOS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
              counter++;
              checkBoxTOS.isChecked();
              Log.d(TAG_Clicked, "Agreed TOS " + isChecked);
            } else {
              counter--
            }
            manageButtonState(counter);
          }
        });
        checkBoxPNP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
              counter++;
              checkBoxPNP.isChecked();
              Log.d(TAG_Clicked, "Agreed PNP " + isChecked);
            } else {
              counter--;
            }
            manageButtonState(counter);

          }
        });

      }

      private void manageButtonState(int counter) {
        buttonNext.setEnabled(counter > 1)
      }
    checkBoxTOS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked && checkBoxPNP.isChecked()){
           buttonNext.setEnabled(false);
            Log.d(TAG_Clicked,"Agreed TOS "+isChecked);
        }
        else
           buttonNext.setEnabled(true);
    }
});


checkBoxPNP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked && checkBoxTOS.isChecked()){
            Log.d(TAG_Clicked,"Agreed PNP "+isChecked);
            buttonNext.setEnabled(false);
        }
        else
            buttonNext.setEnabled(true);
    }
});

You have to check Button should enabled or not after check state change of both ChecxBox在检查两个ChecxBox的 state 更改后,您必须检查Button是否应该启用

Below code should execute after each time both checkbox check state is changed.每次更改复选框检查 state 后,应执行以下代码。

if ((checkBoxTOS.isChecked() == true) && (checkBoxPNP.isChecked() == true)){
    buttonNext.setEnabled(true);
    Log.d(TAG_Clicked,"A");
} else {
    buttonNext.setEnabled(false);
    Log.d(TAG_Clicked,"B");
}

Move this code in a method and call that method after CheckBox check state change将此代码移动到方法中并在 CheckBox 检查 state 更改后调用该方法

void changeButtonState(){
  if (checkBoxTOS.isChecked() && checkBoxPNP.isChecked() ){
      buttonNext.setEnabled(true);
      Log.d(TAG_Clicked,"A");
  } else {
      buttonNext.setEnabled(false);
      Log.d(TAG_Clicked,"B");
  }
}

Call this method form check change listener call back调用此方法表单检查更改侦听器回调

checkBoxTOS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        changeButtonState();
    }
});
checkBoxPNP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        changeButtonState();
    }
});
  checkBoxTOS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         //will called when you select or deselect
            enableOrDisableButton();
        }
    });
    checkBoxPNP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                
       //will called when you select or deselect
            enableOrDisableButton();
        }
    });

public void enableOrDisableButton(){
    if ((checkBoxTOS.isChecked() == true) && (checkBoxPNP.isChecked() == true)){
        buttonNext.setEnabled(true);
        Log.d(TAG_Clicked,"A");
    } else {
        buttonNext.setEnabled(false);
        Log.d(TAG_Clicked,"B");
    }}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM