У меня необычная проблема с моим ListView
. В настоящее время у меня есть метод "deselectAll()
", который перебирает элементы в моем ListView и устанавливает их непроверенными (элементы реализуют интерфейс Checkable
). Переменная «флажок» изменяется правильно (представление отчетов не проверяется), но визуальный индикатор (в данном случае изменение фона) не отображает представление как непроверенный (фон остается цветом отмеченного элемента).
Я повторяю и отменяю выбор из своего списка, вот так (я также добавил свои отклонения):
private ListView vw_entryList;
private void deselectAll() {
for (int i = 0; i < sAdapter.getCount(); i++) {
((Entry)vw_entryList.getItemAtPosition(i)).setChecked(false);
}
}
Код для моего реализованного setChecked()
выглядит следующим образом:
public void setChecked(boolean checked) {
_checked = checked;
if (checked) {
setBackgroundResource(R.drawable.listview_checked);
}
else {
setBackgroundResource(R.drawable.listview_unchecked);
}
invalidate();
}
Следует отметить, что при нажатии элементов они переключаются между проверкой и снятием флажка в OnItemClickListener
, и это работает нормально, с изменением фона и всем остальным. Код для переключения очень похож:
public void toggle() {
_checked = !_checked;
setBackgroundResource(_checked ?
R.drawable.listview_checked : R.drawable.listview_unchecked);
invalidate();
}
Единственное отличие, которое я вижу, это то, откуда вызываются методы. toggle()
вызывается из метода OnItemClickListener.onClick()
, тогда как мой deselectAll()
вызывается из стандартного OnClickListener
кнопки, оба в одном классе. У кого-нибудь есть идеи относительно того, почему фон не меняется, когда я вызываю функцию deselectAll ()?