如何实现recyclerview
内的NestedScrollView
的分页?
请遵循以下步骤:
1.设置嵌套滚动,启用回收器视图的false。
recyclerView.setNestedScrollingEnabled(false);
2.将滚动侦听器添加到nestedscrollview。
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
。
每次获得物品时都应更换qazxsw poi字段,并检查此页面是否为最后一页。
我正在使用kotlin。
isLastPage
当然,你需要将字段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