• ExpandableListView(三)只展开一个group,没有child不展开group


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

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

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

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

    效果图:

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

    重写setOnGroupClickListener方法

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

    [java] view plaincopy
    1. private int sign= -1;//控制列表的展开  
    重写onGroupClick方法

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

    运行,看一下效果:



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


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

    [java] view plaincopy
    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.         });  

  • 相关阅读:
    现代人的防范心理是不是太重
    几个概念
    Oracle 10G EM 的创建
    我爸和在我们小区里的一位老大爷
    Linux下Oracle10G服务的配置
    linux下使用文件来模拟硬盘进行ASM测试开发技术
    教你一步一步创建/配置Oracle9i Data Guard Manager
    “深入浅出”是什么导致不能以操作系统用户身份连接到数据库
    WCF 中,出现The remote server returned an unexpected response: (400) Bad Request.
    【题解】 「联合省选2020」信号传递 状压dp LOJ3302
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469669.html
Copyright © 2020-2023  润新知