我有 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);
}
有人可以指出我正确的方法吗?
UPDATE:我试过:
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--;
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)