0

我目前正在使用自定义适配器在 ListView 中每行显示一个 ImageView 和两个 TextView。

在适配器的覆盖 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() 并下载图像。有小费吗?

4

4 回答 4

1

请参阅下面的延迟加载列表视图的源链接和通用图像加载器示例,它可能会对您有所帮助。

延迟加载列表视图

Android 通用图像加载器

于 2012-07-09T12:44:40.887 回答
0

这是一个选项:

内部getView检查您是否下载了当前图像。如果尚未下载 - 下载并将其存储在您选择的目录中。如果它存在于该目录中 - 只需加载它。

根据图像大小和数量,您还可以制作某种缓存来存储可见(可能是可见上方和下方最接近的不可见)项目所需的图像对象。

于 2012-07-09T12:45:40.760 回答
0

在您的情况下,您需要执行所谓的“图像延迟加载”,一旦下载就会缓存这些图像。看看这个:ListView 中图像的延迟加载

于 2012-07-09T12:36:32.760 回答
0

我建议使用ignition-library具有名为 的组件RemoteImageView,它将异步加载 url 图像,并且该库还将保留这些图像的缓存,因此每次重新创建ListView行时都不会下载它们。

我使用它,我发现它非常有用且强大。

于 2012-07-09T12:36:55.500 回答