M000
M000

Reputation: 15

recycleview inside nestedscrollview

Hi I have complex layout includes views on top and recycle view at bottom recycle view data can go up to 5000 rows when using nested scroll view it will freez for long time when use normal scroll view its working but only recycle view will be scrolling but i want all views to scroll

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>
        <import type="android.view.View"/>
        <variable
            name="item"
            type="xxx.models.Category" />
        <variable
            name="query"
            type="String" />

    </data>

    <ScrollView
        android:id="@+id/sc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="UselessParent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="@dimen/_5sdp"
            android:orientation="vertical"
            tools:context=".ui.home.HomeFragment">
            <LinearLayout
                android:visibility="@{query.isEmpty() ? View.GONE : View.VISIBLE,default= gone}"
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:gravity="center_vertical"
                android:layout_marginBottom="@dimen/_5sdp"
                android:layout_marginHorizontal="@dimen/_5sdp"
                android:background="@color/darkgrey"
                android:layout_height="wrap_content">
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                tools:text="Abaya"
                android:text= "@{String.format(@string/query, query)}"
                android:layout_margin="@dimen/_5sdp"
                android:maxLines="1"
                android:ellipsize="end"
                android:gravity="center"
                android:textColor="@color/white"
                android:padding="@dimen/_5sdp"
                style="@style/titleText" />
            <ImageView
                android:id="@+id/clear"
                android:layout_width="@dimen/_24sdp"
                android:layout_height="@dimen/_24sdp"
                android:layout_marginHorizontal="@dimen/_5sdp"
                android:foreground="?attr/selectableItemBackground"
                android:src="@drawable/ic_close"
                app:tint="@color/white" />
            </LinearLayout>

            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginHorizontal="@dimen/_5sdp"
                app:cardCornerRadius="@dimen/_5sdp">

                <ae.eds.fatima.helper.SliderView
                    android:id="@+id/slider"
                    android:overScrollMode="never"
                    android:layout_width="match_parent"
                    app:cardElevation="@dimen/_5sdp"
                    android:layout_height="@dimen/_120sdp" />
            </androidx.cardview.widget.CardView>


            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/categories"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:overScrollMode="never"
                android:layout_gravity="start"
                android:layout_marginTop="@dimen/_5sdp"
                tools:itemCount="8"
                app:spanCount="4"
                android:orientation="vertical"
                app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                tools:listitem="@layout/home_subcategory_entry" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="@dimen/_5sdp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:textSize="@dimen/header4"
                    android:textColor="@color/black"
                    android:text="Recomended" />

                <TextView
                    android:id="@+id/filter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:textSize="@dimen/header4"
                    android:drawableStart="@drawable/ic_filter"
                    android:textColor="@color/black"
                    android:text="Filter" />
            </LinearLayout>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/products"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:nestedScrollingEnabled="true"
                android:overScrollMode="never"
                android:orientation="vertical"
                tools:itemCount="10"
                app:spanCount="2"
                app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                tools:listitem="@layout/product_entry" />


        </LinearLayout>
    </ScrollView>
</layout>

I tried nestedscroll false and using fragment type but looking forother soultion like how to measure and update scrollview height after update adapter

Upvotes: 0

Views: 39

Answers (1)

m7s
m7s

Reputation: 156

try to use collapsing layout instead of nested scroll view

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>
        <import type="android.view.View"/>
        <variable
            name="item"
            type="xxx.models.Category" />
        <variable
            name="query"
            type="String" />

    </data>

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appbar"
        android:background="@color/layoutBg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <com.google.android.material.appbar.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="@dimen/_5sdp"
            android:orientation="vertical"
            tools:context=".ui.home.HomeFragment">
        <LinearLayout
            android:visibility="@{query.isEmpty() ? View.GONE : View.VISIBLE,default= gone}"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:gravity="center_vertical"
            android:layout_marginBottom="@dimen/_5sdp"
            android:layout_marginHorizontal="@dimen/_5sdp"
            android:background="@color/darkgrey"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                tools:text="Abaya"
                android:text= "@{String.format(@string/query, query)}"
                android:layout_margin="@dimen/_5sdp"
                android:maxLines="1"
                android:ellipsize="end"
                android:gravity="center"
                android:textColor="@color/white"
                android:padding="@dimen/_5sdp"
                style="@style/titleText" />
            <ImageView
                android:id="@+id/clear"
                android:layout_width="@dimen/_24sdp"
                android:layout_height="@dimen/_24sdp"
                android:layout_marginHorizontal="@dimen/_5sdp"
                android:foreground="?attr/selectableItemBackground"
                android:src="@drawable/ic_close"
                app:tint="@color/white" />
        </LinearLayout>

        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="@dimen/_5sdp"
            app:cardCornerRadius="@dimen/_5sdp">

            <ae.eds.fatima.helper.SliderView
                android:id="@+id/slider"
                android:overScrollMode="never"
                android:layout_width="match_parent"
                app:cardElevation="@dimen/_5sdp"
                android:visibility="gone"
                android:layout_height="@dimen/_120sdp" />
        </androidx.cardview.widget.CardView>


        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/categories"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:overScrollMode="never"
            android:layout_gravity="start"
            android:layout_marginTop="@dimen/_5sdp"
            tools:itemCount="8"
            app:spanCount="4"
            android:orientation="vertical"
            app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
            tools:listitem="@layout/home_subcategory_entry" />

        </LinearLayout>

    </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/_35sdp"
                android:gravity="center_vertical"
                android:paddingHorizontal="@dimen/_10sdp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="match_parent"
                    android:textSize="@dimen/header4"
                    android:gravity="center_vertical"
                    android:textColor="@color/black"
                    android:text="@string/recommended" />

                <TextView
                    android:id="@+id/filter"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="end"
                    android:gravity="center_vertical"
                    android:textSize="@dimen/header4"
                    android:textColor="@color/black"
                    android:text="@string/filter_sort"
                    app:drawableStartCompat="@drawable/ic_filter" />
            </LinearLayout>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/products"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:overScrollMode="never"
                android:orientation="vertical"
                tools:itemCount="10"
                app:spanCount="2"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
                tools:listitem="@layout/product_entry" />
        </LinearLayout>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

</layout>

Upvotes: 1

Related Questions