本文是自己在实践中,发现的问题。
有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group
在一个ExpandableListView,如何实现只展开一个group,方法如下:
- mListView.setOnGroupExpandListener(newOnGroupExpandListener(){
- @Override
- publicvoidonGroupExpand(intgroupPosition){
- //TODOAuto-generatedmethodstub
- for(inti=0;i<mAdapter.getGroupCount();i++){
- if(groupPosition!=i){
- mListView.collapseGroup(i);
- }
- }
- }
- });
效果图:
上图的效果,看上去很好,但是存在一个问题,虽然只展开了一个group,但是在点击下一个group的时候,该group的标题不会置顶,这就造成了一些困惑,为了解决这个问题,用到了下边的方法解决:
重写setOnGroupClickListener方法
首先要有一个sign,可以是int sign,用来记录group展开的状态
- privateintsign=-1;//控制列表的展开
- //只展开一个group的实现方法
- mListView.setOnGroupClickListener(newOnGroupClickListener(){
- @Override
- publicbooleanonGroupClick(ExpandableListViewparent,Viewv,
- intgroupPosition,longid){
- //TODOAuto-generatedmethodstub
- if(sign==-1){
- //展开被选的group
- mListView.expandGroup(groupPosition);
- //设置被选中的group置于顶端
- mListView.setSelectedGroup(groupPosition);
- sign=groupPosition;
- }elseif(sign==groupPosition){
- mListView.collapseGroup(sign);
- sign=-1;
- }else{
- mListView.collapseGroup(sign);
- //展开被选的group
- mListView.expandGroup(groupPosition);
- //设置被选中的group置于顶端
- mListView.setSelectedGroup(groupPosition);
- sign=groupPosition;
- }
- returntrue;
- }
- });
运行,看一下效果:
至此,在只打开一个group的同时,标题置顶
最后,补充一下,在group没有child的情况下,不展开group
- //这里是控制如果列表没有孩子菜单不展开的效果
- mListView
- .setOnGroupClickListener(newExpandableListView.OnGroupClickListener(){
- @Override
- publicbooleanonGroupClick(ExpandableListViewparent,
- Viewv,intgroupPosition,longid){
- //TODOAuto-generatedmethodstub
- if(childData.get(groupPosition).isEmpty()){//isEmpty没有
- returntrue;
- }else{
- returnfalse;
- }
- }
- });