Search code examples
androidandroid-recyclerviewandroid-coordinatorlayoutandroid-collapsingtoolbarlayout

Scroll stuttering while using coordinator layout with recyclerview


I'm having a problem with Coordinatorlayout and ViewPager implementation.

In order to reproduce this you have to scroll down vigorously and while it's still happening try to scroll the list of items up - a sort of shaky stutter effect can be visible as if CoordinatorLayout was trying to scroll the view in separate direction than its child (RecyclerView).

You can view my layout here:

<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/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

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

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsingToolbarLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

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

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

    <android.support.design.widget.TabLayout
        android:id="@+id/tabControl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorHeight="4dp"
        app:tabMaxWidth="500dp">

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

    <LinearLayout
        android:id="@+id/topLayout"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:orientation="vertical"
        android:visibility="gone" />
</android.support.design.widget.AppBarLayout>


<android.support.v4.view.ViewPager
    android:id="@+id/tabContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

Just to provide some further details:

headerContainer contains ConstraintLayout with some stuff like bunch of textviews, button - pretty usual.

tabContainer contains LinearLayout with list of items (recyclerview)


Solution

  • Add this to the recyclerView in the fragment of your ViewPager..

    recyclerView.setNestedScrollingEnabled(false);

    This is happening because of the app:layout_behavior="@string/appbar_scrolling_view_behavior" behavior of the viewpager.. this is causing the nestedScrolling.. that is why you feel the shaky effect..