我尝试使用分页创建RecyclerView
,当我尝试向下滚动已经位于列表的最后时,我遇到显示进度条的问题。回调RecyclerView.OnScrollListener
有一个方法onScrolled
用于处理滚动事件,但在没有实际滚动时它无法正常工作。
当我尝试从底部向下滚动时,onScrollStateChanged
方法有效,但我的逻辑要求我知道手势的方向(向上/向下),所以此方法无效我的情况。
我目前试图这样做(这显然不起作用):
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
fetchDataFromServer();
}
});
编辑:我试图检测onScrolled
是否达到了结果并且它有点工作,但有时当我尝试从服务器获取数据时我没有收到任何内容,所以在这样的情况之后请求我仍然在列表的末尾,我想向下滚动以尝试再次更新列表,但我不能,因为onScrolled
没有被调用。
关于如何解决这个问题的任何想法?我可以使用另一个回调吗?
答案 0 :(得分:2)
我想在recyclerview
结尾处显示进度,您只需要确保已达到目的。
这是怎么回事 -
private int visibleThreshold = 1; // trigger just one item before the end
private int lastVisibleItem, totalItemCount;
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = mLayoutManager.getItemCount();
lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
if (totalItemCount <= (lastVisibleItem + visibleThreshold) {
// ... end has been reached...
//... do your stuff over here...
}
}
});
}
修改强>
有时当我尝试从服务器获取数据时,我没有收到 任何
简单!如果您的网络请求失败,请尝试捕获异常。如果是SocketTimeOutException
,重试再次执行相同的请求。如果还有另一个例外(可能来自后端或前端),请将其修复。
答案 1 :(得分:1)
如果您为min sdk level 23开发,则可以使用setOnScrollChangeListener
recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
}
});
答案 2 :(得分:0)
检查您的回收站视图是否嵌套在NestedScrollView或其他内容中... 删除嵌套的滚动视图,它将起作用。 您只需使用回收站视图并使用VIEW_TYPE概念的回收站视图即可实现任何形式的提要