根据android中其他复选框的状态控制复选框的状态

时间:2016-02-05 08:34:20

标签: java android

我有三个复选框,如果选中其中任何两个,我想立即禁用第三个复选框。我没有得到如何继续。

4 个答案:

答案 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,则禁用其余复选框