ScrollView中加入ListView

相信大家都知道在Scrollview使用ListView的话会导致ListView的大小不符合设定的要求,一个方法是重写ListView的onMeasure方法,但是这样的后果是当ScrollView滚动的时候导致adapter的getView方法被反复地调用。

这里说一个更好地方法

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        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);
    listView.requestLayout();
}

这里通过调用了一遍adapter的getView方法,把整个ListView的高度都计算好以后再手动设置它的高度,这样就getView被调用的次数明显减少了。

你可能感兴趣的:(ScrollView中加入ListView)