Android:ScrollView中的Listview

时间:2014-05-23 15:01:14

标签: android listview scrollview

我希望有一个可以滚动的布局和里面的列表视图。 列表视图将根据其中的项目数量来扩展它的高度。只有外部的ScrollView可以滚动 这是我的代码:

<ScrollView
            android:id="@+id/layout_box"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/layout_height_small"
                    android:gravity="center_vertical" >

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="left"
                        android:layout_marginLeft="@dimen/layout_margin_medium"
                        android:layout_marginTop="@dimen/layout_margin_medium"
                        android:gravity="center"
                        android:text="@string/list_regist_box_content"
                        android:textSize="@dimen/text_size_medium"
                        android:textStyle="bold" />
                </RelativeLayout>

                <RelativeLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:background="#ffffff" >

                    <ListView
                        android:id="@+id/list_registed_box"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content" >
                    </ListView>
                </RelativeLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/btn_add_regist_box"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="left"
                        android:layout_marginTop="3dp"
                        android:gravity="center"
                        android:paddingBottom="@dimen/layout_margin_medium"
                        android:paddingTop="@dimen/layout_margin_medium"
                        android:text="@string/add_regist_box"
                        android:textColor="#0F88FF"
                        android:textSize="@dimen/text_size_medium" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="left"
                        android:layout_marginLeft="@dimen/layout_margin_medium"
                        android:layout_marginTop="@dimen/layout_margin_large"
                        android:gravity="center"
                        android:text="@string/amount"
                        android:textSize="@dimen/text_size_medium"
                        android:textStyle="bold" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/common_row_height"
                    android:background="@drawable/white_bg_grey_border_bottom"
                    android:gravity="center_vertical"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/list_regist_description"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:layout_marginLeft="@dimen/layout_margin_medium"
                        android:layout_marginRight="@dimen/layout_width_medium"
                        android:gravity="center_vertical"
                        android:text="@string/total"
                        android:textSize="@dimen/text_size_medium" />
                </LinearLayout>
</ScrollView>

但是listview既不扩展也不可滚动。

请帮忙!

4 个答案:

答案 0 :(得分:3)

不要将ListView放在ScrollView中 - android clud的第一条规则:) 相反,您可以使用简单的LinearLayout并管理其中的ListView项。 或者您可以将页眉/页脚视图添加到ListView并使用它而不使用scrollview。

答案 1 :(得分:1)

您必须使用此自定义ScrollView替换<ScrollView ></ScrollView>,如<com.tmd.utils.VerticalScrollview > </com.tmd.utils.VerticalScrollview >

尝试此链接... https://stackoverflow.com/a/11554684/6334037

为我工作..

答案 2 :(得分:0)

实际上, 可以将ListView置于ScrollView之内。在某些用例中(例如动态菜单/子菜单,它是一个合理的解决方案)。但是,有两个警告适用:

  • ListView没有滚动。通常,在Android中无法进行嵌套滚动。有一些黑客可以使它工作(主要是使用requestDisallowInterceptTouchEvent()),但在所有情况下都很难使它们正常工作。
  • 因此,您必须指明ListView显示所有项目所需的确切高度(通过其相应的LayoutParams)。设置WRAP_CONTENT将无效。

答案 3 :(得分:0)

我使用下面的代码行来滚动滚动视图中的列表项。它对我的要求很好,我希望它能帮到你。

谢谢, Murali.M

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();
    }