К сожалению, элементы в ListView, как правило, являются только видимыми.Вместо этого вы должны выполнить итерацию ListAdapter.
Например, в некоторых моих кодах у меня есть следующее:
SimpleCursorAdapter adapter = (SimpleCursorAdapter) this.getListAdapter();
int iNum = adapter.getCount();
for(int i=0; i<iNum; i++)
{
Cursor c = (Cursor) adapter.getItem(i);
// Now you can pull data from the cursor object,
// if that's what you used to create the adapter to start with
}
РЕДАКТИРОВАТЬ: В ответ на комментарии jeffamaphoneвот еще кое-что ... если вы пытаетесь работать с каждым элементом пользовательского интерфейса, тогда getChildAt
, безусловно, более уместно, так как он возвращает представление для подпункта, но в целом вы все еще можете работать только с теми, которые видны ввремя.Если это все, что вас волнует, тогда хорошо - просто убедитесь, что вы проверяете null
, когда вызов возвращается.
Если вы пытаетесь реализовать что-то вроде того, что было у меня - a «Выбрать все / Выбрать нет / Инвертировать»Функция «Выбор» для списка, который может выходить за пределы экрана, тогда вам гораздо лучше вносить изменения в адаптер или использовать внешний массив (если, как в моем случае, в адаптере не было места, чтобы сделать шаг)), а затем вызовите notifyDataSetChanged()
в адаптере списка.Например, моя функция «Инвертировать» имеет такой код:
case R.id.selectInvertLedgerItems:
for(int i=0; i<ItemChecked.length; i++)
{
ItemChecked[i] = !ItemChecked[i];
}
la.notifyDataSetChanged();
RecalculateTotalSelected();
break;
Обратите внимание, что в моем случае я также использую пользовательский подпункт ListView, используя adapter.setViewBinder(this);
и пользовательскую функцию setViewValue(...)
.
Более того Если я правильно помню, я не думаю, что «позиция» в списке обязательно совпадает с «позицией» в адаптере ... она сноваоснованный больше на позиции в списке.Таким образом, даже если вы хотите «50-й» элемент в списке, если он первый видимый, getChildAt(50)
не вернет то, что вы ожидаете.Я думаю, что вы можете использовать ListView.getFirstVisiblePosition()
для учета и корректировки.