2014-11-21 34 views
0

以下是必需的代碼。我試圖在同一列表視圖中使用兩個不同的視圖。我想要一列數組列表被充氣爲行,然後是另一列。但是會發生什麼事情,這些行會相互膨脹。ListView中的行正在彼此膨脹

代碼:

@Override 
    public int getItemViewType(int position) { 
     if (position < (mContactsNumber.size())) { 
      a = 0; 
      return a; 
     } else { 
      a = 1; 
      return a; 
     } 
    } 

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     final int pos = i; 
     int type = getItemViewType(i); 
     View v = view; 
     if (view == null) { 
      switch (type) { 
       case 0: 
        v = mInflater.inflate(R.layout.contacts_row, null); 
        name = (TextView) v.findViewById(R.id.contact_name); 
        name.setText(mContactsNames.get(i)); 
        break; 
       case 1: 
        v = mInflater.inflate(R.layout.manual_row, null); 
        mManual = (TextView) v.findViewById(R.id.manual_number); 
        mSwitch = (SwitchCompat) v.findViewById(R.id.manual_switch); 
        mManual.setText(mPermanentManual.get(i)); 
        mSwitch.setTag(i); 
        try { 
         if (mManualList.contains(mPermanentManual.get(i))) { 
          mSwitch.setChecked(true); 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        break; 
      } 
      return v; 
     } 
+0

您可以檢查http://learnncode.co/2014/01/21/listview-getviewtype-and-getviewtypecount在行動/ – Prachi 2014-11-21 06:22:31

回答

1

我認爲,當convertView不爲空,因爲你沒有else語句進行getView方法時發生問題。

你可以使用ItemViewType

改變你的適配器是這樣的:

private class MyCustomAdapter extends BaseAdapter { 

     private static final int TYPE_ITEM_0 = 0; 
     private static final int TYPE_ITEM_1 = 1; 
     private static final int TYPE_MAX_COUNT = 2; 

     ... 


     @Override 
     public int getItemViewType(int position) { 
      return (position < (mContactsNumber.size()) ? TYPE_ITEM_0 : TYPE_ITEM_1; 
     } 

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


     @Override 
     public String getItem(int position) { 
      return mData.get(position); 
     } 

     ... 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      int type = getItemViewType(position); 

      if (convertView == null) { 
       holder = new ViewHolder(); 
       switch (type) { 
        case TYPE_ITEM_0: 
         convertView = mInflater.inflate(R.layout.item1, null); 
         holder.textView = (TextView)convertView.findViewById(R.id.text); 
         break; 
        case TYPE_ITEM_1: 
         convertView = mInflater.inflate(R.layout.item2, null); 
         holder.textView = (TextView)convertView.findViewById(R.id.textSeparator); 
         break; 
       } 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder)convertView.getTag(); 
      } 
      holder.textView.setText(mData.get(position)); 
      return convertView; 
     } 

    } 
+0

沒錯。但是,我會在'else'中添加什麼,因爲一切都被誇大了,Widget在'if'本身內被實例化了嗎? – Slay 2014-11-21 03:55:57

+0

您可以根據交換機將其分爲兩種方法。每個可以膨脹或重用convertView並設置適當的數據。 – Karakuri 2014-11-21 03:57:33

+0

你的意思是'if'和'else'中的代碼相同嗎? – Slay 2014-11-21 03:59:19