2016-03-29 2 views
-1

EDITED: Не понимаю, мой GridViewAdapter продлен ArrayAdapterRecyclerView отставание более чем GridViewAdapter при добавлении изображений

У меня есть RecyclerView и я добавляю изображения в ArrayList, и называя adapter.notifyDataSetChanged();, когда я сделал. Он немного отстает при прокрутке, когда изображения добавляются асинхронно.

У меня есть «GridViewAdapter», расширяющий ArrayAdapter, и я добавляю изображения в ArrayList, а затем вызываю ArrayAdapter.add() на держатель изображения напрямую. Он не отстает, когда изображения добавляются асинхронно.

EDIT 2: Реализация RecyclerView на самом деле использует set на ранее существовавшей позиции в arraylist (и замене старых данных). Реализация моего GridVIew использует add на арраисте (и добавляет совершенно новые данные). Я просто посмотрел на большую сложность arraylist - это O (1) для добавления и O (n) для поиска (для замены элемента). Будет ли это иметь какое-либо отношение к задержке?

Как сделать так, чтобы RecyclerView не отставал от этого крошечного бита?

+0

пожалуйста показать ваш ресайклер код вида. Это может быть не проблема с самими изображениями. –

+0

Что такое GridViewAdapter.add()? Это не компонент платформы или совместимости lib. –

+0

Пожалуйста, разместите код адаптера RecyclerView здесь –

ответ

0

Вы подумали о том, что нужно уменьшить размер предметов? Как и в случае не загрузки всех элементов, а только подмножества. Нагрузка 10 -> пользователь достигает нижней -> Загрузить еще 10.

0

Попробуйте это в методе OnBindViewHolder.

boolean flag = false; 
//Get url of the photo saved in model 
String src = list.get(position).ImageUrl; 
//Get the tag associated with it 
String newSrc = (String) holder.ivPlayerImage.getTag(); 
// if both equal set flag true  
if(newSrc.equals(src)){ 
       flag =true; 
      } 
      else{ 
       flag = false; 
      } 
// if flag not true, meaning image url has changed for particular entry , and so u load again otherwise no need to load again(This will reduce flickering) 
    if(!flag) { 
      //load imageurl in the imageview 
      holder.ivPlayerImage.setTag(src); 
     } 

Надеется, что это помогает

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