Android 仿QQ好友分组列表、ExpandableListView的使用详解
ListView只能显示一级列表,如果我们需要像QQ好友列表的那样的效果,就需要用到ExpandableListView,入门新手可能对该控件不是很熟悉,下面就详解一下基本用法,其实跟ListView差不多,下面来说一下具体的使用方法把!
效果图:
首先,布局中加入
<ExpandableListView
android:id ="@+id/expandableListView"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:groupIndicator="@null" />
然后,在activity中设置adapter,这里需要注意的是adapter的使用,我们这里的adapter继承的是BaseExpandableListAdapter
先初始一下数据,
public String[] groups = { "魏", "蜀", "吴" };public String[][] children = {{ "曹操", "荀彧", "郭嘉", "夏侯惇", "许褚"},{ "刘备", "诸葛亮", "关羽", "赵云", "庞统", "魏延", "马超" },{ "孙权", "周瑜", "鲁肃", "黄盖", "吕蒙"},};
然后设置adapter和点击监听
ExpandableListView expandableListView = (ExpandableListView)findViewById(R.id.expandableListView);
expandableListView.setAdapter(new ExpandableAdapter(groups,children));
//设置子条目的点击监听
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {Toast.makeText(MainActivity.this, "当前点击的是::"+groups[groupPosition]+"国的"+children[groupPosition][childPosition], Toast.LENGTH_SHORT).show();//这里return true的话子列表不会展开 return false才展开return false;}
});
写一个自定义adapter继承BaseExpandableListAdapter
public class ExpandableAdapter extends BaseExpandableListAdapter{public String[] groups;public String[][] children;public ExpandableAdapter(String[] groups, String[][] children) {this.groups = groups;this.children = children;}//获取与给定的组相关的数据,得到数组groups中元素的数据public Object getGroup(int groupPosition) {return groups[groupPosition];}//获取与孩子在给定的组相关的数据,得到数组children中元素的数据public Object getChild(int groupPosition, int childPosition) {return children[groupPosition][childPosition];}//获取的群体数量,得到groups里元素的个数public int getGroupCount() {return groups.length;}//取得指定组中的children个数,就是groups中每一个条目中的个数public int getChildrenCount(int groupPosition) {return children[groupPosition].length;}//获取组在给定的位置编号,即groups中元素的IDpublic long getGroupId(int groupPosition) {return groupPosition;}//获取在给定的组的children的ID,也就是children中元素的IDpublic long getChildId(int groupPosition, int childPosition) {return childPosition;}//获取一个视图显示给定组,存放groupspublic View getGroupView(int groupPosition, boolean isExpanded, View convertView,ViewGroup parent) {TextView textView = getGenericView(24);textView.setText(getGroup(groupPosition).toString());return textView;}//获取一个视图显示在给定的组 的儿童的数据,就是存放childrenpublic View getChildView(int groupPosition, int childPosition, boolean isLastChild,View convertView, ViewGroup parent) {TextView textView = getGenericView(18);textView.setText(getChild(groupPosition, childPosition).toString());return textView;}//孩子在指定的位置是可选的,即:children中的元素是可点击的public boolean isChildSelectable(int groupPosition, int childPosition) {return true;}//表示孩子是否和组ID是跨基础数据的更改稳定public boolean hasStableIds() {return true;}//自定义的创建TextViewpublic TextView getGenericView(int mTextSize) {// Layout parameters for the ExpandableListViewAbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);TextView textView = new TextView(MainActivity.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(42, 12, 12, 12);textView.setTextSize(mTextSize);textView.setTextColor(Color.BLACK);return textView;}}
OK!完成,运行一下看效果吧!想要美观一些需要在adapter的getChildView和getGroupView中加载自定义的布局文件,类似于BaseAdapter中的getView里的一样,如果条目过多的话注意别忘了在getChildView和getGroupView中使用ViewHolder!
好了,本次教程就这些,有什么错误的地方欢迎指点
本文相关下载:点击免费下载源码及Apk文件
Android 仿QQ好友分组列表、ExpandableListView的使用详解相关推荐
- Android仿QQ通讯录分组展示ExpandableListView
Android仿QQ通讯录分组展示ExpandableListView 核心是重写BaseExpandableListAdpter,其实和之前写的普通的BaseAdapter是类似的, 但是BaseE ...
- Android 高仿QQ 好友分组列表
实现的效果如下: 用ExpandableListView实现, 先看Activity的代码: public class BuddyActivity extends Activity {Expandab ...
- android 仿qq好友动态,Android UI仿QQ好友列表分组悬浮效果
本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeade ...
- android 仿qq好友列表分组效果及联系人分组效果
历史记录仿QQ好友列表的动态效果 以及联系人的分组效果 QQ朋友分组的功能做的不错,大家都很认可,那么到底他的分组并且滑动的时候,标题能停留在顶部是如何实现的呢?今天从网上搜索了一下资料,自己运行了 ...
- Android仿QQ好友列表分组实现增删改及持久化
Android自带的控件ExpandableListView实现了分组列表功能,本案例在此基础上进行优化,为此控件添加增删改分组及子项的功能,以及列表数据的持久化. Demo实现效果: Dem ...
- android 仿QQ好友动态 title滑动渐变
最近QQ更新了qq空间消息列表.天天动听也使用了那效果.而且越来越多的android应用都在使用,咱们不能落后啊! 得紧跟时代的步伐,不然就out了. 看起来不错分享下咯! 首先贴一下效果图,因为gi ...
- Android之实现QQ好友分组(ExpandableListView)
在项目开发中,也许我们遇到过ListView中嵌套ListView,但谷歌建议我们最好别这样做,因此他们写好了一个ExpandableListView类,他继承ListView,可以实现ListVie ...
- 模仿QQ好友分组风格
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <title> ...
- UITableView的折叠收缩和QQ好友分组效果
可折叠展开的tableView,QQ好友分组列表 demo下载地址https://github.com/zhengwenming/ExpandTableView 原理分析:这个可以折叠的table ...
最新文章
- 判断手机是否弹出键盘,改变了手机页面高度,对应inputStatus的状态改变相关控件的大小和位置
- 用于RGB-D语义分割的全局-局部传播网络
- 【错误记录】PyCharm 中从 GitHub 中 Clone 代码到本地报错 ( OpenSSL SSL_read: Connection was reset, errno 10054 )
- python线程(二)代码部分Threading模块
- Python-100例(7-8) 复制列表 打印乘法口诀
- [14-01] 闭包
- 徐中约与《中国近代史》 (zz)
- android 自定义唤醒词,星星1号语音升级 中兴语音助手实现可自定义唤醒词
- The Little Schemer 笔记(第一章)
- Android Studio 模拟器Emulator 设置代理网络 | WIFI图标有叉号但是有网络解决方案
- 百度大脑FaceID人脸识别模型量化技术,确保算法精度无损加速一倍
- 推荐4个好用、接收邮件及时的临时邮箱
- Micro LED将引领小间距显示的未来。
- 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
- 10分钟上手pythonpandas_【译】10分钟学会Pandas
- JAVAMail 使用imap协议分析邮件
- PyQt5-QWidget、QDialog及QMainWindow的区别
- Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2
- 秒懂Excel的三种引用
- iframe的基本介绍与使用