2014-02-15 2 views
2

У меня проблема, я хочу добавить разные элементы в одну группу в расширяемом спискеView, как на картинке. Возможно? enter image description here Я знаю, что я должен использовать метод getChildView в адаптере?Различные элементы в группе в расширяемом ListView

case 2: 
        if (childPosition==0){ 
         infalInflater = (LayoutInflater) this._context 
           .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

         convertView = infalInflater.inflate(R.layout.group_item, null); 
         txtListChild=(TextView)convertView 
           .findViewById(R.id.tv_group_name) ; 
         txtListChild.setText("Вот они, родненькие условия использования)"); 
        } 
        else{ 
        c = db.getAccamulativeListOfCompany(companyID); 
        infalInflater = (LayoutInflater) this._context 
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

        convertView = infalInflater.inflate(R.layout.item_accumulative_list, null); 
        txtListChild = (TextView) convertView 
          .findViewById(R.id.lblListItem); 
        Log.d("myLogs", "group_pos=" + groupPosition + "," + childPosition); 
        TextView tvDiscount = (TextView) convertView.findViewById(R.id.tv_accumulative_discount); 
        ImageView ivAccamulative = (ImageView) convertView.findViewById(R.id.iv_accamulative_item); 

        if (c != null) { 
         if (c.moveToFirst()) { 
          c.moveToPosition(childPosition-1); 


          txtListChild.setText(c.getString(1) + " руб."); 

          tvDiscount.setText(c.getString(2) + "%"); 
          File imgFile = new File(c.getString(4)); 
          if (imgFile.exists()) { 
           Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
           ivAccamulative.setImageBitmap(myBitmap); 
          } 
         } 

        } 
        } 
        break; 

ответ

4

Да, я предполагаю, что это виды детей, которым вы хотите разные типы.

В этом случае переопределите перечисленные ниже функции, возвращая количество различных макетов дочерних элементов, которые вы ожидаете произвести в getChildTypeCount, и логику назначения уникального целого (1 для подсчета), соответствующего каждому макету, с использованием группы и дочернего как параметры, в getChildType.

В методе getChildView вы будете раздувать ваши разные макеты в соответствии с логикой вашего метода getChildType. Вызов этого здесь, вероятно, хорошая идея, и с помощью переключателя на возвращаемом значении определить, какой макет для раздувания.

Невозможно перезаписать макет представлений при каждом повторном использовании, если вы это сделаете, программа ExpandedListView позаботится о том, чтобы при повторном просмотре представлений вы получили только тип вида, который соответствует логики в методе getChildType.

Несложная альтернатива - просто надуть любой вид, который вам нужен в методах getView/getChildView, но, конечно, это не очень эффективно.

public class MyAwesomeAdapter extends BaseExpandableListAdapter { 


@Override 
public int getChildType(int groupPosition, int childPosition) { 

      // Return a number here, 1 to whatever you return in getChildTypeCount. 
      // Each number should correspond to a particular layout, using group 
      // and child position to determine which layout to produce. 

    return super.getChildType(groupPosition, childPosition); 
} 

@Override 
public int getChildTypeCount() { 

      // Return the number of distinct layouts you expect to create 

    return super.getChildTypeCount(); 
} 

@Override 
public View getChildView(int gp, int cp, boolean arg2, View view, ViewGroup arg4) { 

    if(view == null){ 

     switch(getChildType(gp, cp)){ 

     case 1: 
      //inflate type 1 
      break; 


     case 2: 
      //inflate type 2 
      break; 

     .... 


     } 
} 

}}

+0

я попробовать, но я проблема, у меня есть 1 пункт (текст) и 4 пункта в курсоре, в результате у меня есть: первый -text пункт и 3 следующего от курсор. Я теряю 1 пункт из курсора. –

+0

Я добавил свой код ниже –

+0

отрегулировать ваш счетчик детей, чтобы дать вам дополнительный ребенок? Поскольку вы добавляете один элемент не в курсор. По-видимому, вы уже меняете указатель на свой курсор. – NameSpace

Смежные вопросы