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)); } });
