您的位置:首页 > 移动开发 > Android开发

android 可展开(收缩)的列表ListView(ExpandableListView)

2013-05-27 15:42 555 查看
每天都在用QQ聊天,今天突然一想,android怎么实现列表的分组展开呢?看了看api,发现其实现过程也很简单。先看一下最终效果吧!



1、首先创建我们的Activity,继承 android.app.ExpandableListActivity,直接看代码吧。

package com.ideasandroid.sample;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import com.ideasandroid.sample.adapter.IdeasExpandableListAdapter;

/**
* @author IdeasAndroid
* 可展开(收缩)列表示例
*/
public class IdeasExpandableListView extends ExpandableListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置列表适配器IdeasExpandableListAdapter
setListAdapter(new IdeasExpandableListAdapter(this));
}
}


2、创建适配器,继承android.widget.BaseExpandableListAdapter。

package com.ideasandroid.sample.adapter;

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

/**
* @author IdeasAndroid
* 可展开(收缩)列表示例
*/
public class IdeasExpandableListAdapter extends BaseExpandableListAdapter {

private Context mContext = null;
// 测试数据,开发时可能来自数据库,网络....
private String[] groups = { "家人", "朋友", "同事" };
private String[] familis = { "老爸", "老妈", "妹妹" };
private String[] friends = { "小李", "张三", "李四" };
private String[] colleagues = { "陈总", "李工", "李客户" };

private List<String> groupList = null;
private List<List<String>> itemList = null;

public IdeasExpandableListAdapter(Context context) {
this.mContext = context;
groupList = new ArrayList<String>();
itemList = new ArrayList<List<String>>();
initData();
}

/**
* 初始化数据,将相关数据放到List中,方便处理
*/
private void initData() {
for (int i = 0; i < groups.length; i++) {
groupList.add(groups[i]);
}
List<String> item1 = new ArrayList<String>();
for (int i = 0; i < familis.length; i++) {
item1.add(familis[i]);
}

List<String> item2 = new ArrayList<String>();
for (int i = 0; i < friends.length; i++) {
item2.add(friends[i]);
}

List<String> item3 = new ArrayList<String>();
for (int i = 0; i < colleagues.length; i++) {
item3.add(colleagues[i]);
}

itemList.add(item1);
itemList.add(item2);
itemList.add(item3);
}

public boolean areAllItemsEnabled() {
return false;
}

/*
* 设置子节点对象,在事件处理时返回的对象,可存放一些数据
*/
public Object getChild(int groupPosition, int childPosition) {
return itemList.get(groupPosition).get(childPosition);
}

public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}

/*
* 字节点视图,这里我们显示一个文本对象
*/
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView text = null;
if (convertView == null) {
text = new TextView(mContext);
} else {
text = (TextView) convertView;
}
// 获取子节点要显示的名称
String name = (String) itemList.get(groupPosition).get(childPosition);
// 设置文本视图的相关属性
AbsListView.LayoutParams lp = new AbsListView.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);
return text;
}

/*
* 返回当前分组的字节点个数
*/
public int getChildrenCount(int groupPosition) {
return itemList.get(groupPosition).size();
}

/*
* 返回分组对象,用于一些数据传递,在事件处理时可直接取得和分组相关的数据
*/
public Object getGroup(int groupPosition) {
return groupList.get(groupPosition);
}

/*
* 分组的个数
*/
public int getGroupCount() {
return groupList.size();
}

public long getGroupId(int groupPosition) {
return groupPosition;
}

/*
* 分组视图,这里也是一个文本视图
*/
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView text = null;
if (convertView == null) {
text = new TextView(mContext);
} else {
text = (TextView) convertView;
}
String name = (String) groupList.get(groupPosition);
AbsListView.LayoutParams lp = new AbsListView.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);
return text;
}

/*
* 判断分组是否为空,本示例中数据是固定的,所以不会为空,我们返回false
* 如果数据来自数据库,网络时,可以把判断逻辑写到这个方法中,如果为空
* 时返回true
*/
public boolean isEmpty() {
return false;
}

/*
* 收缩列表时要处理的东西都放这儿
*/
public void onGroupCollapsed(int groupPosition) {

}

/*
* 展开列表时要处理的东西都放这儿
*/
public void onGroupExpanded(int groupPosition) {

}

/*
* Indicates whether the child and group IDs are stable across changes to
* the underlying data.
*/
public boolean hasStableIds() {
return false;
}

/*
* Whether the child at the specified position is selectable.
*/
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}


IdeasExpandableListView.rar

转:http://www.apkbus.com/android-54271-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: