2014-10-09 5 views
2

У меня есть ListView с очень большим числом элементов и я поставил средний элемент в центре экрана (mRootLayoutHeight является высота экрана)listview.getChildAt (я) возвращение NULL

listview.setSelectionFromTop(adapter.getCount()/2,mRootLayoutHeight/2); 

Но когда я пытаюсь получить доступ ко всем видимым элементам списка на экране с помощью

for(int i=listview.getFirstVisiblePosition();i<=listview.getLastVisiblePosition();i++) 

     View v=listview.getChildAt(i); 

View v всегда NULL. Почему это?

ответ

2

getFirstVisiblePosition, как per the documentation возвращается:

Возвращает позицию внутри данного адаптер установлен для первого элемента, отображаемого на экране.

Итак, если у вас есть 100 элементов в вашем наборе данных, и вы прокручиваете список вниз, вы можете посмотреть пункты 15-23. Таким образом, вы будете перебирать i=15 до i=23.

Метод getChildAt относится к классу ViewGroup и возвращает элементы на этом указателе на экране - поэтому, если на экране имеется 8 элементов (как показано выше), вы сможете получать только предметы из индекс 0 - 8, хотя эти элементы существуют в другом месте в наборе данных.

Итак, в примере, который я предоставил здесь, если вы попытались получить представление по индексу 15, вы получите нуль, поскольку в группе представлений ListView всего 8 представлений.