Comment implémenter la pagination de recyclerview
au sein de NestedScrollView
?
Suivez ces étapes:
1. Définissez le défilement imbriqué activé sur false pour la vue Recycler.
recyclerView.setNestedScrollingEnabled(false);
2. Ajoutez le listner de défilement à la vue de défilement imbriquée.
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 vous utilisez Kotlin votre code ressemblera à
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
}
}
et le dernier mais non le moindre set RecyclerView scrolling false
ViewCompat.setNestedScrollingEnabled(recyclerView, false)
Je pouvais obtenir le paramètre de solution OnScrollChangeListener
dans nestedScrollView
.
Le champ isLoading
doit être modifié chaque fois que vous chargez les éléments, par exemple si vous utilisez la modification. Vous pouvez le définir en tant que true
avant de démarrer et false
lorsque vous obtenez le response
ou le failure
.
Le champ isLastPage
doit être modifié à chaque fois que vous obtenez des éléments et vérifiez si cette page était la dernière.
J'utilise 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
}
}
}
Et bien sûr, vous devez définir le champ isNestedScrollingEnabled
sur false
myRecyclerView.isNestedScrollingEnabled = false