Страницы

Поиск по вопросам

суббота, 22 июня 2019 г.

запуск метода элемента listview, который на экране

нужно загружать картинку в элементы listview, но так как элементов может быть много, загружать их все сразу не очень разумно, как сделать так, чтобы метод запускался только у тех жлементов, что на экране, пробовал так:
list.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { // Log.d(LOG_TAG, "scrollState = " + scrollState); }
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { for(int i = firstVisibleItem; i <= visibleItemCount; i++){ element.get(i).loadCover(); } list.invalidate(); } });
но загружаются только первые 6 картинок, а дальше все


Ответ

Для подобной(Относительно. Ленивая асинхронная загрузка изображений) есть маленькая библиотека https://github.com/thest1/LazyList
Проблема вашего кода - вы считаете что visibleItemCount - общее кол-во элементов в адаптере, но это кол-во видимых элементов. Т.е. после шестого элемента вы запускаете цикл с параметром i=7;i<6.
Можно сделать так. Хотя метод onScroll и плохо работает при быстрой прокрутке.
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(((firstVisibleItem + visibleItemCount) == totalItemCount) && totalItemCount > 0)){ loadNewData(); } list.invalidate(); }
или слегка поправить ваш код
for(int i = firstVisibleItem; i <= (firstVisibleItem+visibleItemCount)&&i<=totalItemCount; i++){ element.get(i).loadCover(); }

Комментариев нет:

Отправить комментарий