packagecom.ideasandroid.sample.adapter;importjava.util.ArrayList;importjava.util.List;importandroid.content.Context;importandroid.view.Gravity;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.AbsListView;importandroid.widget.BaseExpandableListAdapter;importandroid.widget.TextView;/***@authorIdeasAndroid
* 可展开(收缩)列表示例*/
public class IdeasExpandableListAdapter extendsBaseExpandableListAdapter {private Context mContext = null;//测试数据,开发时可能来自数据库,网络....
private String[] groups = { "家人", "朋友", "同事"};private String[] familis = { "老爸", "老妈", "妹妹"};private String[] friends = { "小李", "张三", "李四"};private String[] colleagues = { "陈总", "李工", "李客户"};private List groupList = null;private List> itemList = null;publicIdeasExpandableListAdapter(Context context) {this.mContext =context;
groupList= new ArrayList();
itemList= new ArrayList>();
initData();
}/*** 初始化数据,将相关数据放到List中,方便处理*/
private voidinitData() {for (int i = 0; i < groups.length; i++) {
groupList.add(groups[i]);
}
List item1 = new ArrayList();for (int i = 0; i < familis.length; i++) {
item1.add(familis[i]);
}
List item2 = new ArrayList();for (int i = 0; i < friends.length; i++) {
item2.add(friends[i]);
}
List item3 = new ArrayList();for (int i = 0; i < colleagues.length; i++) {
item3.add(colleagues[i]);
}
itemList.add(item1);
itemList.add(item2);
itemList.add(item3);
}public booleanareAllItemsEnabled() {return false;
}/** 设置子节点对象,在事件处理时返回的对象,可存放一些数据*/
public Object getChild(int groupPosition, intchildPosition) {returnitemList.get(groupPosition).get(childPosition);
}public long getChildId(int groupPosition, intchildPosition) {returnchildPosition;
}/** 字节点视图,这里我们显示一个文本对象*/
public View getChildView(int groupPosition, intchildPosition,booleanisLastChild, View convertView, ViewGroup parent) {
TextView text= null;if (convertView == null) {
text= newTextView(mContext);
}else{
text=(TextView) convertView;
}//获取子节点要显示的名称
String name =(String) itemList.get(groupPosition).get(childPosition);//设置文本视图的相关属性
AbsListView.LayoutParams lp = newAbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,40);
text.setLayoutParams(lp);
text.setTextSize(18);
text.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
text.setPadding(45, 0, 0, 0);
text.setText(name);returntext;
}/** 返回当前分组的字节点个数*/
public int getChildrenCount(intgroupPosition) {returnitemList.get(groupPosition).size();
}/** 返回分组对象,用于一些数据传递,在事件处理时可直接取得和分组相关的数据*/
public Object getGroup(intgroupPosition) {returngroupList.get(groupPosition);
}/** 分组的个数*/
public intgetGroupCount() {returngroupList.size();
}public long getGroupId(intgroupPosition) {returngroupPosition;
}/** 分组视图,这里也是一个文本视图*/
public View getGroupView(int groupPosition, booleanisExpanded,
View convertView, ViewGroup parent) {
TextView text= null;if (convertView == null) {
text= newTextView(mContext);
}else{
text=(TextView) convertView;
}
String name=(String) groupList.get(groupPosition);
AbsListView.LayoutParams lp= newAbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,40);
text.setLayoutParams(lp);
text.setTextSize(18);
text.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
text.setPadding(36, 0, 0, 0);
text.setText(name);returntext;
}/** 判断分组是否为空,本示例中数据是固定的,所以不会为空,我们返回false
* 如果数据来自数据库,网络时,可以把判断逻辑写到这个方法中,如果为空
* 时返回true*/
public booleanisEmpty() {return false;
}/** 收缩列表时要处理的东西都放这儿*/
public void onGroupCollapsed(intgroupPosition) {
}/** 展开列表时要处理的东西都放这儿*/
public void onGroupExpanded(intgroupPosition) {
}/** Indicates whether the child and group IDs are stable across changes to
* the underlying data.*/
public booleanhasStableIds() {return false;
}/** Whether the child at the specified position is selectable.*/
public boolean isChildSelectable(int groupPosition, intchildPosition) {return true;
}
}