2015-01-14 3 views
0

Я ищу, чтобы зарегистрировать, когда элемент в GridView (или ListView, возможно, тоже) удален или содержимое удалено или больше не видно, чтобы фоновая задача может быть отменена немедленно.Отмена фоновых задач вида «вне поля зрения» в GridView

Если моя сетка выглядит следующим образом:

* * * 
* * * 
* * * 

Каждая точка представляет изображения, загруженные из устройства, на фоне задач. Затем прокрутите вниз очень быстро, прежде чем все изображения будут отображены, он все равно будет ждать выполнения всех задач.

Как это можно отменить? Кажется, это не из адаптера.

Если первая строка (вверх) выходит из «картинки», так сказать, отмените эти три задачи, если они есть, и сразу загрузите третий ряд (вниз).

Я вызываю это из GridView или обрабатываю это с адаптера. Пробовал искать событие из ImageView, которое позволяет мне знать, если он не сфокусирован или его содержимое было удалено. Ничего не найдено. Поскольку View также используются повторно.

Пример:

* * * <- Not visible, cancel loading task (at the moment will finish loading these images) 
- - - 
* * * 
* * * 
* * * <- Now visible, prioritize these (these will come last, not first) 
- - - 
* * * <- Not visible yet 
* * * <- Not visible yet 
+0

обычно считает, что перестают быть видимыми перерабатывается. Вы можете получить скрытый вид в «getView» вашего адаптера (convertView) – njzk2

ответ

1

Вы не должны загружать изображения во время прокрутки, поэтому вы можете добавить скроллинг слушатель в GridView/ListView и когда пользователь прокручивает вы должны отменить загрузку изображений.

gridView.setOnScrollListener(new OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView listView, int scrollState) { 
      if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) { 
       //stop loading 
      } else { 
       //start loading 
      } 
     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     } 
    }); 

Дополнительная информация:

http://leftshift.io/6-ways-to-make-your-lists-scroll-faster-than-the-wind

+0

При прокрутке я установил переменную для адаптера, чтобы не загружать изображения, когда он был изменен на холостой, я установил его для загрузки изображений снова. Но мне нужно вызвать notifyData, чтобы он что-то сделал после этого. Хотя старые изображения уже загружены (но правильные изображения в позиции), снова загружаются этим методом. Это не совсем оптимально. – Deukalion

+0

@Deukalion кеширует ваши изображения с помощью 'LruCache'. Смотрите эту ссылку http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html –

Смежные вопросы