您的位置:首页 > 其它

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

2013-09-16 11:24 393 查看
本文是自己在实践中,发现的问题。

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

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

[java] view
plaincopy

mListView.setOnGroupExpandListener(new OnGroupExpandListener() {

@Override

public void onGroupExpand(int groupPosition) {

// TODO Auto-generated method stub

for (int i = 0; i < mAdapter.getGroupCount(); i++) {

if (groupPosition != i) {

mListView.collapseGroup(i);

}

}

}

});

效果图:



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

重写setOnGroupClickListener方法

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

[java] view
plaincopy

private int sign= -1;//控制列表的展开

重写onGroupClick方法

[java] view
plaincopy

//只展开一个group的实现方法

mListView.setOnGroupClickListener(new OnGroupClickListener() {

@Override

public boolean onGroupClick(ExpandableListView parent, View v,

int groupPosition, long id) {

// TODO Auto-generated method stub

if (sign== -1) {

// 展开被选的group

mListView.expandGroup(groupPosition);

// 设置被选中的group置于顶端

mListView.setSelectedGroup(groupPosition);

sign= groupPosition;

} else if (sign== groupPosition) {

mListView.collapseGroup(sign);

sign= -1;

} else {

mListView.collapseGroup(sign);

// 展开被选的group

mListView.expandGroup(groupPosition);

// 设置被选中的group置于顶端

mListView.setSelectedGroup(groupPosition);

sign= groupPosition;

}

return true;

}

});

运行,看一下效果:



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

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

[java] view
plaincopy

// 这里是控制如果列表没有孩子菜单不展开的效果

mListView

.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

@Override

public boolean onGroupClick(ExpandableListView parent,

View v, int groupPosition, long id) {

// TODO Auto-generated method stub

if (childData.get(groupPosition).isEmpty()) {// isEmpty没有

return true;

} else {

return false;

}

}

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