android - 如何在 android 达到限制时禁用复选框?

标签 android android-checkbox oncheckedchanged

我有 15 个 CheckBox,当用户检查超过 5 个时,我必须阻止他。我使用方法 OnCheckedChangeListener 来知道是否检查了一个项目,但我不知道'知道如何在选择 5 个项目后进行限制

请参阅下面的代码:

int lengthBox = 15;
int lenghtCount = 0;  

// inside onCreate method
final CheckBox[] checkbox = new CheckBox[lengthBox];
OnCheckedChangeListener checker = new OnCheckedChangeListener(){ 
    @Override
    public void onCheckedChanged(CompoundButton cb, boolean b) {
        // How can I improve this condition?
        if(checkbox[0].isChecked() || checkbox[1].isChecked() || 
        checkbox[2].isChecked() || checkbox[3].isChecked() || 
        checkbox[4].isChecked() || checkbox[5].isChecked() || 
        checkbox[6].isChecked() || checkbox[7].isChecked() || 
        checkbox[8].isChecked() || checkbox[9].isChecked() || 
        checkbox[10].isChecked() || checkbox[11].isChecked() || 
        checkbox[12].isChecked() || checkbox[13].isChecked() || 
        checkbox[14].isChecked()) {  
            if(lenghtCount < 5){
                lenghtCount++;
            }else{
                Toast.makeText(MyActivity.this, "Limit reached!!!", Toast.LENGTH_SHORT).show();
            }
        }
    }
};
for(int i = 0; i < lengthBox; i++) {
    int id = getResources().getIdentifier("checkbox_"+i, "id", getPackageName());
    checkbox[i] = (CheckBox) findViewById(id)
    checkbox[i].setOnCheckedChangeListener(checker);
}

请问有人能指出正确的方法吗?


更新:我试过:

OnCheckedChangeListener checker = new OnCheckedChangeListener(){ 
    @Override
    public void onCheckedChanged(CompoundButton cb, boolean b) {
        if(lenghtCount == 5){
            cb.setChecked(false);
        }else if(b){
            lenghtCount++;
        }else if(!b){
            lenghtCount--;
        }
    }
};  

工作完美,但我认为缺少某些东西。当我单击 5 个项目时这有效,但是当我取消选择它们之后,我无法重新检查任何项目。我缺少什么?

最佳答案

您应该使用其他变量来计算已选中复选框的数量

final int count=0; 
OnCheckedChangeListener checker = new OnCheckedChangeListener(){ 
        @Override
        public void onCheckedChanged(CompoundButton cb, boolean b) {
           if(count == maxLimit && b){
               cb.setChecked(false);
               Toast.makeText(getApplicationContext(), 
            "Limit reached!!!", Toast.LENGTH_SHORT).show();
           }else if(b){

                count++;
                CharSequence myCheck = tagsCheck[i].getText();
                Toast.makeText(getApplicationContext(), 
                       myCheck + " checked!", 
                       Toast.LENGTH_SHORT)
                .show();
            }else if(!b){
 count--;
        }
    }; 

关于android - 如何在 android 达到限制时禁用复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040638/

相关文章:

android - 自定义手势检测器

android - 使用 Google 搜索结果查询时间

java - Android:复选框监听器

android - 在每行项目上包含 EditText 和 CheckBox 的 ListView 中的多点触控 (Android)

c# - 如何获取已更改的复选框项目的对象名称?

java - SQLite似乎没有在Android RecyclerView中用onCheckedChanged执行

android - 获取网页的具体内容到webview中

java - java String.format 可以处理替换吗?而不是 %s

java - 从惰性 ListView 适配器获取数据不起作用android

java - 如何在android中使用带有 'onCheckedChanged'方法的switch语句?