2013-07-04 33 views
0

我長期以來都對列表視圖的不同方面有所瞭解。這是一個問題。我知道一個解決方法,但我想明白爲什麼會發生。列表視圖的幾張圖片在滾動時填充所有listview項目

它在擴展ArrayAdapter的類的getView方法中。

我有幾個listItems和每個我有一個圖像左。對於幾個listItems,右邊有一個信息圖像。爲此,我添加了一個偵聽器來觸發alertdialog。 讓我們說應用程序共有15個列表項目中的2個信息圖像..到目前爲止這麼好。但 - 如果我向下滾動,然後滾動upp - 所有其他listitems現在填充此信息圖像。儘管爲每個視圖使用imageHolder,爲什麼會發生這種情況?

public View getView(int position, View convertView, ViewGroup parent) { 

    final ViewGroup theParent = parent; 
    final int thePosition = position; 
    View view = null; 
    ViewHolder holder; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.main, parent, false); 
     holder = new ViewHolder(); 
     holder.textView = (TextView) view.findViewById(R.id.label); 
     holder.imageView = (ImageView) view.findViewById(R.id.icon); 
     holder.infoView = (ImageView) view.findViewById(R.id.imageIcon); 
     view.setTag(holder); 
    } 
    else { 
     view = convertView; 
     holder = (ViewHolder) view.getTag(); 
    } 

    holder.textView.setText(values[position]); 

    switch (thePosition) { 
     case 0: 
      holder.imageView.setImageResource(R.drawable.conv); 
      break; 
     case 1: 
      holder.imageView.setImageResource(R.drawable.counting); 
      break; 
     case 2: 
      holder.imageView.setImageResource(R.drawable.travelling); 
      break; 
     case 3: 
      holder.imageView.setImageResource(R.drawable.love); 
      break; 
     case 4: 
      holder.imageView.setImageResource(R.drawable.dating); 
      holder.infoView.setImageResource(R.drawable.info); 
      break; 
     case 5: 
      holder.imageView.setImageResource(R.drawable.restaurant); 
      holder.infoView.setImageResource(R.drawable.info); 
      break; 
     case 6: 
      holder.imageView.setImageResource(R.drawable.thaidishes); 
      break; 
     case 7: 
      holder.imageView.setImageResource(R.drawable.time_); 
      break; 
     case 8: 
      holder.imageView.setImageResource(R.drawable.time2); 
      break; 
     case 9: 
      holder.imageView.setImageResource(R.drawable.colours); 
      break; 
     case 10: 
      holder.imageView.setImageResource(R.drawable.weather); 
      break; 
     case 11: 
      holder.imageView.setImageResource(R.drawable.directions); 
      break; 
     case 12: 
      holder.imageView.setImageResource(R.drawable.emergency); 
      break; 
     case 13: 
      holder.imageView.setImageResource(R.drawable.cities); 
      break; 
    } 

    return view; 
} 

我以前用checbox-items有過類似的問題。檢查項目在滾動查看時未被選中。我通過在arraylist中將檢查的項存儲爲布爾值來解決此問題。 有沒有類似的解決方案?

我提到的解決方法只是將imageResourse設置爲零(0)。

回答

1

getView方法返回的視圖會被回收以最大限度地減少資源使用。如果其中一個包含正確信息圖像的視圖被回收,它仍然會在那裏。

這可按預期工作。正如您已經發現的那樣,解決方案是使用setImageResource(0)或setVisibility(View.GONE)或類似方法來重置該信息圖像的狀態。

這也適用於複選框狀態等。

相關問題