首页 > 代码库 > android-基础编程-ExpandableListview

android-基础编程-ExpandableListview

ExpandableListView继承ListView,具有LIstVIew的基本功能。此外具有group/child,由组与子元素组成。

1.布局主要有是三个。

a.主布局:

<ExpandableListView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/expandlistview"        android:dividerHeight="5dp"        android:background="#ffffff"        android:divider="@drawable/expandchilddivide"        android:childDivider="#000000"         />

b.Group布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="vertical" >    <TextView        android:id="@+id/group_text"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:paddingTop="10dip"        android:paddingBottom="10dip"        android:gravity="center_horizontal"        android:text="122"        /></LinearLayout>

c.Child布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        >        <TextView            android:id="@+id/textOne"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="1"            />        <TextView            android:id="@+id/textTwo"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="2"            />        <TextView            android:id="@+id/textThree"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="3"            />    </LinearLayout></LinearLayout>

2.代码生成 类似adapter 创建adapter(ExpandableListAdapter、BaseExpandableListAdapter、SimpleExpandableListAdapter 依次继承关系)

a.创建adapter

//自定义适配器    class Adapter extends BaseExpandableListAdapter {        //获取子元素对象        @Override        public Object getChild(int groupPosition, int childPosition) {            return null;        }        //获取子元素Id        @Override        public long getChildId(int groupPosition, int childPosition) {            return childPosition;        }        //加载子元素并显示        @Override        public View getChildView(final int groupPosition, final int childPosition,                                 boolean isLastChild, View convertView, ViewGroup parent) {            View view = null;            ChildHolder childholder = null;            if (convertView != null) {                view = convertView;                childholder = (ChildHolder) view.getTag();            } else {                view = View.inflate(ExpandableListViewActi.this, R.layout.expand_child, null);                childholder = new ChildHolder();                //childholder.mImage = (ImageView) view.findViewById(R.id.image);                childholder.mPrice = (TextView) view.findViewById(R.id.textTwo);                childholder.mStateText = (TextView) view.findViewById(R.id.textOne);                childholder.mSecondPrice = (TextView) view.findViewById(R.id.textThree);                view.setTag(childholder);            }//            childholder.mImage.setOnClickListener(new OnClickListener() {//                @Override//                public void onClick(View v) {//                    Toast.makeText(MainActivity.this, "第"+groupPosition+"组的第"+childPosition+"圖標被点击了", 0).show();//                }//            });            childholder.mPrice.setText(child_list.get(groupPosition));            int len = group_list.size();            System.out.println(len + "-----------------");            childholder.mStateText.setText(child_list.get(groupPosition));            childholder.mSecondPrice.setText(child_list.get(groupPosition));            return view;        }        //获取子元素数目        @Override        public int getChildrenCount(int groupPosition) {            return child_list.size();        }        //获取组元素对象        @Override        public Object getGroup(int groupPosition) {            return group_list.get(groupPosition);        }        //获取组元素数目        @Override        public int getGroupCount() {            return group_list.size();        }        //获取组元素Id        @Override        public long getGroupId(int groupPosition) {            return groupPosition;        }        //加载并显示组元素        @Override        public View getGroupView(int groupPosition, boolean isExpanded,                                 View convertView, ViewGroup parent) {            View view = null;            GroupHolder groupholder = null;            if (convertView != null) {                view = convertView;                groupholder = (GroupHolder) view.getTag();            } else {                view = View.inflate(ExpandableListViewActi.this, R.layout.expand_group, null);                groupholder = new GroupHolder();                groupholder.mSpaceText = (TextView) view.findViewById(R.id.group_text);                view.setTag(groupholder);            }            groupholder.mSpaceText.setText(group_list.get(groupPosition));            return view;        }        @Override        public boolean hasStableIds() {            return true;        }        @Override        public boolean isChildSelectable(int groupPosition, int childPosition) {            return true;        }    }

b.生成主界面代码,设置adapter .expandable四中点击相应事件。

private void initView() {        mListView = (ExpandableListView) findViewById(R.id.expandlistview);        mInflater = LayoutInflater.from(ExpandableListViewActi.this);        group_list = new ArrayList<String>();        for (int i = 0; i < 5; i++) {            group_list.add("zcx");            child_list.add("child");        }        Adapter adapter = new Adapter();        //mListView.setGroupIndicator(null);        /**         * ExpandableListView的组监听事件         *///        mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {////            @Override//            public boolean onGroupClick(ExpandableListView parent, View v,//                                        int groupPosition, long id) {//                Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组被点击了", 0).show();//                return true;//            }//        });        /**         * ExpandableListView的组展开监听         */        mListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {            @Override            public void onGroupExpand(int groupPosition) {                Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组展开", 0).show();            }        });        /**         * ExpandableListView的组合拢监听         */        mListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {            @Override            public void onGroupCollapse(int groupPosition) {                Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组合拢", 0).show();            }        });        /**         * ExpandableListView的子元素点击监听         */        mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {            @Override            public boolean onChildClick(ExpandableListView parent, View v,                                        int groupPosition, int childPosition, long id) {                Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组的第" + childPosition + "被点击了", 0).show();                return true;            }        });        mListView.setAdapter(adapter);//        int groupCount = mListView.getCount();//        for(int i=0;i<groupCount;i++){//            mListView.expandGroup(i);//        }    }

 

 

3.效果图

技术分享

 

android-基础编程-ExpandableListview