Java 基于android中其他复选框的状态控制复选框的状态

Java 基于android中其他复选框的状态控制复选框的状态,java,android,Java,Android,我有三个复选框,如果其中任何两个被选中,我想立即禁用第三个复选框。我不知道如何继续。在每个复选框上添加更改处理程序或单击处理程序,让它调用一个小方法,负责检查每个复选框的值:如果其中两个为真,则禁用第三个 例如: checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton but

我有三个复选框,如果其中任何两个被选中,我想立即禁用第三个复选框。我不知道如何继续。

在每个复选框上添加更改处理程序或单击处理程序,让它调用一个小方法,负责检查每个复选框的值:如果其中两个为真,则禁用第三个

例如:

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

尝试以这种方式实施:

 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
                }
private ArrayList integers=null;
整数=新的ArrayList();
chkBox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
int position=(int)yourview.getTag();
if(chkBox.isChecked()){
整数。相加(位置);
chkBox.setChecked(真);
}否则{
if(integers.size()>0){
对于(int i=0;i 2){
//禁用第三个复选框
}

管理列表中的复选框,以便您可以对其进行迭代

List<CheckBox> boxes = new ArrayList<>();
在checkedChangeListener上添加一个
,如下所示:

for(CheckBox box : boxes){
        box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                manageBoxes();
            }
        });
    }
最后是您的
managebox()

只是一个快速而肮脏的想法。希望这能奏效。
另外:这是可伸缩的,因此如果需要,您可以包含更多复选框。

在伪代码中,这将是:

创建变量来保存选中的复选框数量,我们称之为
amountChecked

选中复选框时=>增加选中的
数量

选中复选框时=>检查
amountChecked
是否等于或大于
allowedAmountChecked
(本例中为2)

=>如果它大于或等于
allowedAmountChecked
则禁用其余复选框

我有三个复选框,但我没有任何向前推进的逻辑。我至少需要向前推进的逻辑看看这个:我认为奇怪的是,这个问题至少得到了两次向上投票。从这里开始向下投票除此之外,你应该展示你到目前为止所做的工作,缩小问题范围,而不是要求一个全面的解决方案。同时描述你读过的资源(开发人员文档、教程等)为了理解手头的问题。我们是来帮助你的,但我们不会为你做所有的工作。请表现出一些承诺。@janus,正如我之前所说的,我只是想继续逻辑。如果你真的想知道我读了什么,我写了什么代码,在我得到req后不要担心使用我的同伴提供的逻辑得出的结果,我会将其发送给Hered您是否有任何演示或示例?是的,例如,我想计算电压,然后我需要电流电阻或功率的两个量中的任何一个。因此,如果用户选择电流和电阻复选框,则功率复选框应为disabled@NikeshPatel请c查看编辑文章中的代码。我没有测试它,但你可以看到逻辑…希望这有助于这看起来很难看。@miva2这不是部署人的代码。他要求提供逻辑,这只是为了显示过程。但是有了这样的计数器,你仍然需要注意显示旋转。将计数器存储在savedInstanceState例如。
for(CheckBox box : boxes){
        box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                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);
        }
    }
}