结果图:
布局文件:
<RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ExpandableListView
android:id="@+id/elv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
组的样式布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/gtv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="36sp"
android:textColor="#0000ff"/>
</LinearLayout>
组展开后的子元素样式布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/cimg"
android:layout_width="50dp"
android:layout_height="50dp"/>
<TextView
android:id="@+id/ctv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/cimg"
android:textSize="30sp"
android:textColor="#00ff00"/>
</RelativeLayout>
.Java文件:
package com.day8_qqdesign;
import android.app.Activity;
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.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
ExpandableListView elv;
//分组数据源
String groupData[]={"家人","好朋友","同事"};
String childData[][]={{"妈妈","爸爸","姐姐","弟弟"},{"李易峰","林志颖","陈学冬","杨洋"},{"刘亦菲","林依晨","赵丽颖","杨幂"}};
int[][] childimg={{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4},{R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8},{R.drawable.img9,R.drawable.img10,R.drawable.img11,R.drawable.img12}};
MyBaseadapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
elv=(ExpandableListView) findViewById(R.id.elv);
adapter=new MyBaseadapter();
elv.setAdapter(adapter);
elv.setOnGroupClickListener(new OnGroupClickListener() {
//点击哪个ExpandableListView,点击哪个分组的item,分组下标,分组item下标
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
Toast.makeText(MainActivity.this,groupData[groupPosition],0).show();
return false;
}
});
//监听分组里内容点击事件
elv.setOnChildClickListener(new OnChildClickListener() {
//点击哪个控件,点击分组里内容的视图,点击分组的下标,点击分组里内容的下标,分组里内容的id
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(MainActivity.this,childData[groupPosition][childPosition],0).show();
return false;
}
});
//监听分组展开动作
elv.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(MainActivity.this,groupData[groupPosition]+"...列表展开了",0).show();
}
});
//监听分组缩起来动作
elv.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(MainActivity.this,groupData[groupPosition]+"...列表收起来了",0).show();
}
});
}
public class MyBaseadapter extends BaseExpandableListAdapter
{
//获取分组个数
@Override
public int getGroupCount() {
return groupData.length;
}
//获取分组数据的个数
@Override
public int getChildrenCount(int groupPosition) {
return childData[groupPosition].length;
}
//下标为参数,获取分组的数据对象
@Override
public Object getGroup(int groupPosition) {
return groupData[groupPosition];
}
//下标为 groupPositio获取分组里下标为childPosition的数据对象
@Override
public Object getChild(int groupPosition, int childPosition) {
return childData[groupPosition][childPosition];
}
//下标为 int groupPositio获取分组的item 的id
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
//下标为 int groupPositio获取分组的数据对象里面 下标为childPosition的item的id
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
//底层设计
@Override
public boolean hasStableIds() {
return false;
}
/**
* getGroupView的视图对象 view
*
* int groupPosition: 当前分组的下标
* boolean isExpanded:当前分组是否展开
* View convertView: 复用的视图
* ViewGroup parent: 父控件ExpandableListView
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.group_style,null);
TextView tv = (TextView) view.findViewById(R.id.gtv);
tv.setText(groupData[groupPosition]);
return view;
}
/**
* getChildView 子视图对象
* int groupPosition:当前分组的下标
* int childPosition:子分组的下标
* boolean isLastChild:是否是最后一个视图view
* View convertView:复用的视图
* ViewGroup parent:父控件ExpandableListView
*/
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.child_style,null);
TextView tv = (TextView) view.findViewById(R.id.ctv);
tv.setText(childData[groupPosition][childPosition]);
ImageView img=(ImageView) view.findViewById(R.id.cimg);
img.setImageResource(childimg[groupPosition][childPosition]);
return view;
}
//当前子元素是否能被选中
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
}