一个屏幕上有两个RecyclerViews

时间:2018-01-03 18:21:07

标签: android android-layout

我被赋予了在移动应用程序上实现功能的任务。以前我没有Android和Java的经验。

我需要的是一个屏幕(一个片段),一个接一个地显示两个成员数不均匀的事件列表,让我们称之为ListX和ListY。

我制作了包含两个RecyclerViews和两个标签的布局(一个标签用作每个回收站视图的标题)。 它现在正在工作,我显示了事件,但ListX是可滚动的,即使它的layout_height设置为wrap_content(当时只显示6个项目),而ListY不可滚动并且正在显示集合中的所有事件。

我需要的是ListX中的所有项目都显示在第一个RecyclerView中(没有滚动),然后在第二个RecyclerView中显示的ListY也没有滚动。

布局:

<FrameLayout
    android:id="@+id/resultsView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible">


        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

                <TextView
                    android:id="@+id/label_daily" />

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/list_daily"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="8dp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/label_daily"
                    tools:listitem="@layout/fragment_timetracking_event_item" />

                <TextView
                    android:id="@+id/label_unfinished" />

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/list_unfinished"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="8dp"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="8dp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/label_unfinished"
                    tools:listitem="@layout/fragment_timetracking_event_item" />

            </LinearLayout>
        </ScrollView>

    </android.support.v4.widget.SwipeRefreshLayout>

</FrameLayout>

正如您从XML中看到的那样,RecyclerViews的layout_height设置为wrap_content,但是第一个RecyclerView没有服从。

Here is sketch of how it should look like

有没有办法将两个列表放在一个RecyclerView中并制作自定义分隔符?或者任何其他方式将一个列表的开头锚定到另一个列表的末尾并使它们显示所有项目而不滚动?

我希望在这里得到帮助。

2 个答案:

答案 0 :(得分:1)

您不需要2个recyclerViews,您可以使用单个recylcerView实现。 你应该阅读getItemViewType&amp;在bindViewHolder&amp;中使用它createViewHolder

您可以指定这三种类型

  • 标题
  • DailyItem
  • FinishItem

像这样创建你的列表

  1. 添加每日HEADER
  2. 添加每日项目
  3. 添加未完成的HEADER
  4. 添加未完成的项目
  5. 现在,您可以在单个recyclerview中呈现两个列表

答案 1 :(得分:1)

您的问题

  

...以另一种方式将一个列表的开头锚定到另一个列表的末尾,并使它们显示所有项目而无需滚动显示?

是一种简单的解决方案,无需将代码重写为一个RecycleView-只需将android.support.v4.widget.NestedScrollView而不是ScrollView放在您的xml布局中即可。 ScrollView小部件中似乎有一个错误,该错误已在android.support.v4.widget.NestedScrollView中修复。

PS 。解决此问题后,您将面临其他问题- Android RecycleView滚动时没有动力,此问题已在"RecyclerView within NestedScrollView Scrolling Issue"中解决。仅适用于RecycleView中的简短项目列表,因为如上一篇文章

的注释中所述
  

这不是一个好的解决方案,因为禁用嵌套滚动也会禁用单元格重用,因此会立即加载所有单元格。

如果项目列表过长,这将影响应用程序的内存消耗。