重要方法:
isGroupExpanded (int groupPosition);//判断此组是否展开
expandableListView.setDivider();//这个是设定每个Group之间的分割线。
expandableListView.setGroupIndicator();//这个是设定每个Group之前的那个图标。
expandableListView.collapseGroup(int group);//将第group组收起
ExpandableListTest
package com.android.expand;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import com.example.TypeTest.R;
public class ExpandableListTest extends Activity {
//记录上次展开的父组件下标,方便关闭
private int lastPoint;
private ExpandableListView listView;
public ExpandInfoAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
listView = (ExpandableListView) findViewById(R.id.expandable_list_view);
adapter = new ExpandInfoAdapter(this);
listView.setAdapter(adapter);
//监听父列表的弹出事件
listView.setOnGroupExpandListener(new ExpandableListViewListenerC());
//监听父列表的关闭事件
listView.setOnGroupCollapseListener(new ExpandableListViewListenerB());
//监听子列表
listView.setOnChildClickListener(new ExpandableListViewListenerA());
}
/**
* 监听子级列表的点击事件
*
* @author Administrator
*/
public class ExpandableListViewListenerA implements ExpandableListView.OnChildClickListener {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
return false;
}
}
/**
* 监听父级列表的关闭事件事件
*
* @author Administrator
*/
public class ExpandableListViewListenerB implements ExpandableListView.OnGroupCollapseListener {
@Override
public void onGroupCollapse(int groupPosition) {
// TODO Auto-generated method stub
}
}
/**
* 监听父级列表的弹出事件
*
* @author Administrator
*/
public class ExpandableListViewListenerC implements ExpandableListView.OnGroupExpandListener {
@Override
public void onGroupExpand(int groupPosition) {
// TODO Auto-generated method stub
if (lastPoint != groupPosition) {
listView.collapseGroup(lastPoint);
lastPoint = groupPosition;
}
}
}
}
ExpandInfoAdapter
package com.android.expand;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.*;
import android.widget.*;
import com.example.TypeTest.R;
import java.util.ArrayList;
import java.util.List;
public class ExpandInfoAdapter extends BaseExpandableListAdapter {
LayoutInflater mInflater;
Bitmap mIcon1;
Context context;
public List<String> group;
public List<List<String>> child;
public final static String NAME = "姓名:";
public final static String PHONE = "电话:";
public final static String SEX = "性别:";
public ExpandInfoAdapter(Activity a) {
context = a;
mInflater = LayoutInflater.from(context);
mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
initialOther();
addItemByValue("张三", "051782214", "男");
addItemByValue("李四", "110", "男");
addItemByValue("王二", "132", "女");
addItemByValue("麻子", "13321234562", "女");
}
// child's stub
@Override
public Object getChild(int groupPosition, int childPosition) {
return child.get(groupPosition).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public int getChildrenCount(int groupPosition) {
return child.get(groupPosition).size();
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
return getView(groupPosition, childPosition, convertView, parent);
}
public View getView(int groupPosition, int childPosition, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String name = child.get(groupPosition).get(childPosition);
holder.text.setText(name);
holder.icon.setImageBitmap(mIcon1);
return convertView;
}
@Override
public Object getGroup(int groupPosition) {
return group.get(groupPosition);
}
@Override
public int getGroupCount() {
return group.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
LinearLayout parentLayout = (LinearLayout) View.inflate(context, R.layout.list_item, null);
TextView parentTextView = (TextView) parentLayout.findViewById(R.id.parentitem);
parentTextView.setText(getGroup(groupPosition).toString());
ImageView parentImageViw = (ImageView) parentLayout.findViewById(R.id.arrow);
//判断isExpanded就可以控制是按下还是关闭,同时更换图片
if (isExpanded) {
parentImageViw.setBackgroundResource(R.drawable.arrow2);
} else {
parentImageViw.setBackgroundResource(R.drawable.arrow1);
}
return parentLayout;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@Override
public boolean hasStableIds() {
return false;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
public void initialOther() {
group = new ArrayList<String>();
child = new ArrayList<List<String>>();
}
public void addItemByValue(String n, String c1, String c2) {
group.add(n);
List<String> item = new ArrayList<String>();
item.add(NAME + n);
item.add(PHONE + c1);
item.add(SEX + c2);
child.add(item);
}
}
源码链接
http://download.youkuaiyun.com/detail/zztigyk/6540609