У меня есть ListView
, в котором используется пользовательский макет с 5 дочерними View
объектами (4 TextView
и 1 CheckBox
) в пользовательском макете. Только TextViews
связаны, однако - CheckBox
не имеет соответствующего поля в базе данных. Цель CheckBox
- просто определить, какие из отображаемых элементов я бы хотел обработать на «следующем шаге». Я использую пользовательский ViewBinder
для правильного назначения текстовых значений (поскольку некоторые значения из БД являются датами и т. Д.).
Часть пользовательского интерфейса состоит из трех кнопок - «Все», «Нет» и «Инвертировать», которые я использую для переключения состояния каждого элемента в списке. Например, для кнопки «Все» я делаю это с помощью следующего кода (который, я теперь знаю, НЕ верен - я включил его, чтобы показать, что я пытаюсь сделать):
ListAdapter la = getListAdapter();
ListView lv = getListView();
int iCount = la.getCount();
for(int i=0; i<iCount; i++)
{
View vv = lv.getChildAt(i);
CheckBox cb = (CheckBox) vv.findViewById(R.id.ledgerItemCheckBox);
cb.setChecked(true);
}
Это работает нормально, если количество элементов в списке не превышает размер списка, поэтому все элементы всегда видны. Однако когда я превышаю это число, функция 'getChildAt' иногда возвращает ноль, потому что (если я правильно понимаю) она не предназначена для возврата всех элементов в списке, только тех элементов, которые видны, что приводит к NullPointerException
.
Как правильно установить CheckBox
на всех видах, даже если они не видны?