ExpandableListView仿QQ好友列表

本例中,对ExpandableListView中的数据进行了封装,分为两个JavaBean,一个为Group类表示组信息,一个Child类表示该组下子列表信息:html

Group:vim

public class Group {
	private String groupName;//分组名
	private List<Child> childList;//该分组写子列表
	
	public String getGroupName() {
		return groupName;
	}
	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}
	public List<Child> getChildList() {
		return childList;
	}
	public void setChildList(List<Child> childList) {
		this.childList = childList;
	}
	
}

Child:

public class Child implements Serializable{
	private String username;//用户名
	private String headphoto;//用户头像
	private String mood;//心情
	private String online_status;//在线状态
	
	
	public String getMood() {
		return mood;
	}
	public void setMood(String mood) {
		this.mood = mood;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
}
	public String getOnline_status() {
		return online_status;
	}
	public void setOnline_status(String online_status) {
		this.online_status = online_status;
	}
	public String getHeadphoto() {
		return headphoto;
	}
	public void setHeadphoto(String headphoto) {
		this.headphoto = headphoto;
	}
ExpandableListView则用到了一个开源控件:IphoneTreeView继承自ExpandableListView,很好的实现了相似QQ好友列表的展示形式,只是须要在样式上作些更改,上图:






本例中也实现了相似qq好友在线情如在线好友头像为亮色,非在线好友头像为暗色(设置透明度便可),以及在线好友占总好友数目比例(可根据Child中的在线状态属性设定,值为1表示在线,为0表示非在线),另外也实现了向上滑动时组别悬浮即停留在顶部的功能。使用时,只须要传入一个List<Group>便可,我在这里是模拟了一些数据,正常状况下固然要从服务端接收数据:this

private void initData() {
		listGroup=new ArrayList<Group>();
		
		//第一组
		Group group=new Group();
		group.setGroupName("个人好友");
		List<Child> listChild=new ArrayList<Child>();
		for(int i=0;i<10;i++){
			Child child=new Child();
			child.setUsername("个人好友"+i);
			child.setHeadphoto("http://d.hiphotos.baidu.com/zhidao/pic/item/562c11dfa9ec8a13e028c4c0f603918fa0ecc0e4.jpg");
			child.setMood("今天心情不错哈~");
			if(i<3)
			    child.setOnline_status("1");
			else
				child.setOnline_status("0");
			listChild.add(child);
		}
		group.setChildList(listChild);
		listGroup.add(group);
		
		//第二组
		group=new Group();
		group.setGroupName("个人同窗");
		listChild=new ArrayList<Child>();
		for(int i=0;i<20;i++){
			Child child=new Child();
			child.setUsername("个人同窗"+i);
			child.setHeadphoto("http://wenwen.soso.com/p/20090901/20090901120135-1666292770.jpg");
			child.setMood("今天心情不错哈~");
			if(i<3)
			    child.setOnline_status("1");
			else
				child.setOnline_status("0");
			listChild.add(child);
		}
		group.setChildList(listChild);
		listGroup.add(group);
		
		//第三组
		group=new Group();
		group.setGroupName("个人朋友");
		listChild=new ArrayList<Child>();
		for(int i=0;i<30;i++){
			Child child=new Child();
			child.setUsername("个人朋友"+i);
			child.setHeadphoto("http://img.xiaba.cvimage.cn/4d908de84538f31e2dbe0a00.jpg");
			child.setMood("今天心情不错哈~");
			if(i<4)
			    child.setOnline_status("1");
			else
				child.setOnline_status("0");
			listChild.add(child);
		}
		group.setChildList(listChild);
		listGroup.add(group);
		
		mExpAdapter = new ConstactAdapter(this, listGroup, mIphoneTreeView);
		mIphoneTreeView.setAdapter(mExpAdapter);
		
	}
另外,加载头像使用的是开源控件afinal,对afinal不了解的能够查看前面的几篇博客中有介绍,好了,具体能够下载demo作详细研究:

下载地址:http://download.csdn.net/detail/baiyuliang2013/8640695

spa