Нашел проблему. Произошло изменение в setItemChecked () между 1.6 и 2.1.
1.6 всегда очищал бы отмеченные элементы, когда setItemChecked () вызывался со значением false. Поэтому, если последний элемент не был проверенным, он получал бы очищенный массив, следовательно, никаких проверенных элементов.
Его можно обойти, только вызвав setItemChecked для проверенного элемента. Снятие отметки с других элементов (очевидно) обрабатывается ListView. Если ни один элемент не должен быть проверен (checkIndex равен нулю), мы должны использовать clearChoices () , чтобы убедиться, что ничего не проверено. Это полезно в тех случаях, когда отмеченный элемент был удален из списка, а другой элемент занял позицию. Если мы не очистим выбор, ListView проверит эту позицию, хотя checkIndex имеет значение null.
void updateCheckedItem() {
if (checkedIndex != null) {
listView.setItemChecked(selected, true);
} else {
listView.clearChoices();
}
}