Android 显示所有内容的列表视图

Android 显示所有内容的列表视图,android,listview,Android,Listview,我知道有很多关于这个话题的问答,但我仍然没有找到正确的答案 我希望我的ListView(在ScrollView中)在屏幕的底部边缘“展开”以显示所有项目,而不需要滚动条,因此将ListView放在ScrollView中不会有问题,我们可以滚动整个活动 将项目集合放在LinearLayout中并不是一个解决方案-它只是太慢了。绘制100个项目需要2-3秒,而ListView会立即绘制 您可以将列表视图的布局高度设置为包裹内容,但这样会像线性布局一样慢。ListView的全部观点是它的内容是假的;它

我知道有很多关于这个话题的问答,但我仍然没有找到正确的答案

我希望我的ListView(在ScrollView中)在屏幕的底部边缘“展开”以显示所有项目,而不需要滚动条,因此将ListView放在ScrollView中不会有问题,我们可以滚动整个活动


将项目集合放在LinearLayout中并不是一个解决方案-它只是太慢了。绘制100个项目需要2-3秒,而ListView会立即绘制

您可以将
列表视图
布局高度
设置为
包裹内容
,但这样会像线性布局一样慢。
ListView
的全部观点是它的内容是假的;它仅创建在其高度范围内可见的行。让它和它的内容一样高会剥夺它的优势


我建议你想想你想做什么。也许您可以将所有小部件放在
列表视图
中,这样您就不需要
滚动视图

您可以使用此代码段尝试在运行时设置列表视图的高度

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);
            if (listItem instanceof ViewGroup)
                listItem.setLayoutParams(new LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

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

关于重新思考:)我需要显示列表之外的一些数据。这些数据占用垂直空间。如果我想让我的用户看到尽可能多的列表,我必须从屏幕上删除其他数据。最好的方法是向下滚动。通过这种方式,我可以确定用户想要什么——只想看到列表。我真的不知道有没有其他方法可以实现这一点。很抱歉,它没有解决我的问题,因为当时我使用的MvvmCross无法进行任何页脚或页眉视图。我不知道现在是否可以做这件事。我花了几个月的时间让我的客户相信标签是Android的正确选择。所以我实际上根本没有解决这个问题。
listComment.setAdapter(new CommentAdapter(comment,
                        AppDetailActivity.this));
                listComment.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Utils.setListViewHeightBasedOnChildren(listComment);

                    }
                }, 500);