Android学习 之 有关问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案

Android学习 之 问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案

参考自:http://*.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing/3495908#3495908

 

利用下面这个Utility 类的静态方法setListViewHeightBasedOnChildren()即可实现:

 

 

 

在listview.setAdapter()之后调用Utility.setListViewHeightBasedOnChilren(listview)就Okay 了。
public class Utility {
public static void setListViewHeightBasedOnChildren(ListView listView) {
//获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter(); 
if (listAdapter == null) {
// pre-condition
return;
}

int totalHeight = 0;
for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); //计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
//listView.getDividerHeight()获取子项间分隔符占用的高度
//params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
}

 

其实原理就是动态的改变ListView控件的高度。

1 楼 androidHome 2011-10-19  
兄台请问listView本身需要设置哪些属性?我也遇到和你同样的问题,引用上面这个工具类设置高度以后发现并没有起到什么效果,不知道是不是我代码里面还缺些什么设置,多谢多谢!

2 楼 androidHome 2011-10-19  
哦,补充一下,我这没有给ListView写xml布局文件,只是给其中的listview item写了xml布局文件。
3 楼 ldci3gandroid 2011-10-21  
androidHome 写道
兄台请问listView本身需要设置哪些属性?我也遇到和你同样的问题,引用上面这个工具类设置高度以后发现并没有起到什么效果,不知道是不是我代码里面还缺些什么设置,多谢多谢!


应该是你没设置对,你可以把问题描述的清楚些吗 呵呵
4 楼 yunlike1986 2011-10-27  
我调用这个方法测量的ListView每一项的高度都是58,雷打不动,不知道是什么原因导致的
5 楼 zx1326687 2011-11-17  
很奇怪,我一直在listItem.measure(0, 0); //计算子项View 的宽高  这里出错,都是报空指针异常,这是什么问题?!
6 楼 ldci3gandroid 2011-11-29  
yunlike1986 写道
我调用这个方法测量的ListView每一项的高度都是58,雷打不动,不知道是什么原因导致的

雷打不动的 那肯定是代码问题了 建议你好好检查一下
7 楼 ldci3gandroid 2011-11-29  
zx1326687 写道
很奇怪,我一直在listItem.measure(0, 0); //计算子项View 的宽高  这里出错,都是报空指针异常,这是什么问题?!



空指针错误很好查的 肯定是哪个对象为null 请仔细检查一遍
8 楼 learner576539763 2012-03-06  
真的是空指针。。。。。 打上log 显示所需的对象都得到了 但就是提示listItem.measure(0, 0);处有空  楼主 能给指点下吗
9 楼 yahier 2012-04-05  
learner576539763 写道
真的是空指针。。。。。 打上log 显示所需的对象都得到了 但就是提示listItem.measure(0, 0);处有空  楼主 能给指点下吗


我也遇到 我的解决办法是将 listview的item的布局从relativelayout 改成linearlayout 不过我也不知道原理