Как снять отметку с пункта setItemChecked ()?

Я использую ListView с MULTIPLE_CHOICE и чтобы вернуть выбранные предметы я использую setItemChecked() метод.

Он отлично работает, так как я могу видеть ранее проверенные элементы. Проблема в том, что если я снимаю галочку с одного из ранее проверенных пунктов, а затем получаю список проверенных пунктов по custList.getCheckItemIds()В массиве все еще есть пункт, который я не проверял.

Может кто-нибудь сказать мне, если это должно произойти, или я что-то упустил?

3 ответа

Здесь вы должны вызвать setOnCheckedChangeListener и управлять кодом внутри этого блока слушателя.

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              // Write and manage your code here.
        }
});

Этот:

SparseBooleanArray checked = list.getCheckedItemPositions();

for (int i = 0; i < checked.size(); i++){
    if (checked.get(i))
        //the item at index i is checked, do something
    else
        //the item is not checked, do something else
}

не работает

следовать списку выбора нескольких контактов [getCheckedItemPositions()]

должно быть хорошо.

SparseBooleanArray selectedPositions = listView.getCheckedItemPositions();

for (int i=0; i<selectedPositions.size(); i++) {
    if (selectedPositions.get(selectedPositions.keyAt(i)) == true) {
        //do stuff
    }
}

Если вы просто пытаетесь выяснить, какие элементы проверяются в любой момент времени, вы можете получить SparseBooleanArray из ListView и перебрать его с помощью цикла for. Например:

SparseBooleanArray checked = list.getCheckedItemPositions();

for (int i = 0; i < checked.size(); i++){
    if (checked.get(i))
        //the item at index i is checked, do something
    else
        //the item is not checked, do something else
}
Другие вопросы по тегам