ScrollView嵌套ListView只显示一行解决方案

来源:互联网 发布:学软件软件好的学校 编辑:程序博客网 时间:2024/05/17 09:31
今天写代码,在ScrollView里边嵌套了个ListView,后边就发现数据源里好多数据,但ListView只是显示1行。
         各种debug,打log,数据什么的都没问题,上网百度了下,发现原来是ScrollView嵌套ListView的一个Bug。
         在ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。
         实现代码如下:
 
预览源代码
打印
01privatevoid setListViewHeightBasedOnChildren(ListView listView) {
02                ListAdapter listAdapter = listView.getAdapter();
03                if(listAdapter == null) {
04                        // pre-condition
05                        return;
06                }
07 
08                inttotalHeight = 0;
09                for(inti = 0; i < listAdapter.getCount(); i++) {
10                        View listItem = listAdapter.getView(i, null, listView);
11                        listItem.measure(0,0);
12                        totalHeight += listItem.getMeasuredHeight();
13                }
14 
15                ViewGroup.LayoutParams params = listView.getLayoutParams();
16                params.height = totalHeight
17                                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
18                listView.setLayoutParams(params);
19        }

看到大家的回复,还有更简单的方法:
        不需要硬着算,只需要自定义ListView,重写下OnMeasured方法就好了,受教了,谢谢
1publicvoid onMeasure(intwidthMeasureSpec, intheightMeasureSpec) {
2        intmExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
3        super.onMeasure(widthMeasureSpec, mExpandSpec);
4 
5   }

0 0
原创粉丝点击