2014-03-05 81 views
0

我有我的ListViewAdapter大問題。ListView ImageView加載相同的圖片

我的listview同時顯示了兩個entrys。每個條目都應該從我的服務器獲取不同的圖片。 第一個和第二個函數可以正常工作,但是如果我向下滾動,下一個函數將會有相同的圖片。

我的代碼看起來是這樣的:

if (viewHolder.imgPic != null) { 
    String strUrl = mainUrl+list.get(position).getUrl(); 
    new ImageDownload(viewHolder.imgPic).execute(strUrl); 
} 

我檢查的觀點,只是做它,如果它是空。

有人可以幫助我嗎? 感謝

+2

請提供適配器的更多的代碼。特別是完整的'getView' –

回答

1

從你的問題,我可以假設你不知道的ListViewrecycling mechanisem

基本上認爲,這種不可見的了(用戶滾動它的視線後),它被回收到顯示新項目需要顯示。這是在getView()方法convertView參數...

可能你看到相同的圖像,因爲回收的觀點保持與同一圖像..

也有異步任務的問題(你ImageDownload類),可以在啓動請求的原始項目已被回收時完成它的執行。

我建議你「挖」作爲北斗,你可以瞭解所有關於ListView - 這是最複雜和最重要的用戶界面組件之一。閱讀帖子鏈接你是一個好的開始。

也這段視頻是非常重要的:

http://www.youtube.com/watch?v=wDBM6wVEO70

0

這裏是我的GetView:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if(rowResourceId!=R.layout.search_empty_list) { 
      if (convertView == null) { 
       LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = inflator.inflate(rowResourceId, null); 
       final ViewHolder viewHolder = new ViewHolder(); 

       viewHolder.textName = (TextView) view.findViewById(R.id.textView1); 
       viewHolder.imgPic = (ImageView) view.findViewById(R.id.imgPic);   

       if (viewHolder.imgPic != null) { 
        String strUrl = mainUrl+list.get(position).getUrl(); 
        new ImageDownload(viewHolder.imgPic).execute(strUrl); 
       } 

       view.setTag(viewHolder); 

      } else { 
       view = convertView; 
      } 
      ViewHolder holder = (ViewHolder) view.getTag(); 

      holder.textName.setText(list.get(position).getName()); 


     } else { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(rowResourceId, parent, false); 

      TextView textView1 = (TextView) view.findViewById(R.id.textView1); 
      textView1.setText(list.get(0).getName()); 
     } 
     return view; 

    }