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)