RecyclerView ScrollListener inside NestedScrollView RecyclerView ScrollListener inside NestedScrollView android android

RecyclerView ScrollListener inside NestedScrollView


To achieve endless scrolling for recycler view which is under NestedScrollView, you can use "NestedScrollView.OnScrollChangeListener"

nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {            if(v.getChildAt(v.getChildCount() - 1) != null) {                if ((scrollY >= (v.getChildAt(v.getChildCount() - 1).getMeasuredHeight() - v.getMeasuredHeight())) &&                        scrollY > oldScrollY) {                        //code to fetch more data for endless scrolling                }            }        });

Here v.getChildCount() -1 should give you the recycler view for which you be implementing endless scrolling.

Also scrollY > oldScrollY confirms that the page is being scrolled down.

Reference: NestedScrollView.OnScrollChangeListener


nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener(){    @Override    public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)    {       if (v.getChildAt(v.getChildCount() - 1) != null)       {          if (scrollY > oldScrollY)          {             if (scrollY >= (v.getChildAt(v.getChildCount() - 1).getMeasuredHeight() - v.getMeasuredHeight()))             {                //code to fetch more data for endless scrolling             }          }       }    } });


I had a similar issue, although it was a little different. In my case I had a recycleview within a fragment while the NestedScrollView was in the content_main xml (part of the activity).

I wrapped my recycleview that was within the fragment with SwipeRefreshLayout

This is the code of my fragment:

    <?xml version="1.0" encoding="utf-8"?><androidx.swiperefreshlayout.widget.SwipeRefreshLayout    android:id="@+id/swipe_dummy"    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <androidx.recyclerview.widget.RecyclerView        android:id="@+id/top_series_recycle_view"        android:layout_width="match_parent"        android:layout_height="match_parent" /></androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

The only thing is left to do is to disable the SwipeRefreshLayout from the code

mSwipeLayout.isEnabled = false

If you won't do that, when you swipe down it will show endless refresh icon. I wanted to share this solution in case someone will need this functionality or have this issue as well

After you will wrap the recycleview with a SwipeRefreshLayout, you will see addOnScrollListener of the recycleview will be called as usual