风言枫语  

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

有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个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.         });  


posted on 2013-09-16 20:30  风言枫语  阅读(359)  评论(0编辑  收藏  举报