Android: получение количества видимых детей в списке

Есть ли способ получить подсчет количества видимых дочерних элементов списка?

У меня есть список с информацией, связанной с базой данных, которая может быть изменена в любое время. Когда база данных изменена, я отправляю широковещательную рассылку, уведомляющую класс ui, обрабатывающий представление списка. Затем дочерний элемент, относящийся к измененным данным, обновляется. Я достигаю этого, предоставляя каждому элементу listview тег, а затем повторяя над списками, чтобы найти строку, соответствующую тегу из трансляции.

Я хочу только перебирать видимых детей. Мне не нужно вручную обновлять просмотры, которые не видны, поскольку они будут отражать новые данные при их создании. Я сейчас перебираю listView.getfirstVisiblePosition () в listView.getChildCount (). Это лучше, чем ничего, поскольку я не рассматриваю строки над видимыми строками, но я также не хочу рассматривать строки под ними.

Я проверил страницу listView разработчиков Android и ничего не нашел. Кто-нибудь знает, как я могу получить количество видимых детей?

Благодаря!

Solutions Collecting From Web of "Android: получение количества видимых детей в списке"

ListView.getLastVisiblePosition (), это то, что вы ищете? Если нет, итерация через дочерние представления …

int count = 0; for (int i = 0; i <= listView.getLastVisiblePosition(); i++) { if (listView.getChildAt(i) != null) { count++; // saying that view that counts is the one that is not null, // because sometimes you have partially visible items.... } } 

Это быстрый способ подсчета числа видимых детей:

 int visibleChildCount = (listView1.getLastVisiblePosition() - listView1.getFirstVisiblePosition()) + 1; 

В связи с комментарием greg7gkb выше – просто хотел указать на случай, если кто-то использует это, чтобы он подсчитал ваш счет. Должен быть

 (listView1.getLastVisiblePosition() - listView1.getFirstVisiblePosition()) + 1 

Итак, если последним видимым было 8, а первым видимым было 5 , у вас было бы (8-5) +1 = 4, показывающее: 5,6,7 и 8.

Похоже, что А. Абири понял это правильно.