包装RecycleView中的所有元素

时间:2017-05-10 14:55:45

标签: android android-recyclerview

我有两个recyclerViews(一个在秒下)。如何使它们不缩放并调整到所有元素高度,因此它们不需要滚动,滚动主ScrollView可以看到所有项目? 现在它看起来:

enter image description here

我的xml:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:fitsSystemWindows="true">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/appBarLayout"
            >

            <LinearLayout
                android:id="@+id/content_detail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:layout_marginTop="15dp"
                android:orientation="vertical"
                android:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <LinearLayout
                        android:layout_width="0px"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:orientation="horizontal">

                        <ImageView
                            android:id="@+id/ivPoster"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_gravity="center"
                            android:layout_weight="1"
                            app:srcCompat="@mipmap/ic_launcher" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0px"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/tvTitle"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:text="Title"
                            android:textSize="18sp"
                            android:textStyle="bold" />

                        <TextView
                            android:id="@+id/tvDate"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="01.01.2001" />

                        <TextView
                            android:id="@+id/tvRate"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="5.10/10" />

                        <Button
                            android:id="@+id/btFav"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Mark as favourite"
                            android:textSize="12sp" />
                    </LinearLayout>
                </LinearLayout>


                <TextView
                    android:id="@+id/tvOverview"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:text="Lorem Ipsum" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:textColor="#000df0"
                    android:text="Trailers:" />


                <android.support.v7.widget.RecyclerView
                    android:id="@+id/trailerRecyclerView"

                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:textColor="#000df0"
                    android:text="Reviews:" />
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/reviewRecyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />


            </LinearLayout>
        </ScrollView>

    </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

1 个答案:

答案 0 :(得分:2)

问题的最简单的解决方案是使用NestedScrollView而不是ScrollView作为根滚动元素。

但是...

如果您真的考虑到这一切,那么就代码性能而言,它并不是真正的解决方案。因为它看起来会像所期望的那样但效率不高。

如果您的RecyclerView包装其内容(您希望它的方式),它会立即膨胀所有项目,而不是真正使用其recycling功能。它不会重用任何只保留内存中所有内容的项目。从本质上讲,它会成为一个组件,根据某些数据使用Views创建大量Adapter,而不是RecyclerView

你应该实现这样的事情的方法是创建一个Adapter来膨胀多种类型的Views(在你的情况下确切地说是4种类型),并使用一个{{1}而不是你的整个RecyclerView。 SO上有多个线程描述了如何创建这样的ScrollView。例如here

为了帮助您,请按照以下方式规划视图类型: