Java 选中一定数量的复选框后禁用复选框

Java 选中一定数量的复选框后禁用复选框,java,android,android-activity,Java,Android,Android Activity,我有6个复选框,例如,如果我有一个变量a=2,则允许用户选中2个复选框并禁用另一个。如果我有a=3,则允许用户选中3个复选框并禁用其余复选框,依此类推。这就是我尝试的: public void itemClicked(View v) { //code to check if this checkbox is checked! CheckBox checkBox = (CheckBox)v; check1=(CheckBox)fin

我有6个复选框,例如,如果我有一个变量a=2,则允许用户选中2个复选框并禁用另一个。如果我有a=3,则允许用户选中3个复选框并禁用其余复选框,依此类推。这就是我尝试的:

 public void itemClicked(View v) {
            //code to check if this checkbox is checked!

         CheckBox checkBox = (CheckBox)v;

         check1=(CheckBox)findViewById(R.id.check1);
         check2=(CheckBox)findViewById(R.id.check2);
         check3=(CheckBox)findViewById(R.id.check3);
         check4=(CheckBox)findViewById(R.id.check4);
         check5=(CheckBox)findViewById(R.id.check5);
         check6=(CheckBox)findViewById(R.id.check6);



         if(a==1)

         {

           only one can be checked the others get disabled

            }




         }

     }
xml文件的一部分是:

<CheckBox android:id="@+id/check1"
        android:layout_width="140dp"
        android:layout_height="250dp"
         android:scaleX="1.0"
    android:scaleY="1.0"
    android:button="@layout/cb_selector"
         android:layout_marginLeft="80dp" 
        android:layout_marginTop="505dp" 
        android:onClick="itemClicked"
        />



        <CheckBox android:id="@+id/check2"
    android:layout_width="140dp"
        android:layout_height="250dp"
         android:scaleX="1.0"
    android:scaleY="1.0"
    android:button="@layout/cb_selector"
    android:layout_marginLeft="365dp" 
        android:layout_marginTop="505dp" 
        />


如何实现这一点?

如果用户只能选择一个选项,最好使用单选按钮


无论如何,这里有一个简单的答案:。

如果用户只能选择一个选项,最好使用单选按钮


无论如何,这里有一个简单的答案:。

如果用户只能选择一个选项,最好使用单选按钮


无论如何,这里有一个简单的答案:。

如果用户只能选择一个选项,最好使用单选按钮


无论如何,这里有一个简单而好的答案:。

在onCheckedChange中,您需要一个复选框数组和变量检查

CheckBox[] cba;      

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cba = new CheckBox[]{
            (CheckBox)findViewById(R.id.check1),
            (CheckBox)findViewById(R.id.check2),
            (CheckBox)findViewById(R.id.check3),
            (CheckBox)findViewById(R.id.check4),
            (CheckBox)findViewById(R.id.check5),
            (CheckBox)findViewById(R.id.check6)
    };
    //here set onChechedChange for all your checkboxes
    for (CheckBox cb:cba) {
        cb.setOnCheckedChangeListener(cbListener);
    }

 }

CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkEnoughAndMakeDisabled(cba);
    }
};

private void checkEnoughAndMakeDisabled(CheckBox checkBoxes[]){
    int countChecked =0;
    for (CheckBox cb:checkBoxes){
        cb.setEnabled(true);
        if (cb.isChecked()) countChecked++;
    }
    //your variable
    if (a <= countChecked) {
        for (CheckBox cb:checkBoxes){
            if (!cb.isChecked())cb.setEnabled(false);
        }
    }
}
CheckBox[]cba;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
cba=新复选框[]{
(复选框)findViewById(R.id.check1),
(复选框)findViewById(R.id.check2),
(复选框)findViewById(R.id.check3),
(复选框)findViewById(R.id.check4),
(复选框)findViewById(R.id.check5),
(复选框)findViewById(R.id.check6)
};
//这里为所有复选框设置onchedchange
对于(复选框cb:cba){
cb.setOnCheckedChangeListener(cbListener);
}
}
CompoundButton.OnCheckedChangeListener cbListener=新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
选中“不足”和“禁用”(cba);
}
};
私有void checkenough和makedisabled(复选框[]){
int countChecked=0;
用于(复选框cb:复选框){
cb.setEnabled(真);
if(cb.isChecked())countChecked++;
}
//你的变量

如果(a您需要一个复选框数组和一个用于检查onCheckedChange中的变量的数组

CheckBox[] cba;      

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cba = new CheckBox[]{
            (CheckBox)findViewById(R.id.check1),
            (CheckBox)findViewById(R.id.check2),
            (CheckBox)findViewById(R.id.check3),
            (CheckBox)findViewById(R.id.check4),
            (CheckBox)findViewById(R.id.check5),
            (CheckBox)findViewById(R.id.check6)
    };
    //here set onChechedChange for all your checkboxes
    for (CheckBox cb:cba) {
        cb.setOnCheckedChangeListener(cbListener);
    }

 }

CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkEnoughAndMakeDisabled(cba);
    }
};

