Expandable ListView中Group中的不同元素

时间:2014-02-15 08:00:49

标签: android expandablelistview expandablelistadapter

我有一个问题,我想在可扩展listView中向一个组添加不同的元素,就像在图片中一样。有可能吗?enter image description here我知道,我必须在适配器中设置我的getChildView方法吗?

 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;

1 个答案:

答案 0 :(得分:4)

是的,我认为这些是你想要不同类型的儿童观点。

在这种情况下,覆盖下面的函数,返回您希望在getChildTypeCount中生成的不同子布局的数量,以及使用组和子位置分配对应于每个布局的唯一整数(1到count)的逻辑作为参数,在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;

       ....


       }
}

} }