Android: получение количества видимых детей в просмотре списка - PullRequest
22 голосов
/ 19 июля 2011

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

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

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

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

Спасибо!

Ответы [ 3 ]

63 голосов
/ 19 июля 2011

Это быстрый способ узнать количество видимых детей:

int visibleChildCount = (listView1.getLastVisiblePosition() - listView1.getFirstVisiblePosition()) + 1;
30 голосов
/ 19 июля 2011

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....
    }
}
4 голосов
/ 15 августа 2014

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

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

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

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

...