使用具有异步任务的适配器

时间:2013-11-15 22:35:45

标签: android listview android-listview

我有一个扩展BaseAdapter的类,我将其用于ListView。在该类的getView()方法中,我使用带有回调方法的AsyncTask来下载图像(一旦下载,我就存储它,所以我不必再次下载它)。当ListView首先加载项目时,只有第一项显示图像,然后开始更改图像(重复显示其他项目的图像)。后来其他项目也开始显示相同的行为。过了一会儿,他们停止循环图像,每个项目显示正确的图像。如果我滚动ListView项目再次开始循环图像。

如果我回收传递给convertView的{​​{1}}参数,则只会发生这种情况。如果我不这样做,图像需要很长时间才会显示出来,而我恐怕会创建太多新视图。

提前感谢任何建议,以使其正常运作。

1 个答案:

答案 0 :(得分:1)

实现这一目标的简单方法是转储所有自己的图像加载代码并使用已经处理过的代码,例如Square's Picasso。如果你不喜欢毕加索,有很多选择。

否则,您的任务需要了解回收,因此他们不会尝试更新现在需要不同图像的ImageView。例如,您可以使用setTag()上的getTag()ImageView来存储(并检索)ImageView当前所需的网址,如果该任务下载的图片是其他一些URL,请不要应用它。

但是,再次使用现有的库。这是2013年:很少有人应该推出他们自己的下载 - 使用图像 - { - 1}} - 行代码了。