两个RecyclerViews在一个布局下面

我怎样才能在一个布局下得到两个RecyclerViews? 我不希望所有项目都有一个RecyclerView。 我的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@color/main__item_background" android:layout_height="match_parent" android:layout_width="match_parent"> <TextView android:text="@string/find_friends__already_playing" android:background="@color/header" android:gravity="center" android:layout_width="match_parent" android:layout_height="@dimen/list_header" android:visibility="visible"/> <android.support.v7.widget.RecyclerView android:id="@+id/in_app_friends" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <TextView android:text="@string/find_friends__invite_friends" android:background="@color/find_friends__header" android:gravity="center" android:layout_width="match_parent" android:layout_height="@dimen/list_header" /> <android.support.v7.widget.RecyclerView android:id="@+id/friends_to_invite" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </LinearLayout> 

Solutions Collecting From Web of "两个RecyclerViews在一个布局下面"

我自己find了答案。

您需要将LinearLayout放入ScrollView,并使用wrap_content作为RecyclerView的layout_height

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:fillViewport="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="@dimen/list_header" android:background="@color/header" android:gravity="center" android:text="@string/find_friends__already_playing" android:visibility="visible" /> <android.support.v7.widget.RecyclerView android:id="@+id/in_app_friends" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:background="@color/white"/> <TextView android:layout_width="match_parent" android:layout_height="@dimen/list_header" android:background="@color/find_friends__header" android:gravity="center" android:text="@string/find_friends__invite_friends" /> <android.support.v7.widget.RecyclerView android:id="@+id/friends_to_invite" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white"/> </LinearLayout> </ScrollView> 

还有一个与RecyclerView和wrap_content错误,所以你必须使用自定义布局pipe理器 。 看看这篇文章: 我如何让WRAP_CONTENT在RecyclerView上工作

我也有同样的问题,并写了一个库,这有助于通过join适配器和布局来实现这一目标。

Gradle依赖性来尝试它(需要jcenter回购):

 compile 'su.j2e:rv-joiner:1.0.3'//latest version by now 

Thea更改xml以使用与父代匹配的单个RecyclerView:

 <android.support.v7.widget.RecyclerView android:id="@+id/joined_friends_rv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="5dp" android:background="@color/white"/> 

然后在代码中初始化RecyclerView,如下所示:

  //init your RecyclerView as usual RecyclerView rv = (RecyclerView) findViewById(R.id.joined_friends_rv); rv.setLayoutManager(new LinearLayoutManager(this)); //construct a joiner RvJoiner rvJoiner = new RvJoiner(); rvJoiner.add(new JoinableLayout(R.layout.your_title_for_in_app)); rvJoiner.add(new JoinableAdapter(new YourInAppRvAdapter())); rvJoiner.add(new JoinableLayout(R.layout.your_title_for_invite)); rvJoiner.add(new JoinableAdapter(new YourInviteRvAdapter())); //set join adapter to your RecyclerView rv.setAdapter(rvJoiner.getAdapter()); 

您可以点击此链接了解更多图书馆的详细信息和解释。 希望能帮助到你。

您可以给每个RecycleView高度等于0dp和重量等于1:

 android:layout_height="0dp" android:layout_width="match_parent" android:layout_weight="1" 

使用NestedScrollView作为父布局,它应该有

 android:weightSum="2" 

并给予

 android:layout_weight="1" 

到你的每个RecyclerView。它应该一个接一个滚动。

如果底部recyclerview不滚动主内容,请将LinearLayout(请参阅alan_derua的答案)更改为ConstraintLayout并将两个RecyclerViews包装在内部。 见下面的代码:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" android:fillViewport="true"> <android.support.constraint.ConstraintLayout android:id="@+id/task_list" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/first_list_view" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toTopOf="@+id/textView3" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="packed" /> <TextView android:id="@+id/textView3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:layout_marginStart="24dp" android:layout_marginTop="24dp" android:gravity="left" android:paddingTop="0dp" android:text="@string/my_tasks" app:layout_constraintBottom_toTopOf="@+id/second_list_view" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/first_list_view" /> <android.support.v7.widget.RecyclerView android:id="@+id/second_list_view" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView3" /> </android.support.constraint.ConstraintLayout> </ScrollView> 

这对我有用!

只要使用:

 <android.support.v7.widget.RecyclerView android:id="@+id/card_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:scrollbars="vertical" android:layout_below="@+id/your_first_recycler"/> 

最后一行是为了你的问题。