我有三个复选框,如果选中其中任何两个,我想立即禁用第三个复选框。我没有得到如何继续。
答案 0 :(得分:1)
管理列表中的CheckBox,以便迭代它们。
List<CheckBox> boxes = new ArrayList<>();
像这样分配它们(在您活动的onCreate()
中)
boxes.add((CheckBox) findViewById(R.id.checkbox1));
boxes.add((CheckBox) findViewById(R.id.checkbox2));
boxes.add((CheckBox) findViewById(R.id.checkbox3));
像这样添加onCheckedChangeListener
:
for(CheckBox box : boxes){
box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
manageBoxes();
}
});
}
最后是你的manageBoxes()
private void manageBoxes(){
int count = 0;
for(CheckBox box : boxes){
count += box.isChecked()?1:0;
}
if(count>=2){
for(CheckBox box : boxes){
box.setEnabled(box.isChecked());
box.setClickable(box.isChecked()); // not sure if needed
}
}else{
// reset all boxes
for(CheckBox box : boxes){
box.setEnabled(true);
box.setClickable(true);
}
}
}
只是一个快速而肮脏的想法。希望这有效。 另外:这是可扩展的,因此如果需要,您可以包含更多复选框。
答案 1 :(得分:0)
在每个复选框上添加一个更改处理程序或单击处理程序,让它调用一个负责检查每个复选框值的小方法:如果其中两个为真,则禁用第三个复选框。
例如:
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
handleCheckBoxes();
}
});
//Do this for all the checkboxes
private void handleCheckBoxes(){
int checkedCount = 0;
CheckBox uncheckedBox = null;
if(checkBox1.isChecked()){
checkedCount++;
}
else{
uncheckedBox = checkBox1;
}
if(checkBox2.isChecked()){
checkedCount++;
}
else{
uncheckedBox = checkBox2;
}
if(checkBox3.isChecked()){
checkedCount++;
}
else{
uncheckedBox = checkBox3;
}
if(checkedCount == 2){
uncheckedBox .setEnabled(false);
}
else{
//enable all checkboxes
checkBox1.setEnables(true);
checkBox2.setEnables(true);
checkBox3.setEnables(true);
}
答案 2 :(得分:0)
尝试以这种方式实现:
private ArrayList<Integer> integers = null;
integers = new ArrayList<>();
chkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int position = (int) yourview.getTag();
if (chkBox.isChecked()) {
integers.add(position);
chkBox.setChecked(true);
} else {
if (integers.size() > 0) {
for (int i=0; i<integers.size(); i++) {
if (integers.get(i) == position) {
integers.remove(i);
}
}
});
if (integers.size() > 2) {
//Disable your third checkbox
}
答案 3 :(得分:0)
在伪代码中,这将是:
创建变量以保持选中的复选框数量,让我们称之为amountChecked
选中复选框时=>增加amountChecked
选中复选框时=>检查amountChecked
是否等于或大于allowedAmountChecked
(在您的情况下,这是2)
=&GT;如果它大于或等于allowedAmountChecked
,则禁用其余复选框