ScrollView中不可滚动的ListView,具有不同大小的项目

时间:2014-04-16 06:52:17

标签: android listview

ScrollView中不可滚动的ListView,具有不同大小的项目。实际上我尝试得到没有列表项目,并给出高度=没有项目*第一项的高度,但问题是我有列表中不同高度的项目,所以最后一项有时不可见。 这是我的自定义列表视图:

public class ExpandedListView  extends ListView {

    private android.view.ViewGroup.LayoutParams params;
    private int old_count = 0;
    int limit=0;
    public ExpandedListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (getCount() != old_count) {
            old_count = getCount();
            params = getLayoutParams();
            int height=0;

            int h =getCount() * (old_count > 0 ? getChildAt(0).getHeight() : 0);

            int minHeight=setListViewHeightBasedOnChildren(this);
            if (h>minHeight) {
                params.height=h+8 * (getCount() - 1)+25;
                setLayoutParams(params);
            }

            super.onDraw(canvas);
        }
    }

    public static int setListViewHeightBasedOnChildren(ListView listView) {

        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return 0;
        }

        int totalHeight = 0;
        for (int i = 0, len = listAdapter.getCount(); i < len; 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))+100;

        listView.setLayoutParams(params);
        return params.height;
    }

}

1 个答案:

答案 0 :(得分:0)

我完全不明白你的问题。

如果你想使listview scrolable与每个listview项目的高度和宽度相同,那么使用inflater.make单行并使用inflater在数组中使用它。

如果您的问题是这样,那么我会向您展示listview的代码,其中包含每个listview项目的相同高度和宽度。