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

Group:

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>即可,我在这里是模拟了一些数据,正常情况下当然要从服务端接收数据:

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

ExpandableListView仿QQ好友列表的更多相关文章

  1. 仿QQ好友列表界面的实现

    TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style ...

  2. Android UI视图效果篇之仿QQ好友列表分组悬浮PinnedHeaderExpandableListView

    楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeaderExpandableListView.java 要注意的是 在 onGroupClick方法中pare ...

  3. android 实现QQ好友列表

    在某些Android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的.接触Android,也才一年的时间,大部分时间花在工作上(解bug...),界面上开发很少参与.自己维护的系统应用 ...

  4. 动手分析安卓仿QQ联系人列表TreeView控件

    因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码.   一. 需要用 ...

  5. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  6. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  7. WPF 自定义TreeView控件样式,仿QQ联系人列表

    一.前言 TreeView控件在项目中使用比较频繁,普通的TreeView并不能满足我们的需求.因此我们需要滴对TreeView进行改造.下面的内容将介绍仿QQ联系人TreeView样式及TreeVi ...

  8. (二十七)QQ好友列表的实现

    QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...

  9. 基于Qt的相似QQ好友列表抽屉效果的实现

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shuideyidi/article/details/30619167     前段时间在忙毕业设计, ...

随机推荐

  1. [ZJOI2016]小星星

    题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. 有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了 ...

  2. 多项式的基本运算(FFT和NTT)总结

    设参与运算的多项式最高次数是n,那么多项式的加法,减法显然可以在O(n)时间内计算. 所以我们关心的是两个多项式的乘积.朴素的方法需要O(n^2)时间,并不够优秀. 考虑优化. 多项式乘积 方案一:分 ...

  3. 【luogu P4005 清华集训2017】小Y和地铁

    题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...

  4. [BZOJ]4199 品酒大会(Noi2015)

    讲道理是后缀数组裸题吧,虽然知道后缀数组的原理但是小C不会写是什么鬼.. 小C趁着做这题的当儿,学习了一下后缀数组. 网络上的后缀数组模板完全看不懂怎么破,全程照着黄学长的代码抄,感觉黄学长写得还是很 ...

  5. 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建

    勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...

  6. solr6.6初探之solrj

    一. solrj简介: solrj可以使Java应用程序很方便的访问与操作solr.solrj有几个核心类,分别为:1.SolrClient 2.SolrRequests 3.SolrQuerys 4 ...

  7. Unity脚本自动添加注释脚本及排版格式

    Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...

  8. 数据结构 单链表&顺序表

    顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...

  9. Linux学习之CentOS(一)--CentOS6.5环境搭建

    一.前言 作为一个从事运维工作好几年的老运维来说,linux系统怎能不学呢?所以,这几天自己准备学习一下linux操作系统.废话不多说,直奔主题. 要学linux开发,首先得要安装linux系统吧,这 ...

  10. CSS中的ul与li样式详解 list-type

    转自新浪博客http://blog.sina.com.cn/u/2539885750 ul和li列表是使用CSS布局页面时常用的元素.在CSS中,有专门控制列表表现的属性,常用的有list-style ...