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的使用详解相关推荐

  1. Android仿QQ通讯录分组展示ExpandableListView

    Android仿QQ通讯录分组展示ExpandableListView 核心是重写BaseExpandableListAdpter,其实和之前写的普通的BaseAdapter是类似的, 但是BaseE ...

  2. Android 高仿QQ 好友分组列表

    实现的效果如下: 用ExpandableListView实现, 先看Activity的代码: public class BuddyActivity extends Activity {Expandab ...

  3. android 仿qq好友动态,Android UI仿QQ好友列表分组悬浮效果

    本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeade ...

  4. android 仿qq好友列表分组效果及联系人分组效果

     历史记录仿QQ好友列表的动态效果 以及联系人的分组效果 QQ朋友分组的功能做的不错,大家都很认可,那么到底他的分组并且滑动的时候,标题能停留在顶部是如何实现的呢?今天从网上搜索了一下资料,自己运行了 ...

  5. Android仿QQ好友列表分组实现增删改及持久化

    Android自带的控件ExpandableListView实现了分组列表功能,本案例在此基础上进行优化,为此控件添加增删改分组及子项的功能,以及列表数据的持久化. Demo实现效果:     Dem ...

  6. android 仿QQ好友动态 title滑动渐变

    最近QQ更新了qq空间消息列表.天天动听也使用了那效果.而且越来越多的android应用都在使用,咱们不能落后啊! 得紧跟时代的步伐,不然就out了. 看起来不错分享下咯! 首先贴一下效果图,因为gi ...

  7. Android之实现QQ好友分组(ExpandableListView)

    在项目开发中,也许我们遇到过ListView中嵌套ListView,但谷歌建议我们最好别这样做,因此他们写好了一个ExpandableListView类,他继承ListView,可以实现ListVie ...

  8. 模仿QQ好友分组风格

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <title> ...

  9. UITableView的折叠收缩和QQ好友分组效果

    可折叠展开的tableView,QQ好友分组列表 demo下载地址https://github.com/zhengwenming/ExpandTableView   原理分析:这个可以折叠的table ...

最新文章

  1. 判断手机是否弹出键盘,改变了手机页面高度,对应inputStatus的状态改变相关控件的大小和位置
  2. 用于RGB-D语义分割的全局-局部传播网络
  3. 【错误记录】PyCharm 中从 GitHub 中 Clone 代码到本地报错 ( OpenSSL SSL_read: Connection was reset, errno 10054 )
  4. python线程(二)代码部分Threading模块
  5. Python-100例(7-8) 复制列表 打印乘法口诀
  6. [14-01] 闭包
  7. 徐中约与《中国近代史》 (zz)
  8. android 自定义唤醒词,星星1号语音升级 中兴语音助手实现可自定义唤醒词
  9. The Little Schemer 笔记(第一章)
  10. Android Studio 模拟器Emulator 设置代理网络 | WIFI图标有叉号但是有网络解决方案
  11. 百度大脑FaceID人脸识别模型量化技术,确保算法精度无损加速一倍
  12. 推荐4个好用、接收邮件及时的临时邮箱
  13. Micro LED将引领小间距显示的未来。
  14. 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
  15. 10分钟上手pythonpandas_【译】10分钟学会Pandas
  16. JAVAMail 使用imap协议分析邮件
  17. PyQt5-QWidget、QDialog及QMainWindow的区别
  18. Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2
  19. 秒懂Excel的三种引用
  20. iframe的基本介绍与使用

热门文章

  1. 基于ORL人脸数据库和PCA特征降维算法的人脸识别matlab仿真
  2. adb命令行刷机 使用adb sideload命令推送刷机包到recovery直接刷机
  3. mega-nerf安装流程
  4. 【进阶】6天闯关训练营,6个视频带你进一步了解RT-Thread!
  5. 铁通用户,宽带测速很快,可是上网很慢的解决办法
  6. 国考省考行测:细节理解,对错判断,要素查找,问什么,找什么,对比分析
  7. Python+Excel随机试卷及答案生成程序
  8. 基于51单片机的DS18B20温度显示
  9. 第十三届蓝桥杯Python B组国赛题解
  10. FLASH 模拟程序学习笔记(1)