recyclerview
内にあるNestedScrollView
のページネーションを実装する方法は?
次の手順に従ってください:
1。リサイクラビューのネストされたスクロールを有効にするfalseを設定します。
recyclerView.setNestedScrollingEnabled(false);
2。スクロールリスナをネストされたスクロールビューに追加します。
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
}
}
});
Kotlinを使用している場合、コードは次のようになります
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
}
}
そして最後ではないが少なくとも RecyclerViewのスクロールをfalseに設定
ViewCompat.setNestedScrollingEnabled(recyclerView, false)
OnScrollChangeListener
にnestedScrollView
を設定したソリューションを取得できました。
フィールドisLoading
は、たとえばレトロフィットを使用している場合など、アイテムをロードするたびに変更する必要があります。実行を開始する前にtrue
として設定し、false
またはresponse
を取得したときにfailure
として設定できます。
フィールドisLastPage
は、アイテムを取得するたびに変更し、このページが最後のページであるかどうかを確認する必要があります。
私は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
}
}
}
そしてもちろん、フィールドisNestedScrollingEnabled
をfalse
として設定する必要があります
myRecyclerView.isNestedScrollingEnabled = false