У меня есть 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 элементов, это работает, но после того, как я отменяю их выбор, я не могу перепроверить ни один элемент. Что мне не хватает?