I have an EndlessRecyclerView
at the end of a NestedScrollView
. EndlessRecyclerView
means: when user scrolls to the bottom of the recyclerView it loads more data. This is already implemented and working elsewhere but when I put the recyclerView inside the NestedScrollView
the OnScrollListener
events doesn't fire.
XML design:
<NestedScrollView>
<Other views/>
<EndlessRecyclerView/>
</NestedScrollView >
Code:
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// This is never fired! Here is where I implement the logic of EndlessRecyclerView
}
});
How do I get scroll event for above case?
I know that is not good to have two scrollable views inside each other. But, how do I have the above case without having two scrollable views?
I already followed this link but it doesn't work: scroll event for recyclerview inside scrollview android
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