我正在尝试创建一个RecyclerView
使用分页,当我尝试向下滚动已经在列表的最后时,我在显示进度条时遇到问题。有回调RecyclerView.OnScrollListener
其中有一个方法onScrolled
用于处理滚动事件,但当没有实际滚动发生时它不起作用。
There's onScrollStateChanged
当我尝试从底部向下滚动时,该方法有效,但我的逻辑要求我知道手势的方向(向上/向下),因此此方法对我的情况没有帮助。
我目前正在尝试这样做(这显然不起作用):
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
fetchDataFromServer();
}
});
编辑:我试图检测是否已达到终点onScrolled
它有点工作,但有时当我尝试从服务器获取数据时我没有收到任何内容,所以在这样的请求之后我仍然在列表的末尾,我想向下滚动以尝试更新再次列出,但我不能再列出onScrolled
没有接到电话。
关于如何解决这个问题有什么想法吗?我可以使用另一个回调吗?
我想在最后显示进展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...
}
}
});
}
EDIT:
有时当我尝试从服务器获取数据时我没有收到
任何事物
简单的!如果您的网络请求失败,请尝试捕获异常。如果是SocketTimeOutException
, 再次尝试执行相同的请求。如果还有其他异常(可能来自后端或前端),请修复它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)