2011-07-16 74 views
1

我讀了另一篇文章,我沒有找到解決方案。我創建了一個自定義的ListView。此列表中的每一項都是複雜項目,包含ImageView加上兩個TextViews。在適配器被應用並且列表被填滿之後,我想要更改ImageView中的圖像,但是我希望不會發生點擊事件。如何更改ListView中的圖像?

private class ListAdapter extends ArrayAdapter<RSSItem> { 

    private List<RSSItem> items; 

    public ListAdapter(Context context, int textViewResourceId, List<RSSItem> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_item, null); 
     } 
     RSSItem item = items.get(position); 
     if (item != null) { 
      ImageView image = (ImageView) v.findViewById(R.id.ivImage); 
      TextView title = (TextView) v.findViewById(R.id.tvTitle); 
      TextView description = (TextView) v.findViewById(R.id.tvDescription); 
      if (image != null) { 
       Drawable d = getResources().getDrawable(R.drawable.icon); 
       image.setTag(item.getImageURL()); 
       image.setBackgroundDrawable(d); 
      } 
      if (title != null) { 
       title.setText(item.getTitle()); 
      } 
      if (description != null) { 
       description.setText(item.toString()); 
      } 
     } 
     return v; 
    } 
} 

我試圖讓語境,但我不知道如何訪問正確的ImageView的。 我感謝任何幫助!

+0

並且你想根據什麼條件改變它?在** AsyncTask **完成後執行 – Stephan

+0

。 – nenito

回答

3

將一個字段添加到您的RSSItem類中,該類告訴適配器要顯示哪個圖像。在您的AsyncTask.onPostExecute方法中更改該值,然後調用ArrayAdapternotifyDataSetChanged方法。

您的getView()重寫應該使用您放入RSSItem中的值來選擇要顯示的圖像。當您致電notifyDataSetChanged()時,它會再次被調用。圖片您ArrayAdapter內

2

延遲加載

有很大的在線教程,顯示如何做到這一點完整的代碼示例,還包括高速緩存,所以你不要下載圖片不止一次。

此外貨架機器人應用,由谷歌工程師也具有多線程,延遲加載和圖像的高速緩存用於arrayadapter的實例中的一個寫入自由開放源碼的應用程序。我高度建議您通讀此代碼。

1

,如果你想給的ImageView從適配器的getView()函數的外部改變你可以試試這個。

List<View> listOfViews = new ArrayList<View>(); 
listView1.reclaimViews(listOfViews); 
for (View v : listOfViews) 
{ 
    ImageView image = (ImageView)v.findViewById(R.id.image); 
    image.setBackgroundDrawable(drawable); 
}