`
从此醉
  • 浏览: 1044509 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

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

  1. mListView.setOnGroupExpandListener(newOnGroupExpandListener(){
  2. @Override
  3. publicvoidonGroupExpand(intgroupPosition){
  4. //TODOAuto-generatedmethodstub
  5. for(inti=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展开的状态

  1. privateintsign=-1;//控制列表的展开
重写onGroupClick方法

  1. //只展开一个group的实现方法
  2. mListView.setOnGroupClickListener(newOnGroupClickListener(){
  3. @Override
  4. publicbooleanonGroupClick(ExpandableListViewparent,Viewv,
  5. intgroupPosition,longid){
  6. //TODOAuto-generatedmethodstub
  7. if(sign==-1){
  8. //展开被选的group
  9. mListView.expandGroup(groupPosition);
  10. //设置被选中的group置于顶端
  11. mListView.setSelectedGroup(groupPosition);
  12. sign=groupPosition;
  13. }elseif(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. returntrue;
  25. }
  26. });

运行,看一下效果:



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


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

  1. //这里是控制如果列表没有孩子菜单不展开的效果
  2. mListView
  3. .setOnGroupClickListener(newExpandableListView.OnGroupClickListener(){
  4. @Override
  5. publicbooleanonGroupClick(ExpandableListViewparent,
  6. Viewv,intgroupPosition,longid){
  7. //TODOAuto-generatedmethodstub
  8. if(childData.get(groupPosition).isEmpty()){//isEmpty没有
  9. returntrue;
  10. }else{
  11. returnfalse;
  12. }
  13. }
  14. });

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics