нужно загружать картинку в элементы 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();
}
Комментариев нет:
Отправить комментарий