我在recyclerView
内有一个pull to refresh layout
。
我添加了一个onScrollListener
,通过在名为delta Y (dy)
的变量中添加/减去totalScrolled
来跟踪总垂直移动。
如果recyclerview
完全滚动到顶部totalScrolled
,则应该为0,并且视图应该可见。
问题仅在于某种方式存在错误且scroll listener
无法准确告诉我列表有多少scrolled
。在向下滚动并再次通过我的多个项目列表后,totalScrolled
不会返回到0。
任何人都遇到过这个问题而且知道如何解决这个问题?
答案 0 :(得分:3)
不使用scrollListener的onScrolled回调中的dy来跟踪不准确的总垂直滚动,而是使用来自recyclerView本身的函数 - RecyclerView.computeVerticalScrollOffset() - 它可以准确地跟踪recyclerView滚动的像素数。
我的代码看起来像这样:
home_screen_recycler.addOnScrollListener(object: RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val scrollOffset = home_screen_recycler.computeVerticalScrollOffset()
presenter.onListScrolled(scrollOffset)
}
})
答案 1 :(得分:0)
在我的项目中,我使用了这个逻辑。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (arrayList.size() == 0)
return;
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
int itemPosition = mLinearLayoutManager.findLastCompletelyVisibleItemPosition();
if (itemPosition == (arrayList.size() - 1)) {
// here you can fetch new data from server.
}
}
}
});