skipperhi
skipperhi

Reputation: 41

RecyclerView inside of NestedScrollView only showing 1 element at a time

I have a RecyclerView inside of a NestedScrollView, my problem is that the RecyclerView is very short, only large enough to show 1 element at a time. The dataset is small (3-5 elements) so my goal is to show all elements at once.

I've tried disabling nested scrolling, changing the layout_height to wrap_content/match_parent, etc. but to no avail.

Code:

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 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="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:paddingBottom="52dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp">

        <!-- A bunch of other layouts -->

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/documents_rv"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dp"
            android:paddingBottom="8dp"
            android:visibility="gone"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="@id/title"
            app:layout_constraintTop_toBottomOf="@id/doc1"
            tools:visibility="visible"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.core.widget.NestedScrollView>

Update, item xml (I know it could be replaced with just 1 TextView, but for now it will stay as is):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="4dp"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/doc_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_doc"
        tools:ignore="ContentDescription" />

    <TextView
        android:id="@+id/doc_name"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="4dp"
        android:gravity="center_vertical" />

</LinearLayout>

Upvotes: 2

Views: 1000

Answers (2)

Sparkzz
Sparkzz

Reputation: 417

I was able to solve this issue by replacing NestedScrollView with ScrollView.

Upvotes: 2

skipperhi
skipperhi

Reputation: 41

Not an ideal solution since it uses nested layouts, but I was able to display all items by wrapping my RecyclerView in a RelativeLayout:

<RelativeLayout
    android:id="@+id/list_container"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="4dp"
    android:paddingBottom="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="@id/title"
    app:layout_constraintTop_toBottomOf="@id/title">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/documents_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

Upvotes: 2

Related Questions