ScrollView中嵌套ListView显示不全,前两天在网上找了一段代码,发现还是有问题,代码如下
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);   
}哪位大牛有好的解决方案吗?不胜感激!!!

解决方案 »

  1.   

    在listview外面加一层layout在放到scrollview里面去
      

  2.   

    自定义不带滚动条的ListView,在布局文件中将<ListView> 换成 <com.xx.MyListView>public class MyListView extends GridView { 
        public MyListView(Context context, AttributeSet attrs) { 
            super(context, attrs); 
        }     public MyListView(Context context) { 
            super(context); 
        }     public MyListView(Context context, AttributeSet attrs, int defStyle) { 
            super(context, attrs, defStyle); 
        }     @Override 
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {         int expandSpec = MeasureSpec.makeMeasureSpec( 
                    Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
            super.onMeasure(widthMeasureSpec, expandSpec); 
        } 

      

  3.   

    上面代码有点小错误,把继承自GridView改成ListView
      

  4.   

    果然很强大,现在还有一个问题就是如果ListView处于选中状态的话,滚动ListView的话,外部的ScrollView不能同时滚动,我想屏蔽ListView的滚动事件,不知道有没有好的方法,谢谢了