2011-02-16 104 views
3

我有一個非常簡單的Activity來擴展ListActivity。 我重寫方法onListItemClick執行一些自定義操作。Android ListActivity onListItemClick調用適配器getView

我在日誌中看到的是,我點擊一個列表項目(爲了讓我的列表由自定義視圖組成),我們調用了適配器方法getView

現在,我想知道這是否是正確的行爲。如果是我可能有問題。

問題是我的列表項有圖像,這些圖像是從網頁中提取的,當我點擊列表項時,對適配器的調用會導致對Web的調用刷新列表中的圖像並將它們混淆起來原因。

任何人都可以遮光嗎?

這是我getView

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ContentListItemView cv = null; 
     if (convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(this.context); 
      convertView = (RelativeLayout) inflater.inflate(this.layout, null); 
      cv = new ContentListItemView(convertView); 
     } else { 
      cv = (ContentListItemView) convertView.getTag(); 
     } 
     Log.d(this.getClass().getSimpleName(), "position: " + position); 
     cv.init(getItem(position)); 
     convertView.setTag(cv); 
     return convertView; 
    } 

,這是我OnListItemClick

protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     //Log.d(this.getClass().getSimpleName(), position + " " + id); 
     Intent contentDetailsIntent = new Intent(this, ContentDetailsActivity.class); 
     contentDetailsIntent.putExtra("com.tamtamy.jatta.content_list_item_selected", position); 
     contentDetailsIntent.putExtra("com.tamtamy.jatta.datasource", ContentDetailsActivity.CONTENT_LIST); 
     contentDetailsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(contentDetailsIntent); 
    } 
+2

適配器是一個對象。對象不被調用。方法被調用。我建議你修改你的問題來修正你的「適配器被調用」語句,對你的適配器上調用的方法是絕對正確的。 – CommonsWare 2011-02-16 23:36:11

回答

1

如果它發生,那麼它不是真正相關的,如果它的正確與否,這是你必須處理的事情。

我的建議是本地緩存圖像in your apps cache directory,所以你不需要每次都通過網絡抓取它們。

要注意的另一件事是列表項視圖確實被回收,因此您的應用程序不應該假定在圖像被提取之前傳遞的ContentListItemView在圖像下載後仍然是同一行。做出這個不正確的假設通常是ListView行中圖像不正確的原因。

看看multi-threading blog post on Googles Android developers blog討論圖片下載,並有一個鏈接到谷歌代碼的例子,應該給你一個如何解決你的圖像加載問題的好例子。

相關問題