ListView嵌套ListView后出现的子项ListView显示问题

最近作的一个项目中出现了须要显示内容加留言的需求,就像微信朋友圈那样,内容下方要显示用户的留言信息,第一时间想到l了ListView嵌套ListView的显示方式,但实际操做中发现,嵌套后若是不给子项的ListView设置高度,显示的时候子项的ListView是不会显示的,后来在网上找到了一种方法,计算子项的高度:java

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return;
        }
        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight
                                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

此方法能够根据你设置的adapter动态计算出各个子项的高度,可是实际应用时发现,当ListView的每项留言都只有一行时。此方法显示正常,但是要是有一条的留言须要占用1行以上的高度,此方法所计算出的高度就会与实际要显示的内容高度不一致 后来经过继承ListView,并重写onmesure方法解决了子项留言显示的问题, onmesure重写方法以下:微信

<!-- lang: java -->
 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                            MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
    }

关于MeasureSpec的介绍可浏览这篇博文:http://blog.csdn.net/kaixinbingju/article/details/8649218ide

相关文章
相关标签/搜索