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

在Java Android develop中,单击以启用按钮时,如何处理两个复选框?,java,android,Java,Android,我打算用android设计我的应用程序。当我有两个复选框时,我在注册中遇到了一个问题。单击两个复选框时,按钮将启用,并可单击以转到下一个活动。这是我的剧本 private static final String TAG_Clicked = "TagClicked"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我打算用android设计我的应用程序。当我有两个复选框时,我在注册中遇到了一个问题。单击两个复选框时,按钮将启用,并可单击以转到下一个活动。这是我的剧本

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

您可以拥有复选框计数器,并通过比较计数来管理按钮状态。例如:

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

在检查两个
复选框的状态更改后,您必须检查
按钮是否应启用

每次更改复选框和复选框的状态后,应执行以下代码

if ((checkBoxTOS.isChecked() == true) && (checkBoxPNP.isChecked() == true)){
    buttonNext.setEnabled(true);
    Log.d(TAG_Clicked,"A");
} else {
    buttonNext.setEnabled(false);
    Log.d(TAG_Clicked,"B");
}
在方法中移动此代码,并在选中“状态更改”复选框后调用该方法

void changeButtonState(){
  if (checkBoxTOS.isChecked() && checkBoxPNP.isChecked() ){
      buttonNext.setEnabled(true);
      Log.d(TAG_Clicked,"A");
  } else {
      buttonNext.setEnabled(false);
      Log.d(TAG_Clicked,"B");
  }
}
调用此方法表单检查更改侦听器回调

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.isChecked()该语句不起任何作用。您必须使用类似于:
if(checkBoxTOS.isChecked()){buttonNext.setEnabled(true);else buttonNext.setEnabled(false);}
或:
buttonNext.setEnabled(isChecked&&checkBoxTOS.isChecked())。它可以工作。谢谢你的帮助!不客气:)
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");
    }}