ExpandableListView控件,很好的解决了listView无法进行折叠和分类的功能(在不进行自定义的情况)。但是它也有一些无法解决的问题,比如伸缩没有动画,前方的箭头位置不能更换,也不能更换图标等。
单位的项目整好用到这样的一个功能,就看了一下,现在把它做一下总结。效果如图:
这个图是最后的效果,采用的是第三方开源的AnimatedExpandableListView控件,不用担心,它是继承ExpandableListView,添加了伸缩动画。
ExpandableListView控件在使用的时候,经常会遇到以下几个问题:
1、去掉父项最左侧的上下箭头或是将它移动到最右侧
2、点击父项展开子项的时候,有互斥的效果。就是一个展开,其它的就全是关闭
3、点击父项展开子项时,有相应的动画
下面我们就一一说明以上三个问题
1、去掉父项最左侧的上下箭头或是将它移动到最右侧
这个功能,去掉父项最左侧的上下箭头,比较简单,一行代码
//去掉前面一剪头
ExpandableListView.setGroupIndicator(null);
将它移动到最右侧,不好意思,这个没有方法,你只能自己处理,简单的方法就是去掉左侧的箭头,然后在右侧自己加图片处理。这个比较简单,只要在Adapter里的getGroupView方法添加就行
此方法有一个变量boolean isExpanded,它就是用来判断状态的,根据不同的状态,你换一下右侧的图片就OK了,如下
if (isExpanded) {
gHolder.gnextIv.setImageResource(R.mipmap.ico_push_bot);
}else {
gHolder.gnextIv.setImageResource(R.mipmap.ico_next);
}
2、点击父项展开子项的时候,有互斥的效果。就是一个展开,其它的就全是关闭
这个功能,只要我们重写setOnGroupExpandListener方法就OK了
/**
* 各项显示互斥,就是一个展开,另外的关闭
*/
el_list.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
for (int i = 0; i < mAdapter.getGroupCount(); i++) {
if (groupPosition != i) {
el_list.collapseGroup(i);
}
}
}
});
3、点击父项展开子项时,有相应的动画
这个只能使用第三方控件,本身没有法子。我使用的是AnimatedExpandableListView,说到这里,我自己都在想,前面说了半天,有毛用啊。使用了第三方控件,前两个不是白说。这里强调一下,这个控件是继承自ExpandableListView的,也就是上面说的两点,在这里都同样实用。