我目前正在使用自定义适配器在ListView中每行显示一个ImageView和两个TextView。
在重写的getView的getView中,我有ImageView的代码:
final ImageView img = (ImageView) view.findViewById(R.id.rowImg);
new Thread(new Runnable() {
public void run() {
final BitmapDrawable b = downloadAvatar(urlToDownload);
img.post(new Runnable() {
public void run() {
img.setImageDrawable(b);
}
});
}
}).start();
downloadAvatar方法基本上只使用AndroidHttpClient和HttpGet。上面的方法有效,但我的问题是如何优化它?滚动是不稳定的;我知道它可能会调用getView()并在每次进入可视区域时下载图像。有什么提示吗?
答案 0 :(得分:1)
请参阅下面的Lazy Loading listview的源链接和通用图像加载器示例,它可能对您有所帮助。
答案 1 :(得分:0)
在您的情况下,您需要执行所谓的“延迟加载图像”,这将在下载后缓存这些图像。看看这个:Lazy load of images in ListView
答案 2 :(得分:0)
我建议使用ignition-library
,它有一个名为RemoteImageView
的组件,它将加载异步的url图像,并且库也会保留这些图像的缓存,因此不会每次都下载它们是时候重新创建ListView
行了。
我使用它,我发现它非常有用且强大。
答案 3 :(得分:0)
这是一个选项:
在getView
内查看您是否已下载当前图片。如果尚未下载 - 下载并将其存储在您选择的目录中。如果它存在于该目录中 - 只需加载它。
根据图像大小和数量,您还可以制作某种缓存来存储可见所需的图像对象(可能是可见的上方和下方最近看不见的)。