2012-03-14 60 views
0

我有一個列表視圖有2個視圖,一個是第一行,另一個是休息。android listview多個視圖

這是我在getView代碼:

ViewHolder holder = null; 

      // if (convertView == null) 
     // { 
       holder = new ViewHolder(); 

       if(position==0 && category.equalsIgnoreCase("normal")) 
       { 
        convertView = mInflater.inflate(R.layout.item_featured_list_row, null);           
       } 
       else 
       {     
        convertView = mInflater.inflate(R.layout.item_list_row, null);   
       }  

        holder.imgItem = (ImageView) convertView.findViewById(R.id.itemImage); 
        //holder.imgArrow = (ImageView) convertView.findViewById(R.id.arrowImage); 
        holder.txtItem = (TextView) convertView.findViewById(R.id.itemText); 
        holder.itemValueLabel = (TextView) convertView.findViewById(R.id.itemValueLabel); 
        holder.itemPrice = (TextView) convertView.findViewById(R.id.itemPrice);        

       convertView.setTag(holder); 
     // } 
     // else 
     //  holder = (ViewHolder) convertView.getTag(); 

的事情是,它只會工作,這樣一來,如果我離開它註釋掉,但我覺得有一個很好的理由,以檢查是否convertView是零和不要重新誇大已經膨脹的東西。但是如果我取消註釋,它只能在第一次加載時起作用。一旦我刷新列表通過更新數組並調用notifydatasetchanged,第一行項目在我的列表視圖中的隨機位置結束多次。

回答

0

如果你使用不同的佈局,那麼你需要檢查是否真的可以重用convertView。您可以向持有者添加類型指示器,並檢查convertView的類型是否可以修改。如果不是膨脹一個新的視圖。

// check type - use int if you need more than just two layouts. 
boolean requiredViewType = (position == 0 && category.equalsIgnoreCase("normal")); 

if (convertView == null || convertView.getTag().viewType != requiredViewType) { 
    holder = new ViewHolder(); 

    if (position == 0 && category.equalsIgnoreCase("normal")) { 
     convertView = mInflater.inflate(R.layout.item_featured_list_row, null); 
    } else { 
     convertView = mInflater.inflate(R.layout.item_list_row, null); 
    } 

    holder.imgItem = (ImageView) convertView.findViewById(R.id.itemImage); 
    // holder.imgArrow = (ImageView) 
    // convertView.findViewById(R.id.arrowImage); 
    holder.txtItem = (TextView) convertView.findViewById(R.id.itemText); 
    holder.itemValueLabel = (TextView) convertView.findViewById(R.id.itemValueLabel); 
    holder.itemPrice = (TextView) convertView.findViewById(R.id.itemPrice); 

    // set the type - you obviously need to add that field to ViewHolder 
    holder.viewType = requiredViewType; 

    convertView.setTag(holder); 
} else { 
    holder = (ViewHolder) convertView.getTag(); 
    // etc 
}