2010-02-19 71 views
1

我正按照Romain Guy的高效適配器樣本爲我的ListView使用自定義適配器。在將圖像從SD加載到ListView時提高ListView效率

在我的適配器我使用下面的代碼分配一個ImageView的一個jpg圖像存儲在SD的getView()方法:

File f=new File(MovieThumbs.get(position)); 

if(f.length() > 0) { 
    holder.thumb.setImageBitmap(BitmapFactory.decodeFile(MovieThumbs.get(position))); 
} 

當通過的大約200項的列表使用這種方法的應用彈在嘗試處理圖像時遭受不好的口吃。

有沒有更有效的解決方案呢?

回答

0

圖像需要在後臺線程中處理。回收視圖需要考慮在內。我試着在我的示例代碼中解決所有這些問題,它現在可以正常工作,您可以看一下Lazy load of images in ListView

1

而不是根據需要從列表適配器中加載圖像如何從您的活動的onCreate開始加載圖像的線程?隨着每個圖像加載,您可以觸發回調活動以在列表中顯示圖像。回調方法可能是:

void onImageDownloadComplete(int pos, BitMap bm) { 
    ListView lv = getListView(); 
    View listItem = lv.getChildAt(pos); 
    ImageView img = (ImageView)listItem.getChildAt(indexOfIcon); 
    img.setImageBitmap(bm); 
} 
+1

如果適配器中的getView方法正在使用視圖的回收,則會失敗。它會將錯誤的位圖設置在錯誤的位置。如果列表中有200個項目,我會使用回收來節省內存。 – 2010-05-15 06:34:50