zoukankan      html  css  js  c++  java
  • ExpandableListView(三)只展开一个group,没有child不展开group

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

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

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

     

    [java]  view plain copy
     
    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 plain copy
     
    1. private int sign= -1;//控制列表的展开  

    重写 onGroupClick方法

     

     

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


  • 相关阅读:
    Android 自定义RadioButton的样式
    利用ListView批量删除item
    android中checkbox自定义样式
    Android 限定符
    Android Fragment的用法(二)
    Android Fragment的用法(一)
    Android 自定义控件
    Android 外部启动activity,自定义action,action常量大全
    Android之编写测试用例
    Android 定制自己的日志工具
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3325147.html