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
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