2013-10-15 38 views
-2

我遇到了回收視圖的問題。我使用2個佈局,但是當我上下滾動時,某些行會更改佈局。我已經嘗試了其他教程,但很少成功。有什麼建議麼?ListView回收視圖,多個佈局

public class CustomAdapter extends BaseAdapter { 

    Date date = new Date(); 
    private OfferList[] offers; 
    private String nameCompare = ""; 
    LayoutInflater inflater = getLayoutInflater(); 


    CustomAdapter (OfferList[] offers, FetchItemsTask fetchItemsTask) { 
     this.offers = offers; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     ViewHolder holder = null; 
     if (convertView == null) { 
      holder = new ViewHolder(); 

      if (getItemViewType(position) == 0) { 
       convertView = inflater.inflate(R.layout.list_offer_group, null); 
      } 
      else { 
       nameCompare = offers[position].getName(); 
       convertView = inflater.inflate(R.layout.list_offer, null); 
      } 

      holder.name = (TextView) convertView.findViewById(R.id.name); 
      holder.color = (TextView) convertView.findViewById(R.id.car_color_stock); 
      holder.time = (TextView) convertView.findViewById(R.id.time); 
      holder.offerStatus = (TextView) convertView.findViewById(R.id.offer_status); 

      convertView.setTag(holder); 

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

     holder.name.setText(offers[position].getCustomerName()); 
     holder.carStockColor.setText(offers[position].getVehicleYear() + " " + offers[position].getVehicleMake()); 
     java.util.Date time1 = new java.util.Date(Long.parseLong(offers[position].getModified())); 
     holder.time.setText(time1.toString().substring(0, 11) + " | "); 
     holder.offerStatus.setText(offers[position].getDealStatus()); 
     return convertView; 

    } 

    @Override 
    public int getViewTypeCount() { 
     return 2; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (nameCompare.equalsIgnoreCase(offers[position].getCustomerName())) { 
      return 0; 
     } 
     else { 
      return 1; 
     } 
    } 

    @Override 
    public int getCount() { 
     return offers.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public class ViewHolder { 
     public int type; 
     TextView name; 
     TextView color; 
     TextView time; 
     TextView offerStatus; 
    } 
} 
+0

你已經張貼了這個問題 – tyczj

+0

是啊,我沒有得到一個很好的答案 – ono

+0

所以你不要創建一個新的問題,那就是同樣的事情 – tyczj

回答

2

您必須實現不同的邏輯。你的代碼的問題是,如果convertView不爲空,意味着它已被回收,但它以前誇大了與此相關的不同視圖,與數據相關,它將顯示舊回收視圖的佈局(其他佈局,而不是佈局,你需要這個數據集)。

所以你只需要檢查一下,如果再循環視圖誇大了佈局,那麼你需要這個特定的行,或者如果它膨脹了另一個視圖。如果前者是這種情況,那麼你可以設置你的數據,如果沒有,那麼你必須誇大正確的觀點。

+0

是的我想這樣做只是通過膨脹只有一個佈局 – ono

+0

我將如何檢查回收的視圖充氣佈局或如果它誇大了另一種觀點? – ono