2010-02-19 50 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