本文是自己在实践中,发现的问题。

有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group

在一个ExpandableListView,如何实现只展开一个group,方法如下:

[java] 
view plain
copy

 

  1. mListView.setOnGroupExpandListener(new OnGroupExpandListener() {
  2. @Override
  3. public void onGroupExpand(int groupPosition) {
  4. // TODO Auto-generated method stub
  5. for (int i = 0; i < mAdapter.getGroupCount(); i++) {
  6. if (groupPosition != i) {
  7. mListView.collapseGroup(i);
  8. }
  9. }
  10. }
  11. });

效果图:

上图的效果,看上去很好,但是存在一个问题,虽然只展开了一个group,但是在点击下一个group的时候,该group的标题不会置顶,这就造成了一些困惑,为了解决这个问题,用到了下边的方法解决:

重写setOnGroupClickListener方法

首先要有一个sign,可以是int sign,用来记录group展开的状态

[java] 
view plain
copy

 

  1. private int sign= -1;//控制列表的展开

重写
onGroupClick方法

[java] 
view plain
copy

 

  1. //只展开一个group的实现方法
  2. mListView.setOnGroupClickListener(new OnGroupClickListener() {
  3. @Override
  4. public boolean onGroupClick(ExpandableListView parent, View v,
  5. int groupPosition, long id) {
  6. // TODO Auto-generated method stub
  7. if (sign== -1) {
  8. // 展开被选的group
  9. mListView.expandGroup(groupPosition);
  10. // 设置被选中的group置于顶端
  11. mListView.setSelectedGroup(groupPosition);
  12. sign= groupPosition;
  13. } else if (sign== groupPosition) {
  14. mListView.collapseGroup(sign);
  15. sign= -1;
  16. } else {
  17. mListView.collapseGroup(sign);
  18. // 展开被选的group
  19. mListView.expandGroup(groupPosition);
  20. // 设置被选中的group置于顶端
  21. mListView.setSelectedGroup(groupPosition);
  22. sign= groupPosition;
  23. }
  24. return true;
  25. }
  26. });

运行,看一下效果:

至此,在只打开一个group的同时,标题置顶

最后,补充一下,在group没有child的情况下,不展开group

[java] 
view plain
copy

 

  1. // 这里是控制如果列表没有孩子菜单不展开的效果
  2. mListView
  3. .setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
  4. @Override
  5. public boolean onGroupClick(ExpandableListView parent,
  6. View v, int groupPosition, long id) {
  7. // TODO Auto-generated method stub
  8. if (childData.get(groupPosition).isEmpty()) {// isEmpty没有
  9. return true;
  10. } else {
  11. return false;
  12. }
  13. }
  14. });

最新文章

  1. SELECT CAST(GETDATE() AS VARCHAR(10)) 显示不同格式的原因
  2. ActiveMQ与WebSocket的结合应用
  3. thinkphp 项目分组 -开发随笔1
  4. Spring Integration - 自动轮询发送手机短信
  5. [MySQL]安装和启动
  6. linux man使用方法 和centos安装中文man包 --转
  7. 《零成本实现Web自动化测试--基于Selenium》第三章 Selenium-IDE
  8. git-svn 的使用
  9. UI原则之-拼车
  10. Eureka学习例子
  11. Data Base mongodb高版本与低版本的区别
  12. weex 启动 ios 模拟器
  13. [css 揭秘]:CSS揭秘 技巧(二):多重边框
  14. C#单例模式的几种实现方式
  15. Java泛型相关总结(下)
  16. [solution]JZOJ-5838 旅游路线
  17. python 条件语句和基础数据类型
  18. collectionView代理方法快速设置cell大小上下左右间隔
  19. [leetcode]Populating Next Right Pointers in Each Node II @ Python
  20. 【spring mvc】扒一扒tomcat

热门文章

  1. Unhandled Exxception “Unhandled exception type IOException”?
  2. jquery的$().each,$.each的区别与应用
  3. spoj ONP - Transform the Expression 中缀转后缀
  4. Scala类型声明与定义、函数定义、流程控制、异常处理
  5. windbg命令学习4
  6. rsyslog ~ 波浪号
  7. libvirt C-API
  8. 关于java同步包中ConcurrentLinkedQueue类的深入分析与理解
  9. struts2 全局格式化,格式化时间,金钱,数字
  10. 经常使用的DB2命令(2)