private void checkEnoughAndMakeDisabled(CheckBox checkBoxes[]){
    int countChecked =0;
    for (CheckBox cb:checkBoxes){
        cb.setEnabled(true);
        if (cb.isChecked()) countChecked++;
    }
    //your variable
    if (a <= countChecked) {
        for (CheckBox cb:checkBoxes){
            if (!cb.isChecked())cb.setEnabled(false);
        }
    }
}
CheckBox[]cba;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
cba=新复选框[]{
(复选框)findViewById(R.id.check1),
(复选框)findViewById(R.id.check2),
(复选框)findViewById(R.id.check3),
(复选框)findViewById(R.id.check4),
(复选框)findViewById(R.id.check5),
(复选框)findViewById(R.id.check6)
};
//这里为所有复选框设置onchedchange
对于(复选框cb:cba){
cb.setOnCheckedChangeListener(cbListener);
}
}
CompoundButton.OnCheckedChangeListener cbListener=新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
选中“不足”和“禁用”(cba);
}
};
私有void checkenough和makedisabled(复选框[]){
int countChecked=0;
用于(复选框cb:复选框){
cb.setEnabled(真);
if(cb.isChecked())countChecked++;
}
//你的变量

如果(a您需要一个复选框数组和一个用于检查onCheckedChange中的变量的数组

CheckBox[] cba;      

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cba = new CheckBox[]{
            (CheckBox)findViewById(R.id.check1),
            (CheckBox)findViewById(R.id.check2),
            (CheckBox)findViewById(R.id.check3),
            (CheckBox)findViewById(R.id.check4),
            (CheckBox)findViewById(R.id.check5),
            (CheckBox)findViewById(R.id.check6)
    };
    //here set onChechedChange for all your checkboxes
    for (CheckBox cb:cba) {
        cb.setOnCheckedChangeListener(cbListener);
    }

 }

CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkEnoughAndMakeDisabled(cba);
    }
};

private void checkEnoughAndMakeDisabled(CheckBox checkBoxes[]){
    int countChecked =0;
    for (CheckBox cb:checkBoxes){
        cb.setEnabled(true);
        if (cb.isChecked()) countChecked++;
    }
    //your variable
    if (a <= countChecked) {
        for (CheckBox cb:checkBoxes){
            if (!cb.isChecked())cb.setEnabled(false);
        }
    }
}
CheckBox[]cba;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
cba=新复选框[]{
(复选框)findViewById(R.id.check1),
(复选框)findViewById(R.id.check2),
(复选框)findViewById(R.id.check3),
(复选框)findViewById(R.id.check4),
(复选框)findViewById(R.id.check5),
(复选框)findViewById(R.id.check6)
};
//这里为所有复选框设置onchedchange
对于(复选框cb:cba){
cb.setOnCheckedChangeListener(cbListener);
}
}
CompoundButton.OnCheckedChangeListener cbListener=新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
选中“不足”和“禁用”(cba);
}
};
私有void checkenough和makedisabled(复选框[]){
int countChecked=0;
用于(复选框cb:复选框){
cb.setEnabled(真);
if(cb.isChecked())countChecked++;
}
//你的变量

如果(a您需要一个复选框数组和一个用于检查onCheckedChange中的变量的数组

CheckBox[] cba;      

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cba = new CheckBox[]{
            (CheckBox)findViewById(R.id.check1),
            (CheckBox)findViewById(R.id.check2),
            (CheckBox)findViewById(R.id.check3),
            (CheckBox)findViewById(R.id.check4),
            (CheckBox)findViewById(R.id.check5),
            (CheckBox)findViewById(R.id.check6)
    };
    //here set onChechedChange for all your checkboxes
    for (CheckBox cb:cba) {
        cb.setOnCheckedChangeListener(cbListener);
    }

 }

CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkEnoughAndMakeDisabled(cba);
    }
};

private void checkEnoughAndMakeDisabled(CheckBox checkBoxes[]){
    int countChecked =0;
    for (CheckBox cb:checkBoxes){
        cb.setEnabled(true);
        if (cb.isChecked()) countChecked++;
    }
    //your variable
    if (a <= countChecked) {
        for (CheckBox cb:checkBoxes){
            if (!cb.isChecked())cb.setEnabled(false);
        }
    }
}
CheckBox[]cba;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
cba=新复选框[]{
(复选框)findViewById(R.id.check1),
(复选框)findViewById(R.id.check2),
(复选框)findViewById(R.id.check3),
(复选框)findViewById(R.id.check4),
(复选框)findViewById(R.id.check5),
(复选框)findViewById(R.id.check6)
};
//这里为所有复选框设置onchedchange
对于(复选框cb:cba){
cb.setOnCheckedChangeListener(cbListener);
}
}
CompoundButton.OnCheckedChangeListener cbListener=新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
选中“不足”和“禁用”(cba);
}
};
私有void checkenough和makedisabled(复选框[]){
int countChecked=0;
用于(复选框cb:复选框){
cb.setEnabled(真);
if(cb.isChecked())countChecked++;
}
//你的变量
如果(a)