Для приложения, над которым я работаю, я пытаюсь получить список ListView. Для этого у меня есть следующий фрагмент кода:
View listItem = mListView.getChildAt(i);
Однако это работает только для детей, которые находятся в поле зрения. Мне нужно также охватить детей, которых нет в виду. Как мне это сделать?
EDIT:
Сравнивая предложенные методы с тем, который я уже использовал, я нахожу следующее:
RelativeLayout listItem1 = (RelativeLayout) mListView.getAdapter().getView(i, null, mListView);
RelativeLayout listItem2 = (RelativeLayout) mListView.getChildAt(i);
Log.d("Checks", "listItem1: " + listItem1);
Log.d("Checks", "listItem2: " + listItem2);
08-27 14:16:56.628: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.628: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.628: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.628: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem2: [email protected]
listItem2 указывает на фактический вид в ListView, который я хочу, за исключением того, что он работает только для просмотров, которые находятся в поле зрения. Из файла журнала вы можете видеть, что listItem1 и listItem2 не соответствуют.
ИЗМЕНИТЬ 2:
Я придумал следующее:
for (int i = 0; i < mListView.getCount(); i++) {
RelativeLayout listItem = (RelativeLayout) mListView.getAdapter().getView(i, mListView.getChildAt(i), mListView);
}
Это возвращает представления правильно для всех видимых элементов в списке. Однако он возвращает другой вид для тех, которые не отображаются.
ИЗМЕНИТЬ 3:
Благодаря nfirex у меня есть рабочий ответ. Это вернет представления, даже если они не отображаются непосредственно:
public View getViewByPosition(int position, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (position < firstListItemPosition || position > lastListItemPosition ) {
return listView.getAdapter().getView(position, listView.getChildAt(position), listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}