How to implement pagination of recyclerview
that is within NestedScrollView
?
if you are using Kotlin your code will be looks like
scroll?.viewTreeObserver?.addOnScrollChangedListener {
val view = scroll.getChildAt(scroll.childCount - 1)
Timber.d("Count==============${scroll.childCount}")
val diff = view.bottom - (scroll.height + scroll.scrollY)
Timber.d("diff==============$diff")
if (diff == 0) {
//your api call to fetch data
}
}
and last but the not the least set RecyclerView scrolling false
ViewCompat.setNestedScrollingEnabled(recyclerView, false)
I could get the solution setting OnScrollChangeListener
in the nestedScrollView
.
The field isLoading
should be changed everytime you load the items, for example if you are using retrofit. You could set it as true
before It start running and as false
when you get the response
or the failure
.
The field isLastPage
should be changed everytime you get items and check if this page was the last one.
I'm using kotlin.
private var isLoading = false
private var isLastPage = false
nestedScrollView.setOnScrollChangeListener { v: NestedScrollView?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int ->
val nestedScrollView = checkNotNull(v){
return@setOnScrollChangeListener
}
val lastChild = nestedScrollView.getChildAt(nestedScrollView.childCount - 1)
if (lastChild != null) {
if ((scrollY >= (lastChild.measuredHeight - nestedScrollView.measuredHeight)) && scrollY > oldScrollY && !isLoading && !isLastPage) {
//get more items
}
}
}
And of course you need to set the field isNestedScrollingEnabled
as false
myRecyclerView.isNestedScrollingEnabled = false
Follow this steps :
1. Set nested scrolling enabled false of recycler view.
recyclerView.setNestedScrollingEnabled(false);
2. Add scroll listner to nested scrollview.
mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged()
{
View view = (View)mScrollView.getChildAt(mScrollView.getChildCount() - 1);
int diff = (view.getBottom() - (mScrollView.getHeight() + mScrollView
.getScrollY()));
if (diff == 0) {
// your pagination code
}
}
});