2011-02-28 122 views
2

是否可以使用此项目的异步图像加载器http://open-pim.com/tmp/LazyList.zip与图库小部件? 我试过了:Android图库异步图像加载

 public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView=new ImageView(activity.getBaseContext()); 

    imageLoader.DisplayImage(urlList.get(position), activity, imageView); 

    imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
    imageView.setLayoutParams(new Gallery.LayoutParams(150, 150)); 

    return imageView; 
} 

但它没有效果。

回答

3

您必须适当地标记你的图像视图,以便异步任务可以更新他们一旦图像从缓存或网络检索:

imageLoader.DisplayImage(urlList.get(position), activity, imageView); 
imageView.setTag(urlList.get(position)); 
+0

我已经添加它,现在我接收运行时在异常这里ImageLoader的类:活性=(活动)photoToLoad.imageView.getContext();这是类别转换异常 – 2011-02-28 21:13:19

+0

尝试仅在创建ImageView时将活动对象作为上下文传递。 – 2011-02-28 21:23:08

0

imageLoader.DisplayImage(urlList.get(位置),活动,imageView); imageView.setTag(urlList.get(position));

此代码正常工作。我们可以将它用于RemoteViews中的图像浏览。

1

下面的代码对我的项目工作正常。

使用ViewHolder,而不是新的ImageView(上下文C)每一次,如果你有viewholder 2个或多个视图,就像下面的代码(使用findViewById()):

holder.iv =(ImageView的)convertView .findViewById(R.id.iv);

holder.tv =(TextView)convertView.findViewById(R.id.tv);

而你最好在xml中扩充一个布局,并在getView()中编写视图styles.don't的代码,因为它对时间敏感。

从LazyList演示版本修改的代码,我希望这适用于你。祝你好运!

static class ViewHolder{ 
    ImageView iv; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View holder = null; 
    if(convertView==null){ 
     convertView = inflater.inflate(R.layout.item, null); 
     holder = new ViewHolder(); 
     holder.iv = (ImageView) convertView; 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    imageLoader.DisplayImage(data[position], activity, holder.iv); 
    return convertView; 
}