2011-02-28 147 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; 
}