Pagination Not Work for the Recyclerview Within Nestedscrollview

Pagination not work for the RecyclerView within NestedScrollView

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
}
}
});

Pagination with RecyclerView within NestedScrollView

to solve this challenge I perform the following Steps:

1- for XML file or EndlessRecyclerViewScrollListener NO CHANGES

2- for my activity I delete EndlessRecyclerViewScrollListener for vertical Recycler and defined my NestedScrollListener instance then set OnScrollChangeListener as below:

    boolean loading = true;
int pageNumber = 1;
NestedScrollView scroller = findViewById(R.id.nestedScroll);

if (scroller != null) {

scroller.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {

if (scrollY > oldScrollY) {
Log.i(TAG, "Scroll DOWN");
}
if (scrollY < oldScrollY) {
Log.i(TAG, "Scroll UP");
}

if (scrollY == 0) {
Log.i(TAG, "TOP SCROLL");
}

if (scrollY == ( v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight() )) {
Log.i(TAG, "BOTTOM SCROLL");
// here where the trick is going
if (loading){
pageNumber++;
showProgressView(mixedProgressBar);
// calling from adapter addToExistingList(list)
// with the defined Adapter instance
verticalAdapter.addToExistingList(getPosts(pageNumber));
// reset the boolean(loading) to prevent
// auto loading data from APi
loading = false;
}
}
});
}

3- for VerticalAdapter, I add the following method :

public void addToExistingList(List<DataModel> dataModelList){
// update oldDataModelList with newer data from pagination
oldDataModelList.retainAll(dataModelList);
notifyItemRangeChanged(oldDataModelList.size()-1 , dataModelList.size());
}

4- for getPosts(pageNumber) on fetching data success re-assign the boolean(loading)

getPosts(pageNumber) is a method to invoke data from API

JsonArrayRequest arrayRequest = new JsonArrayRequest(Request.Method.GET,baseAPI,
response1 -> {
try {
// doing stuff to invoke your data
// re-assign loading variable to load again
loading = true;

} catch (JSONException e) {
e.printStackTrace();
}


Related Topics



Leave a reply



Submit