Adapter(9)BaseExpandableListAdapter

1.效果 

2.BaseExpandableListFrgmt.java

public class BaseExpandableListFrgmt extends Fragment implements OnGroupClickListener{

    private ExpandableListView expandListView;
    private CustomExpandableListAdapter expandAdapter;
    private ExpandGroup[] groups;
    private ExpandChild[][] children;

    public void setListViewGroupIndicator(Drawable groupIndicator){
        expandListView.setGroupIndicator(groupIndicator);
    }
    private void initData() {
        int len = 5;
        groups = new ExpandGroup[len];
        for (int i = 0; i < len; i++) {
            groups[i] = new ExpandGroup();
            groups[i].icon_resid = R.drawable.ic_group;
            groups[i].title_txt = "group [" + i + "]";
            groups[i].btn_txt = "btn [" + i + "]";
        }
        children = new ExpandChild[len][10];
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < 10; j++) {
                children[i][j] = new ExpandChild();
                children[i][j].icon_resid = R.drawable.ic_child3;
                children[i][j].title_txt = "child [" + i+"][" + j+"]";
                children[i][j].content_txt = "content[" + i+"][" + j+"]";
                children[i][j].button_txt = "child[" + i+"][" + j+"]";
            }
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        initData();

        View v = inflater.inflate(R.layout.frgmt_base_expandable_list_adpt,
                container, false);
        expandListView = (ExpandableListView) v
                .findViewById(R.id.vid_BaseExpandableListAdapter_list);
        expandAdapter = new CustomExpandableListAdapter(getActivity(), groups,
                children);
        expandListView.setAdapter(expandAdapter);
        expandListView.setGroupIndicator(null);//参数为分组图标,null表示为空,注释本行用系统默认的.
        expandListView.setOnGroupClickListener(this);
        return v;
    }

    @Override
    public boolean onGroupClick(ExpandableListView parent, View v,
            int groupPosition, long id) {
        boolean isExpanded = expandListView.expandGroup(groupPosition);
        if (!isExpanded) {
            expandListView.collapseGroup(groupPosition);
        }
        return true;
    }
}

3.自定义的adapter : CustomExpandableListAdapter.java

public class CustomExpandableListAdapter extends BaseExpandableListAdapter {

    private Context mContext;
    private LayoutInflater mInflater;

    private ExpandGroup[] groups;
    private ExpandChild[][] children;

    
    
    public CustomExpandableListAdapter(Context context, ExpandGroup[] groups,
            ExpandChild[][] children) {
        mContext = context;
        mInflater = LayoutInflater.from(context);
        this.groups = groups;
        this.children = children;
    }

    @Override
    public int getGroupCount() {
        return groups.length;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return children[groupPosition].length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups[groupPosition];
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return children[groupPosition][childPosition];
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
//        Toast.makeText(mContext, "hasStableIds", Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        Toast.makeText(mContext,
                "这是第" + groupPosition + "组,第" + childPosition + "个",
                Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        ImageView icon;
        Button btn;
        TextView title;
        ExpandGroup group = (ExpandGroup) getGroup(groupPosition);
        if (null == convertView) {
            convertView = mInflater.inflate(
                    R.layout.expand_list_group_base_adapter, null, false);
        }
        if (isExpanded) {
            convertView.setBackgroundColor(0x7fFFE1FF);
        }else{
            convertView.setBackgroundColor(0x7fF8F8FF);
        }
        icon = (ImageView) convertView.findViewById(R.id.vid_icon_expand_group);
        title = (TextView) convertView.findViewById(R.id.vid_tv_expand_group);
        btn = (Button) convertView.findViewById(R.id.vid_btn_expand_group);

        title.setText(group.title_txt);
        btn.setText(group.btn_txt);
        final int pos = groupPosition;
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "group ["+pos+"] clicked", Toast.LENGTH_SHORT)
                        .show();
            }
        });
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        ImageView icon;
        TextView title;
        TextView content;
        Button btn;
        ExpandChild data = (ExpandChild) getChild(groupPosition, childPosition);
        if (convertView == null) {
            convertView = mInflater.inflate(
                    R.layout.expand_list_child_base_adapter, null, false);
        }
        icon = (ImageView) convertView
                .findViewById(R.id.vid_iv_icon_expand_child);
        title = (TextView) convertView
                .findViewById(R.id.vid_tv_title_expland_child);
        content = (TextView) convertView
                .findViewById(R.id.vid_tv_content_expand_child);
        btn = (Button) convertView.findViewById(R.id.vid_btn_expand_child);

        title.setText(data.title_txt);
        content.setText(data.content_txt);
        btn.setText(data.button_txt);
        final int pos = childPosition;
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "child ["+pos+"] clicked", Toast.LENGTH_SHORT)
                        .show();
            }
        });
        return convertView;
    }
}

 

4.ExpandGroup.java

public class ExpandGroup {
    public int icon_resid;
    public String title_txt;
    public String btn_txt;
}

 

5.ExpandChild.java

public class ExpandChild {
    public int icon_resid;
    public String title_txt;
    public String content_txt;
    public String button_txt;
}

6.主布局文件 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ExpandableListView
        android:id="@+id/vid_BaseExpandableListAdapter_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

    </ExpandableListView>

</LinearLayout>

 

7.expand_list_group_base_adapter.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/vid_icon_expand_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="52dp"
        android:src="@drawable/ic_group" />

    <TextView
        android:id="@+id/vid_tv_expand_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/vid_btn_expand_group"
        android:layout_alignBottom="@+id/vid_btn_expand_group"
        android:layout_toRightOf="@+id/vid_icon_expand_group"
        android:text="TextView" />

    <Button
        android:id="@+id/vid_btn_expand_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/vid_tv_expand_group"
        android:focusable="false"
        android:text="Button" />

</RelativeLayout>

 

8.expand_list_child_base_adapter.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/vid_iv_icon_expand_child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_child5" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/vid_tv_title_expland_child"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:id="@+id/vid_tv_content_expand_child"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    </LinearLayout>

    <Button
        android:id="@+id/vid_btn_expand_child"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button" />

</LinearLayout>

 

posted @ 2015-05-26 21:37  f9q  阅读(222)  评论(0)    收藏  举报