我有一个自定义数组适配器用于包含图像视图的列表视图。在自定义适配器类中,我有一个asynctask,从列表中每个项目的唯一URL下载一个唯一的图片。问题是每个项目的ImageViews不断变换图片。请问通过自定义数组适配器类中的AsyncTask从URL获取图像有什么问题。
需要帮助(以任何形式)
答案 0 :(得分:0)
看看那些可以帮助你的库:)
Picasso
Universal Image Loader
答案 1 :(得分:0)
为ListView(或任何其他适配器源视图)启动异步加载的问题是,一旦它们离开屏幕,视图就可以重用。解决这个问题的最简单方法是使用库来为你完成,我最喜欢的是AQuery
如果你不想走这条路,那么你必须自己扮演角色。为此,您需要检查AsyncTask完成时的视图是否显示与启动时相同的内容。在适配器setTag(tag)
上返回的视图上调用getView()
。然后在将图像设置为ImageView之前,在视图上调用getTag()
并检查它是否与您设置的对象相同。看起来应该是这样的:
final View view = MY VIEW;
final Object tag = new Object();
view.setTag(tag);
new AsyncTask() {
...
public void onPostExecute(Bitmap bar) {
if(tag.equals(view.getTag()) {
imageView.setImage(bar);
}
}
...
}.execute();
return view;
然后你可以开始缓存等等。复杂吧?所以是的,你应该使用一个库。