2014-11-21 2 views
0

여기에 필요한 코드가 있습니다. 동일한 목록보기 내에서 행에 대해 두 가지 다른보기를 사용하려고합니다. 한 세트의 arraylist를 행렬로 부풀게하고 다른 하나를 팽창시켜야합니다. 그러나 행은 서로 부풀려져 팽창합니다.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 -in-action/ – Prachi

답변

1

나는 당신이 당신의 getView 방법에 else 문이 없기 때문에 convertView이 아닌 null의 경우 문제가 발생합니다 생각합니다.

이 같은 뭔가 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'에서 무엇을 추가 할 것인가? 모든 것이 부 풀려서 위젯이'if' 자체에서 인스턴스화되기 때문입니다. – Slay

+0

스위치를 기반으로 두 가지 방법으로 분류 할 수 있습니다. 각각은 convertView를 확장하거나 재사용하고 적절한 데이터를 설정할 수 있습니다. – Karakuri

+0

'if'와'else'에서 동일한 코드를 사용한다는 것을 의미합니까? – Slay

관련 문제