关于滚动布局中的Listview的高度重新计算

将计算高度的方法导入你的方法类里面。作为一个通用的方法。

注意该方法一定是在你的设置Adapter(**.setAdapter())之后。

如果你是更新了listview里面的数据,设置高度的方法就跟在notifyDataSetChanged()后面。(原因:导入新数据生成了新的item,高度改变)

/**
     * 设置listview高度的方法
     * @param listView
     */
    public static void setListViewHeight(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);   //获得每个子item的视图
            listItem.measure(0, 0);   //先判断写入的widthMeasureSpec和heightMeasureSpec是否和当前的值相等,如果不等,重新调用onMeasure()
            totalHeight += listItem.getMeasuredHeight();   //把每个item高度累加
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));   //加上每个item之间的距离
        listView.setLayoutParams(params);
    }


你可能感兴趣的:(android)