如何实施recyclerview
内NestedScrollView
的分页?
答案 0 :(得分:33)
请按照以下步骤操作:
<强> 1。将嵌套滚动设置为启用回收器视图的错误。
recyclerView.setNestedScrollingEnabled(false);
<强> 2。将滚动列表器添加到嵌套的scrollview。
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
}
}
});
答案 1 :(得分:0)
我可以在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
答案 2 :(得分:0)
我遇到了同样的问题,并且基于 Android 文档:
<块引用>永远不要将 RecyclerView 或 ListView 添加到滚动视图。这样做 导致用户界面性能不佳和用户体验不佳。
我使用波纹管代码解决了我的问题:
value={this.state.value}