1

У меня есть список, который загружается в изображение предварительного просмотра в строку, но когда я немного прокручиваюсь и заставляю строку снова появляться, изображение, похоже, перезагружается, как если бы оно снова загружалось и снова декодировалось , Я использую AQuery прямо сейчас, чтобы загрузить изображение, но я попробовал загрузчик изображений Novoda и универсальный загрузчик изображений Nostra, а ImageViews «перезагрузили» себя.ListView «перезагружает» ImageView на прокрутке, как я могу предотвратить это?

Вот мой упрощенный метод GetView (изображение Вставляется в нижней части):

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

FrameLayout postItem = (FrameLayout) convertView; 
//final PostHolder holder; 
if(null == postItem){ 
    LayoutInflater inflater = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    postItem = (FrameLayout) inflater.inflate(R.layout.column_post, parent, false); 
} 

final AQuery aq = new AQuery(postItem); 

    JSONObject thePost = null; 
    try { 
     thePost = mPosts.getJSONObject(position).getJSONObject("data"); 
    } catch (Exception e) { 
     System.out.println("errreoroer"); 
    } 

    String postThumbnailUrl = null; 
    String author = null; 
    String domain = null; 
    String subreddit = null; 
    int votes = 0; 
    int numComments = 0; 
    long createdUtc = 0; 

    final HashMap<String, Object> postData = new HashMap<String, Object>(); 

    try { 

     postData.put("title", thePost.getString("title")); 

     //parse thumbnail 
     postThumbnailUrl = thePost.getString("thumbnail"); 

     postData.put("url", thePost.getString("url")); 

     postData.put("permalink", thePost.getString("permalink")); 

     postData.put("is_self", thePost.getBoolean("is_self")); 

     //whent it was made 
     createdUtc = thePost.getLong("created_utc"); 

     //author 
     author = thePost.getString("author"); 

     subreddit = thePost.getString("subreddit"); 

     domain = thePost.getString("domain"); 

     votes = thePost.getInt("ups") - thePost.getInt("downs"); 

     //num_comments 
     numComments = thePost.getInt("num_comments"); 

    } catch (Exception e) {}  


    //gets the direct url to the image 
    mSmartContent.getDirectMedia((String)postData.get("url"), new Callbacks() { 

     @Override 
     public void callback(Object obj) { 

      Bundle cData = (Bundle)obj; 

      if (cData.getString("type") == "pic") { 

       aq.id(R.id.imagePreview).visibility(View.VISIBLE).image((String)cData.getString("url")); 


      } else { 

       aq.id(R.id.imagePreview).visibility(View.GONE); 

      } 


     } 



    }); 


    return postItem; 

} 

Спасибо заранее.

+1

Универсальный загрузчик изображений и загрузчик изображений Novoda *** не перезагружают *** изображение снова из Интернета, но извлекают изображения из кеша, если он уже загружен один раз. –

+0

Я понимаю, что они этого не делают, мне просто интересно, почему изображения занимают много времени, чтобы загрузить обратно из кеша, когда они меньше мегабайта. – vivatus

+0

Если вы посмотрите на эти библиотеки, я бы поспорил, что у них есть какой-то предел использования памяти, прежде чем они начнут перерабатывать растровые изображения. У них могут быть API-интерфейсы, которые позволят вам преодолеть эти ограничения, но в противном случае это было бы ожидаемым поведением. Посмотрите на свой выход LogCat, и они будут представлять собой сообщения о сборе мусора. –

ответ

0

Не сохраняя изображения в памяти, их необходимо перезагрузить (будь то из кеша или из сети).

Вы можете избежать появления этого путем предварительной загрузки (привязки) своих представлений до того, как они появятся в окне просмотра, подобно тому, как ViewPager загружает страницы, которые находятся вне экрана, но не имеет отношения к загрузчикам изображений.

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