Android Gallery异步图片加载

时间:2011-02-28 20:24:28

标签: android image asynchronous download gallery

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

     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 个答案:

答案 0 :(得分:3)

您必须正确标记图像视图,以便异步任务可以在从缓存或网络中检索图像后更新它们:

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

答案 1 :(得分:1)

以下代码适用于我的项目。

每次使用ViewHolder而不是新的ImageView(Context c),如果在viewholder中有2个或更多视图,只需使用如下代码(使用findViewById()):

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

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

你最好在xml中扩展一个布局,并在getView()中编写视图的样式代码。因为它是时间敏感的。

从LazyList demo修改的代码,我希望这对你有用。最好祝福!

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;
}

答案 2 :(得分:0)

  

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

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