最近要一个类似QQ好友列表分组折叠效果,经过网友提醒应该使用ExpandableListView,因为其就集成了这个功能,我到网上随便找了文章一看,果然如此,因为工作需要和兴趣的推动,下班做完事后决定做一个小的demo,一来是为了更好地熟练记忆,二是如果能够帮助有需要的人更好!
先来一个简单的效果图,没错我们现在要做的就是这么简单,重在知识。
![效果一](https://img-blog.csdn.net/20151203235520538)
![效果二](https://img-blog.csdn.net/20151203235623308)
废话就不多说了,直接开始。
其实很简单了,首先写一个布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextView
        android:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"android:textSize="20sp" /><ExpandableListView
        android:id="@+id/lv_expand"android:layout_below="@+id/tv"android:layout_width="match_parent"android:layout_height="wrap_content"></ExpandableListView>
</RelativeLayout>

然后是一个简单的好友bean文件

public class Bean {private int id;private String userName;private String grouName;public Bean(int id, String userName, String grouName) {this.id = id;this.userName = userName;this.grouName = grouName;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getGrouName() {return grouName;}public void setGrouName(String grouName) {this.grouName = grouName;}
}

重点就在这个适配器ExandAdapters,重写相应的功能

public class ExandAdapters extends BaseExpandableListAdapter {private List<String> groupList;private List<List<Bean>> childList;private LayoutInflater inflater;public ExandAdapters(Context context,List<String> groupList,List<List<Bean>> childList) {this.inflater = LayoutInflater.from(context);this.groupList =groupList;this.childList =childList;}//分组总数@Overridepublic int getGroupCount() {return groupList.size();}//某分组下子属性数@Overridepublic int getChildrenCount(int groupPosition) {return childList.get(groupPosition).size();}//分组对象@Overridepublic Object getGroup(int groupPosition) {return groupList.get(groupPosition);}//子属性对象@Overridepublic Object getChild(int groupPosition, int childPosition) {return childList.get(groupPosition).get(childPosition);}//分组的id@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}//子item的id@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return false;}@Overridepublic View getGroupView(int groupPosition, boolean b, View view, ViewGroup viewGroup) {ViweHolder holder = null;if (view == null) {holder = new ViweHolder();view = inflater.inflate(R.layout.item_list_expand_group, null);holder.groupName = (TextView) view.findViewById(R.id.group);view.setTag(holder);} else {holder = (ViweHolder) view.getTag();}holder.groupName.setText(groupList.get(groupPosition).toString());return view;}@Overridepublic View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {ViweHolder holder = null;if (view == null) {holder = new ViweHolder();view = inflater.inflate(R.layout.item_list_expand_child, null);holder.childName = (TextView) view.findViewById(R.id.info);holder.image = (ImageView) view.findViewById(R.id.image);view.setTag(holder);} else {holder = (ViweHolder) view.getTag();}holder.childName.setText(childList.get(groupPosition).get(childPosition).getUserName());holder.image.setImageResource(R.drawable.ww);//图片还是使用默认图片return view;}@Overridepublic boolean isChildSelectable(int i, int i1) {return true;//子item是否响应}class ViweHolder {TextView groupName;TextView childName;ImageView image;}
}

最后在MainActivity.java文件中和匹配其他适配器一样适配就好。

public class MainActivity extends Activity {private ExpandableListView exLv;private List<String> groupList;private List<List<Bean>> childList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化ArrayList;groupList = new ArrayList<String>();childList = new ArrayList<List<Bean>>();//伪造数据// 初始化一个数组;String[] title = new String[]{"我的好友", "死党", "蟑螂", "同学", "公司"};// 为ArrayList添加数据;for (int i = 0; i < title.length; i++) {groupList.add(title[i]);List<Bean> list = new ArrayList<Bean>();for (int j = 0; j < 12; j++) {list.add(new Bean(j, "小明" + j, title[i]));}// 与父亲同一层;childList.add(list);}exLv = (ExpandableListView) findViewById(lv_expand);final ExandAdapters adapter = new ExandAdapters(this, groupList, childList);exLv.setAdapter(adapter);exLv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {Toast.makeText(MainActivity.this,"你点击了" + childList.get(groupPosition).get(childPosition).getGrouName() + "\n" + childList.get(groupPosition).get(childPosition).getUserName(),Toast.LENGTH_SHORT).show();return false;}});}
}

到这里主要的代码就基本完成了,不过还有两个简单的适配布局文件没有写出,因为比较简单,所以就没有写了,如果有兴趣的可以去下载我的小demo。

源码下载

仿QQ好友列表分组折叠效果相关推荐

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

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

  2. iOS之仿QQ好友列表展开收缩效果的实现

    使用UICollectionView实现 思路 很明显整体它是一个列表,它的分组是一个列表,它里面的好友列表也是一个列表,所以就可以使用组头来设置分组列表,使用cell设置好友列表: 当点击组头的时候 ...

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

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

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

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

  5. java如何实现qq分组_Android仿QQ好友列表分组实现增删改及持久化

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

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

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

  7. 14_自定义ItemDecoration实现qq好友列表分组效果

    14_自定义ItemDecoration实现qq好友列表分组效果 一.先上效果 二.RecyclerView实现简单分组 RecyclerView比较常规的用法,显示多item布局,直接上代码: pu ...

  8. 仿QQ好友列表,QListWidget!

    仿QQ好友列表, 设计逻辑: 设计qqItem类,再添加到widget中: 设计时布局等可以直接在ui中设计:内容设计通过代码实现: qqItem.cpp #include "qqitem. ...

  9. html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

    JS仿QQ好友列表展开.收缩功能(第一篇) 发布时间:2020-10-17 14:20:03 来源:脚本之家 阅读:96 作者:erdouzhang 效果图如下所示: html: 我的好友 张三 李四 ...

最新文章

  1. 理解标准输出流方法:WriteLine和Write
  2. java线程同步的五种方法
  3. Entity Framework Relationships and Navigation Properties
  4. linux mysql设置编码_linux下修改mysql编码
  5. 大数据复核_【BIM技术】三维扫描结合BIM技术在结构复核中的应用
  6. android记事本项目案例,Android实现记事本项目完整实例源代码
  7. 信息学奥赛一本通(1054:三角形判断)
  8. php 获取mysql大小限制_php计算整个mysql数据库大小的方法
  9. 修正统计的 5 个方法
  10. java base64转Binary
  11. 应急响应-winlinux分析后门勒索病毒攻击
  12. win10家庭中文版系统配置远程桌面连接
  13. matlab如何求传递函数的幅值_MATLAB通过传递函数求截止频率
  14. 《迅雷链精品课》第一课:认识区块链
  15. 中医药大学计算机考试题,浙江中医药大学2013年级研究生《计算机应用》期末考试复习题...
  16. Python_美多商城(验证码)_3
  17. qt creator插入代码块快速注释snippets代码片段的功能
  18. 牛客网在线编程专题《剑指offer-面试题15》链表中倒数第k个节点
  19. 需求分析如何落地?这篇告诉你答案
  20. 51nod 1737 配对 【树形dp】

热门文章

  1. 曾因一张照片走红,四年后“小马云”再被送回家,14岁重读小学...
  2. [转]aircrack-ng破解教程
  3. highChart表图大全之饼图圆环图详解
  4. Linux查看ip地址时,只显示127.0.0.1
  5. 船型开关工作原理分析
  6. JMeter压力测试总结
  7. 日记 - 关于PHP的运行方式
  8. ubuntu ibus输入法实现特殊符号输入
  9. 文件权限【持续整理】
  10. Layabox谢成鸿出席TFC,公布智能优化方案可提升性能2倍!