1.当scrollView嵌套expandableListVIew时,我们获取listView的全部高度;
/**
* 计算expendableListView的初始高度
*
* @param listView
* @return
*/
public static int setListViewHeightBasedOnChildren(
ExpandableListView listView) {
// 获取ListView对应的Adapter
ExpandableListAdapter listAdapter = listView.getExpandableListAdapter();
if (listAdapter == null) {
// pre -condition
return 0;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getGroupCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listgroupItem = listAdapter.getGroupView(i, true, null,
listView);
listgroupItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listgroupItem.getMeasuredHeight(); // 统计所有子项的总高度
System.out.println("height : group" + i + "次" + totalHeight);
for (int j = 0; j < listAdapter.getChildrenCount(i); j++) {
View listchildItem = listAdapter.getChildView(i, j, false, null,
listView);
listchildItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listchildItem.getMeasuredHeight(); // 统计所有子项的总高度
System.out.println("height :" + "group:" + i + " child:" + j +
"次" + totalHeight);
}
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
return params.height;
}
2.监听expandablelistVIew’的开关
listView.setOnGroupExpandListener(new OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
// TODO Auto-generated method stub
for (int i = 0; i < listView.getAdapter().getCount(); i++) {
if ((groupPosition != i) && listView.isGroupExpanded(i)) {
listView.collapseGroup(i);
Log.d("TAG", "Expand to collapse");
} else {
UIUtils.setExpandedListViewHeightBasedOnChildren(
listView, groupPosition);
}
}
}
});
listView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
@Override
public void onGroupCollapse(int groupPosition) {
// TODO Auto-generated method stub
getViewHeight(UIUtils.setCollapseListViewHeightBasedOnChildren(
listView, groupPosition));
}
});