我有5个复选框和一个按钮。单击按钮,将打开另一个活动。我的愿望是,除非选中至少一个复选框,否则按钮不起作用。我怎么做?在Android Studio上工作。谢谢!
来自MainActivity.java的代码:
package todo.starter.com.decision;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
import static todo.starter.com.decision.R.id.option1;
import static todo.starter.com.decision.R.id.option2;
import static todo.starter.com.decision.R.id.option3;
import static todo.starter.com.decision.R.id.option4;
import static todo.starter.com.decision.R.id.option5;
public class MainActivity extends AppCompatActivity {
private CheckBox checkbox1, checkbox2, checkbox3, checkbox4, checkbox5;
private static Button but_next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addListenerToCeckBox();
OnClickButtonListener();
}
public void OnClickButtonListener() {
but_next = (Button)findViewById(R.id.button);
but_next.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
});
}
public void addListenerToCeckBox() {
checkbox1 = (CheckBox)findViewById(option1);
checkbox1.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()){
Toast.makeText(MainActivity.this,
"option1 checked", Toast.LENGTH_LONG).show();
}
}
}
);
checkbox2 = (CheckBox)findViewById(option2);
checkbox2.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()){
Toast.makeText(MainActivity.this,
"option2 checked", Toast.LENGTH_LONG).show();
}
}
}
);
checkbox3 = (CheckBox)findViewById(option3);
checkbox3.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()){
Toast.makeText(MainActivity.this,
"option3 checked", Toast.LENGTH_LONG).show();
}
}
}
);
checkbox4 = (CheckBox)findViewById(option4);
checkbox4.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()){
Toast.makeText(MainActivity.this,
"option4 checked", Toast.LENGTH_LONG).show();
}
}
}
);
checkbox5 = (CheckBox)findViewById(option5);
checkbox5.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox)v).isChecked()){
Toast.makeText(MainActivity.this,
"option5 checked", Toast.LENGTH_LONG).show();
}
}
}
);
}
}
答案 0 :(得分:1)
将您的onClickButtonListner
更改为以下代码
public void OnClickButtonListener() {
but_next = (Button)findViewById(R.id.button);
but_next.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if(validate()){
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent)
}else{
//Show whatever the error Message here.
}
});
}
public boolean validate(){
return checkbox1.isChecked() || checkbox2.isChecked() || checkbox3.isChecked() || checkbox4.isChecked() || checkbox5.isChecked();
}
答案 1 :(得分:1)
public void OnClickButtonListener() {
but_next = (Button)findViewById(R.id.button);
but_next.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if(option1.isCheked || option2.isChecked || option3.isChecked || option4.isChecked || option5.isChekced) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
} else {
Toast.makeText(getApplicationContext(), "You must select atleast 1 option.", Toast.LENGTH_SHORT).show();
}
});
}
如果选择了任何选项,则只能导航到下一个活动。
答案 2 :(得分:0)
除了Nishanth的回答,您还可以制作一个数组并循环播放它。首先,使用checkBoxes创建一个全局数组:
private CheckBox[] checkBoxes = {checkBox1,checkBox2,checkBox3,checkBox4,checkBox5};
然后创建一个可以每次调用的方法(但要确保复选框已初始化):
private boolean anyOneChecked(){
boolean anyChecked = false;
for(int i=0;i<checkBoxes.length;i++){
if(checkBoxes[i]!=null&&checkBoxes[i].isChecked()){
anyChecked = true;
break; //stop the loop if one is checked
}
}
return anyChecked;
}
因此,您可以随时在活动中的任何地方拨打电话,例如:
if(anyOneChecked){
//do your stuff
}
优势在于,如果您需要在活动中多次查看此内容,则只需调用此方法,无需在需要检查的任何位置再次编写内容。