android pagination android-recyclerview android-nestedscrollview

android - La paginación no funciona para RecyclerView dentro de NestedScrollView



pagination android-recyclerview (3)

¿Cómo implementar la paginación de la vista de recyclerview dentro de NestedScrollView ?


Podría obtener la configuración de la solución OnScrollChangeListener en nestedScrollView .

El campo isLoading debe cambiarse cada vez que carga los elementos, por ejemplo, si está utilizando la actualización. Puede configurarlo como true antes de que comience a ejecutarse y como false cuando obtenga la response o el failure .

El campo isLastPage debe cambiarse cada vez que obtiene elementos y verifique si esta página fue la última.

Estoy usando 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 } } }

Y, por supuesto, debe establecer el campo isNestedScrollingEnabled como false

myRecyclerView.isNestedScrollingEnabled = false


Sigue estos pasos:

1. Establecer desplazamiento anidado habilitado falso de la vista de reciclador.

recyclerView.setNestedScrollingEnabled(false);

2. Agregue una lista de desplazamiento a la vista de desplazamiento anidada.

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


si está utilizando Kotlin, su código se verá así

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

y por último, pero no menos importante , el desplazamiento RecyclerView false

ViewCompat.setNestedScrollingEnabled(recyclerView, false)