废话不多说直接上代码:
package com.test.dmptest.expandablelistview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ExpandableListView expandableListView;
//Model:定义的数据
private String[] groups = {"数据一", "数据二", "数据三"};
private String[][] childs = {{"数据一", "数据二", "数据三", "数据四"}, {"数据一", "数据二", "数据三", "数据四"}, {"数据一", "数据二", "数据三", "数据四"}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
expandableListView.setGroupIndicator(null);//将控件默认的左边箭头去掉,
expandableListView.setAdapter(new MyExpandableListView());
}
//为ExpandableListView自定义适配器
class MyExpandableListView extends BaseExpandableListAdapter {
//返回一级列表的个数
@Override
public int getGroupCount() {
return groups.length;
}
//返回每个二级列表的个数
@Override
public int getChildrenCount(int groupPosition) { //参数groupPosition表示第几个一级列表
Log.d("smyhvae", "-->" + groupPosition);
return childs[groupPosition].length;
}
//返回一级列表的单个item(返回的是对象)
@Override
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
//返回二级列表中的单个item(返回的是对象)
@Override
public Object getChild(int groupPosition, int childPosition) {
return childs[groupPosition][childPosition]; //不要误写成groups[groupPosition][childPosition]
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
//每个item的id是否是固定?一般为true
@Override
public boolean hasStableIds() {
return true;
}
//【重要】填充一级列表
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = getLayoutInflater().inflate(R.layout.item_group, null);
holder.tv_group = (TextView) convertView.findViewById(R.id.tv_group);
holder.iv_jiantou = convertView.findViewById(R.id.iv_jiantou);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_group.setText(groups[groupPosition]);
//判断isExpanded就可以控制是按下还是关闭,同时更换图片
if (isExpanded) {
holder.iv_jiantou.setBackgroundResource(R.drawable.down);
} else {
holder.iv_jiantou.setBackgroundResource(R.drawable.up);
}
return convertView;
}
//【重要】填充二级列表
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = getLayoutInflater().inflate(R.layout.item_child, null);
holder.iv_child = (ImageView) convertView.findViewById(R.id.iv_child);
holder.tv_child = (TextView) convertView.findViewById(R.id.tv_child);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//iv_child.setImageResource(resId);
holder.tv_child.setText(childs[groupPosition][childPosition]);
return convertView;
}
//二级列表中的item是否能够被选中?可以改为true
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public class ViewHolder {
TextView tv_group, tv_child;
ImageView iv_jiantou, iv_child;
}
}
}
然后是布局代码activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
接下来是item_child.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="50dp"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="40dp">
<ImageView
android:id="@+id/iv_child"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv_child"
android:layout_width="match_parent"
android:layout_marginLeft="10dp"
android:layout_height="50dp"
android:gravity="center_vertical"
android:text="item text" />
</LinearLayout>
最后是item_group.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_height="60dp">
<TextView
android:id="@+id/tv_group"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:text="group text" />
<ImageView
android:id="@+id/iv_jiantou"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
代码都贴出来了,图标已经改到右边了,adapter也已经优化好了,直接嵌入项目就行了