0

listview我必须在android中生成一个动态。listview放在 a 里面是因为scrollview我还有其他内容要显示在listview. 像这样的东西: 在此处输入图像描述

Down部分是动态添加的listview。这一切在三星note5的纵向模式下都很好,但是当我将屏幕方向更改为横向时,列表视图不会滚动。这可能是因为我为列表视图提供了包装内容。

请检查我的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rootLayout">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:background="@color/gray25"
        android:id="@+id/scrollView"
        android:layout_above="@id/footer">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/mainLayout"
            android:background="@color/light_blue"
            android:paddingBottom="@dimen/_10sdp">
        <!--Top header-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_vertical"
                android:id="@+id/topheader"
                android:background="@drawable/dashboard_button"
                android:layout_marginLeft="@dimen/_5sdp"
                android:layout_marginRight="@dimen/_5sdp"
                android:layout_marginTop="@dimen/_5sdp"
                android:padding="@dimen/_5sdp">

            </LinearLayout>
        <!--middle portion-->


            <ListView
                android:id="@+id/RFIDList"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:transcriptMode="alwaysScroll"
                android:layout_marginTop="@dimen/_10sdp"
                android:background="@drawable/dashboard_button"
                android:layout_marginLeft="@dimen/_5sdp"
                android:layout_marginRight="@dimen/_5sdp"
                android:minHeight="@dimen/_50sdp" />

        </LinearLayout>
    </ScrollView>
<!-- Footer aligned to bottom -->
    <RelativeLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:background="@color/white">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="left"
            android:layout_centerInParent="true"
            android:layout_marginLeft="@dimen/_15sdp">               
        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

我无法为列表视图提供固定高度,因为它的项目是动态生成的。我试图找到解决方案,并尝试将我的列表视图更改为 recyclerview,但没有奏效。但任何帮助将不胜感激。

4

2 回答 2

1

如果您使用RecyclerViewuseNestedScrollView而不是ScrollView并设置

recyclerView.setNestedScrollingEnabled(false);设置布局管理器后

这里ListView查看我的答案

于 2018-03-06T06:08:12.057 回答
1

listView.setAdapter(yourAdapter); 在setlistViewHeight(listView,context);之后使用下面的方法

你的问题将得到解决。

public static void setlistViewHeight(ListView listView, Context context) {

    ListAdapter myListAdapter = listView.getAdapter();

    if (myListAdapter == null) {
        return;
    }

    int totalHeight = 0;
    for (int size = 0; size < myListAdapter.getCount(); size++) {

        View listItem = myListAdapter.getView(size, null, listView);
        if (listItem instanceof ViewGroup)
            listItem.setLayoutParams(new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT));

        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        @SuppressWarnings("deprecation")
        int screenWidth = display.getWidth();
        int listViewWidth = screenWidth - 65;
        int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth,
                View.MeasureSpec.AT_MOST);
        listItem.measure(widthSpec, 0);

        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (myListAdapter.getCount()));
    listView.setLayoutParams(params);
    listView.requestLayout();
}
于 2018-03-06T06:24:53.500 回答