RecyclerView 未在底部调用 onScrolled

Mat*_*kov 6 java android android-recyclerview

我正在尝试创建一个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();
        }
    });
Run Code Online (Sandbox Code Playgroud)

编辑:我试图检测是否到达末尾onScrolled并且它有点工作,但有时当我尝试从服务器获取数据时我没有收到任何内容,所以在这样的请求之后我仍然处于末尾列表,我想向下滚动以尝试再次更新列表,但我不能,因为onScrolled没有被调用。

关于如何解决这个问题有什么想法吗?我可以使用另一个回调吗?

Par*_* P. 3

我想要在结束时显示进度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...
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

有时,当我尝试从服务器获取数据时,我没有收到任何内容

简单的!如果您的网络请求失败,请尝试捕获异常。如果是SocketTimeOutException则重试再次执行相同的请求。如果还有其他异常(可能来自后端或前端),请修复它。