ListView显示所有内容

时间:2013-11-29 00:06:20

标签: android listview

我知道在这个主题上有很多Q& A,但我仍然找不到正确的答案。

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

在LinearLayout中设置项目集合不是一个解决方案 - 它只是该死的。当ListView立即执行时,绘制100个项目需要2-3秒。

2 个答案:

答案 0 :(得分:0)

您可以将ListView的{​​{1}}设置为layout_height,但它会与LinearLayout一样慢。 wrap_content的重点是它的内容是假的;它只创建在其高度内可见的行。使其与其内容一样高,将剥夺其优势。

我建议你重新考虑一下你想做什么。也许您可以将所有小部件放在ListView内,然后就不需要ListView

答案 1 :(得分:0)

您可以尝试使用此代码段

在运行时设置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);
    }

使用此

的示例
listComment.setAdapter(new CommentAdapter(comment,
                        AppDetailActivity.this));
                listComment.postDelayed(new Runnable() {

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

                    }
                }, 500);