2015-08-30 87 views
0
public class Adapter extends BaseAdapter { 
    private static ArrayList<ItemDetails> aList; 

    private LayoutInflater l_Inflater; 


    public Adapter(Context context, ArrayList<ItemDetails> results) { 
     aList = results; 
     l_Inflater = LayoutInflater.from(context); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = l_Inflater.inflate(R.layout.mylist1, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.name); 
      holder.title = (TextView) convertView.findViewById(R.id.txt1); 
      holder.ago = (TextView) convertView.findViewById(R.id.date); 

      holder.member = (TextView) convertView.findViewById(R.id.member); 
      holder.itemImage = (ImageView) convertView.findViewById(R.id.img_t); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.name.setText(aList.get(position).getName()); 
     holder.title.setText(aList.get(position).getTitle()); 
     holder.ago.setText(aList.get(position).getAgo()); 
     holder.member.setText(aList.get(position).getMember()); 
     String url = aList.get(position).getImg(); 
     Log.d("image_name", url); 
     if (url.length() > 9) { 
      Log.d("image_url", url); 
      DownloadFileFromURL img = new DownloadFileFromURL(holder.itemImage, position); 
      img.execute(url); 
      if(img.pos == position) { 
       holder.itemImage.setImageBitmap(img.bitmap); 
      } 
      aList.get(position).setChanged(); 
     } 
     notifyDataSetChanged(); 
     return convertView; 
    } 

    public static class ViewHolder { 
     TextView name; 
     TextView title; 
     TextView ago; 
     TextView member; 
     ImageView itemImage; 
    } 
} 

asynck任務類成功後我改變形象滾動時我的列表視圖項圖像改變

protected void onPostExecute(String file_url) { 
       if (imageViewReference != null) { 
        ImageView imageView = imageViewReference.get(); 
          imageView.setImageBitmap(bitmap); 
        } 
      } 

     } 
+0

請正確格式化代碼 – Ramesh

回答

1

ViewHolder模式用於回收創建的視圖(用於優化並防止膨脹很多視圖),當您滾動您的列表視圖時,實際上您有請求下載多個不同的圖像url並在同一ImageView中顯示它們導致holder.itemImage參考沒有改變)。 因此,只要您的AsyntTask完成其工作,您的圖像視圖就會改變。

解決方法:可以虛增您的視圖的每一行,並且不使用ViewHolder模式(不recommonded),或簽名圖像視圖,URL和檢查(使用holder.itemImage.setTag(「yourURL」的))它在您的AsyntTask將圖像設置爲您的ImageView之前,只有在標記的url等於AsyntTask下載的圖像url更改ImageView時。

但爲了便於使用和針對不同情況進行多種優化,我建議使用Picasso庫來將圖像加載到適配器中。

+0

非常感謝 –

1

儘量不要放的ImageView內viewholder。像這樣

ImageView itemImage = (ImageView) convertView.findViewById(R.id.img_t); 
itemImage.setImageBitmap(img.bitmap); 

如果這樣不能解決問題,請使用picasso或glide下載,緩存和顯示圖像。