android: RecyclerView inside a ScrollView (or parallax)

android: RecyclerView inside a ScrollView (or parallax)

我有一个片段 2 cardviews,里面有多个控件。

下面 第二个卡片视图我有一个 recyclerview,这个工作 完美.

问题是 recyclerview 开始 屏幕底部,并且滚动 recyclerview 非常

以前使用的是列表视图,这让我适合你的内容,因此可以立即在屏幕上滚动,但使用 recylclerview 不能。

当我在 recyclerview 中滚动时,如何使控件像视差效果一样上升

编辑:更清楚,想象一个片段中有 2 个 cardview,它们占据了屏幕的 80%,在这些之上,一个带有 100 个项目列表的 recyclerview,但是滚动太小了......列表视图让我适应 "content" 并立即滚动整个屏幕。

这是我的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/svScroll"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <include
            android:id="@+id/cvCampos1"
            layout="@layout/ctlcabeceralibreta" />

        <include
            android:id="@+id/cvCampos2"
            layout="@layout/ctlcabeceralibreta2" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rvRegistros"
            android:layout_width="fill_parent"
            android:layout_height="1000dp"
            android:layout_below="@id/cvCampos2"
            android:scrollbars="vertical" />
    </RelativeLayout>

</ScrollView>

这是截图:

putting a fixed height works !!! but I need to calculate the height of the number of items in the list

这适用于列表视图(我没有用 recyclerview 测试它)

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            if (listItem instanceof ViewGroup) {
                listItem.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.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);
    }

来源:

Full example

在上述情况下,您需要做的是在同一个recyclerview中使用多个ViewHolders

我看到你那里有三种类型的布局。 recyclerview.

中的前两张卡片和其他布局

RecyclerView with multiple View Types 举例说明如何在简单的回收视图中使用多个视图类型。