今天做项目时用到了二级分类列表,我的做法就是用ExpandableListview+Listview嵌套,的确是可行的,但是会出现listview永远只显示一行的高度。当时一看到这个问题,我就觉得是listview没有去计算父布局的高度,因此我写了个mylistview,继承listview
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
重写了onMeasure方法,就是让listview 的高度能匹配外免滑动层的高度。
经过测试,发现还是解决不了我的问题,listview始终只显示一行多一点。这个就很纠结了,问题很明显,listview作为expanablelistview的子布局,不能匹配它的高度。
突然想到,我可以试试把listview的高度固定,很明显,我这种想法又失败了。到这里就明白了,问题应该出在expandablelistview上面。
我想到,你既然始终只显示一行,那么我就把子布局的高度设为定值,这样是可以显示出来,但是会出现一个问题,它不能去适配lisview的高度。那这种方法又只有out了。
万般无奈,发狠了。你既然只显示一行,那我干脆点,把getchildCount的值设为1
@Override
public int getGroupCount() {
return mDatas.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
经过测试发现竟然可以。纠结半天的问题竟然就这么解决了,内心是又激动又迷茫。不过自己细想了之后发现这么做是有道理的,既然expanablelistview的子布局里面是一个listview,那么它对应的childcount就应该是1才对。
本文只是为了记录自己的学习成长历程,每天多一点,未来美好一点。