количество просмотров списка и количество адаптеров в Android

Почему listview.getChildCount() и adapter.getCount() возвращают разные значения? У меня есть метод onScroll, и внутри него, если я вызываю методы выше, каждый из них возвращает разные значения. Кто-нибудь знает, почему?


person Cote Mounyo    schedule 02.10.2013    source источник
comment
См. это   -  person Shashank Kadne    schedule 02.10.2013


Ответы (2)


ListView.getChildCount() возвращает количество Views на экране. Adapters getCount() возвращает общее количество объектов в вашем списке.

getChildCount()

getCount()

У вас может быть 50 String, скажем, в ArrayAdapter, но в текущий момент на экране отображается только 10, поэтому ваш счет ListView будет равен 10, а ваш счет Adapter будет равен 50.

person codeMagic    schedule 02.10.2013
comment
Если я делаю listview.getChildAt(index), должно ли index быть [0,listView.getChildCount() ) или индекс может быть чем-то между [0,adapter.getCount() )? - person Cote Mounyo; 02.10.2013
comment
[0,listView.getChildCount() ). В противном случае вы могли бы получить IndexOutOfBoundsException, потому что, как показывает мой пример, у вас может быть больше элементов в вашем List, чем в настоящее время в вашем ListView. - person codeMagic; 02.10.2013
comment
Теперь вы можете сделать по-другому, но вам нужно будет обернуть try/catch, чтобы поймать IOB Exception - person codeMagic; 02.10.2013

adapter.getCount() возвращает общее количество содержащихся в нем объектов. listView.getChildCount() возвращает количество просмотров, показанных в этом списке. Адаптер использует механизм кеширования, а многие представления используются повторно, поэтому его номер отличается от показанного на adapter.getCount()

person Roman Bugaian    schedule 02.10.2013
comment
Спасибо за публикацию. +1 - person Cote Mounyo; 02.10.2013