2011-06-08 51 views
1

我有一個Android圖庫ImageAdapter實施getView()(如下所示):抓取遠程圖像Asynchrounously一個ImageAdapter

public View getView(int arg0, View arg1, ViewGroup arg2) { 
    String strURL = "http://app1.exactdev.co.za/android/celebs/celeb" + (arg0+1) + ".jpg";  
    Bitmap bm = RemoteBitMapHelper.getRemoteBitMap(strURL); //synchronous request    

    ImageView i = new ImageView(ctx);  
    i.setImageBitmap(bm); 
    return i; 
} 

我怎樣才能讓getView完成自己的工作異步?

回答

1

簡單的答案是你可以把它放在一個AsyncTask中。像下面這樣(未經測試)

public View getView(int arg0, View arg1, ViewGroup arg2) { 

    final ImageView i = new ImageView(ctx); 
    String url = "http://app1.exactdev.co.za/android/celebs/celeb" + (arg0 + 1) + ".jpg"; 

    new AsyncTask<String, Void, Bitmap>() { 

     @Override 
     protected Bitmap doInBackground(String... urls) { 
      return RemoteBitMapHelper.getRemoteBitMap(urls[0]); 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 
      if (result != null) { 
       i.setImageBitmap(result); 
      } 
     } 

    }.execute(url); 

    return i; 
} 
+0

沒有真正改善我的畫廊表現,就像我希望的那樣,但是這種作品像我預期的那樣,就像一個魅力!快速實現一個簡單的公共靜態Map picsMap = new HashMap ()來緩存已經下載的圖像,性能提升300%。非常感謝! – n4rzul 2011-06-08 12:04:20

+0

我正在慢慢地學習如何一切與Android API一起嘮叨。這個答案幫了很大忙。 – n4rzul 2011-06-08 12:07:03

+0

可以爲同一項目調用多次getView:http://stackoverflow.com/questions/2618272/custom-listview-adapter-getview-method-being-called-multiple-times-and-in-no-coh – 2011-09-27 04:39:56