Перебор элементов ListView в Android - PullRequest
6 голосов
/ 17 января 2011

Я хочу перебрать список элементов в ListView.Этого кода ниже недостаточно для итерации всех элементов в списке из-за странного поведения функции getChildCount (), которая возвращает только видимое количество элементов.

for (int i = 0; i < list.getChildCount(); i++) {
   item = (View)list.getChildAt(i);
   product = (Product)item.getTag();
   // make some visual changes if product.id == someProductId
}

Мой экран отображает 7 результатов, и если в списке более 7 элементов, доступ к восьмому элементу или около того невозможен. Только видимые элементы.

Должен ли я использовать ListIterator вместо этого?

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 января 2011

Итак, @kcoppock решил вашу первую проблему, похоже, у вас есть другая проблема.Как обновить вид элемента?Приложение Android для Android показывает один из способов:

  1. создать свой собственный элемент представления списка следующим образом:

    public class MyListItem extends RelativeLayout {
    ...
    }
    

    в файле макета элемента представления списка:

    < MyListItem  android:layout_width=.....>
    ...
    </ MyListItem >
    
  2. и в вашем коде, когда ваш элемент просмотра будет виден, зарегистрируйте MyListItem в качестве прослушивателя, изменившего данные (данные за вами).Я имею в виду, что когда ваши данные изменились, вы можете обновить элемент напрямую.

Проверьте исходный код приложения SMS, чтобы узнать больше.

1 голос
/ 17 января 2011

Вам необходимо настроить метод getView() адаптера списка и поместить в него чек, чтобы проверить, совпадает ли текущий идентификатор элемента:

Product product = items.get(position);
if(product.id == someProductId) {
    //make visual changes
} else {
    //reset visual changes to default to account for recycled views
}

Поскольку обычно только видимые элементы существуют только в определенном месте.время getView вызывается всякий раз, когда нужно увидеть больше.Они создаются в то время, как правило, рециркулируя представления из теперь невидимых элементов в списке (следовательно, почему вы хотите сбросить изменения, если критерии НЕ соответствуют).

0 голосов
/ 17 января 2011

Количество представлений в ListView (7) отличается от количества элементов в адаптере (более 7). Попробуйте использовать BaseAdapter.

...