先看效果:
代码:
MainActivity:
package com.example.administrator.expland;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView;public class MainActivity extends AppCompatActivity {private ExpandableListView expandListview;private String[] groups = { "A", "B", "C", "D", "E"};//注意,字符数组不要写成{ {"A1,A2,A3,A4"}, {"B1,B2,B3,B4,B5"}, {"C1,C2,C3,C4"}}*/ private String[][] childs = { { "A1", "A2", "A3", "A4"}, { "A1", "A2", "A3", "B4"}, { "A1", "A2", "A3", "C4"}, { "A1", "A2", "A3", "C4"}, { "A1", "A2", "A3", "C4"}};@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);expandListview = (ExpandableListView) findViewById(R.id.expandListview);expandListview.setAdapter(new MyExpandableListView());}//为ExpandableListView自定义适配器 class MyExpandableListView extends BaseExpandableListAdapter {//返回一级列表的个数 @Override public int getGroupCount() {return groups.length;}//返回每个二级列表的个数 @Override public int getChildrenCount(int groupPosition) { //参数groupPosition表示第几个一级列表 return childs[groupPosition].length;}//返回一级列表的单个item(返回的是对象) @Override public Object getGroup(int groupPosition) {return groups[groupPosition];}@Override public Object getChild(int groupPosition, int childPosition) {return childs[groupPosition][childPosition];}@Override public long getGroupId(int groupPosition) {return groupPosition;}@Override public long getChildId(int groupPosition, int childPosition) {return childPosition;}@Override public boolean hasStableIds() {return true;}@Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {GroupViewHolder groupViewHolder;if (convertView == null) {convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_group, parent, false);groupViewHolder = new GroupViewHolder();groupViewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_group);convertView.setTag(groupViewHolder);} else {groupViewHolder = (GroupViewHolder) convertView.getTag();}groupViewHolder.tvTitle.setText(groups[groupPosition]);return convertView;}@Override public View getChildView(int groupPosition, int childPosition, boolean b, View convertView, ViewGroup parent) {ChildViewHolder childViewHolder;if (convertView == null) {convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_child, parent, false);childViewHolder = new ChildViewHolder();childViewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_child);convertView.setTag(childViewHolder);} else {childViewHolder = (ChildViewHolder) convertView.getTag();}childViewHolder.tvTitle.setText(childs[groupPosition][childPosition]);return convertView;}@Override public boolean isChildSelectable(int i, int i1) {return true;}}static class GroupViewHolder {TextView tvTitle;}static class ChildViewHolder {TextView tvTitle;} }布局:
1.activity_main:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.expland.MainActivity"><ExpandableListView android:id="@+id/expandListview" android:layout_width="690px" android:layout_height="544px"></ExpandableListView></android.support.constraint.ConstraintLayout>2.item_group:
<?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"><TextView android:id="@+id/tv_group" android:layout_width="wrap_content" android:layout_height="30dp" android:gravity="center" android:text="group text" android:layout_marginLeft="50dp" /> </LinearLayout>3.item_child:
<?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"><ImageView android:id="@+id/iv_child" android:layout_width="30dp" android:layout_height="30dp" android:layout_marginLeft="50dp" android:src="@mipmap/ic_launcher" /><TextView android:id="@+id/tv_child" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="item text" /> </LinearLayout>