Есть ли способ узнать, сколько элементов отображается в списке?

Я хочу выполнить определенное действие с элементами списка, которые пользователь может видеть без прокрутки. Есть ли способ получить количество отображаемых элементов или есть какой-либо другой способ приблизиться к этому?


person NotACleverMan    schedule 13.05.2011    source источник
comment
Проверьте этот вопрос.   -  person Flo    schedule 13.05.2011
comment
Это очень похоже на то, что я хочу, за исключением того, что по какой-то причине getLastVisiblePosition всегда возвращает -1. Знаете ли вы какую-либо причину, по которой это произошло бы?   -  person NotACleverMan    schedule 13.05.2011
comment
Когда вы вызываете метод getLastVisiblePosition()?   -  person Flo    schedule 13.05.2011
comment
После того, как я заполнил свой ListView. Это последняя вещь в onCreate()   -  person NotACleverMan    schedule 13.05.2011
comment
Mh Я думаю, что это может быть слишком рано, так как на данный момент Android еще не закончил упорядочивать все элементы View. Таким образом, Android еще не может сказать вам, какой будет последняя видимая позиция. Я думаю, вам нужно вызвать метод через некоторое время после завершения onResume().   -  person Flo    schedule 13.05.2011
comment
Извините, на самом деле это уже последнее, что есть в onResume, и при нажатии кнопки тоже. Я просто не думал, что упоминание о них что-то изменит.   -  person NotACleverMan    schedule 13.05.2011
comment
Mh, когда он находится в onResume(), это еще слишком рано, но, как вы говорите, он также не работает в OnClickListener, причина такого поведения должна быть чем-то другим. OnClickListener определенно не вызывается до тех пор, пока представление не будет готово.   -  person Flo    schedule 13.05.2011


Ответы (3)


Я не знаю, каково ваше требование, но знать элементы списка, которые в настоящее время не видны

ListView.getFirstVisiblePosition();     
ListView.getLastVisiblePosition();
person ingsaurabh    schedule 13.05.2011
comment
Это именно то, что мне нужно. Спасибо. - person NotACleverMan; 13.05.2011
comment
Знаете ли вы какую-либо причину, по которой getLastVisiblePosition возвращает -1? - person NotACleverMan; 13.05.2011
comment
если в ListView нет элемента - person ingsaurabh; 13.05.2011
comment
У меня есть 10 жестко закодированных, и я вызываю getLastVisiblePosition после того, как они показаны, но он все равно возвращает -1 - person NotACleverMan; 13.05.2011
comment
проверьте, возвращает ли метод getCount() правильное значение перед вызовом последнего элемента, также разместите здесь свой xml - person ingsaurabh; 13.05.2011
comment
@NotACleverMan ListView нужно сначала измерить и разложить. Установите адаптер и установите OnGlobalLayoutListener на ViewTreeObserver. После события onGlobalLayout вы можете вызывать эти методы. - person Yaroslav Mytkalyk; 16.01.2015

Вы можете найти количество элементов listview ниже:

int count = listview.getChildCount();
person Nikhil    schedule 13.05.2011

Ваш ListView может реализовать onScrollListener, где вы можете переопределить его метод onScroll. Метод получает следующие аргументы:

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){}

Возможно, вы можете начать с этого.

person Tomislav Novoselec    schedule 13.05.2011