关于ScrollView嵌套ListView

今天工作中需要这个,以前也写过这样的需求但是没有记录下来,今天趁机记录一下。也希望对大家工作有帮助!谢谢。

来电与主题无关的,要实现ScrollView滚动条的隐藏,有两种方法,

一种是在XML的ScrollView布局中加入属性android:scrollbars="none"

另一种则是在代码中获取ScrollView后进行scroll.setVerticalScrollBarEnabled(false);

 

下面来说下ScrollView如何嵌套ListView

按常理,ScrollView套ListView会存在两个问题:

1.里面的listView高度无法算出来,通常只能显示listview的其中一行
2.listview不能滚动

 

为什么ScrollView嵌套ListView会出现问题,只显示一个item的问题。

这个是计算ListView高度产生的问题。

我们可以这样解决。

第一给ListView一个固定的高度。

例如设置android:layout_height="200dip",那么可以解决,可能会影响美观。

 

第二给ScrollView设置属性:android:fillViewport="true"
测试的时候发现,如果ListView加载的数据不多的话,确实可以解决,但是当ListView加载的数据较多的时候,仍旧无法显示完全,并且这个时候ListView自身也无法滚动了。

 

第三,我也是按照这个方法的,用代码重新测量下ListView的高度。

 1    private void initLoad() {
 2         ListLoadAdapter adapter = new ListLoadAdapter();
 3         lvLoan.setAdapter(adapter);
 4         setListViewHeightBasedOnChildren(lvLoan);
 5     }
 6     public void setListViewHeightBasedOnChildren(ListView listView) {
 7         // 获取ListView对应的Adapter
 8         ListAdapter listAdapter = listView.getAdapter();
 9         if (listAdapter == null) {
10             return;
11         }
12 
13         int totalHeight = 0;
14         for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
15             // listAdapter.getCount()返回数据项的数目
16             View listItem = listAdapter.getView(i, null, listView);
17             // 计算子项View 的宽高
18             listItem.measure(0, 0);
19             // 统计所有子项的总高度
20             totalHeight += listItem.getMeasuredHeight();
21         }
22 
23         ViewGroup.LayoutParams params = listView.getLayoutParams();
24         params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
25         // listView.getDividerHeight()获取子项间分隔符占用的高度
26         // params.height最后得到整个ListView完整显示需要的高度
27         listView.setLayoutParams(params);
28     }

 

posted @ 2015-10-29 11:11  百晓生  阅读(1129)  评论(0编辑  收藏  举报