RecyclerView没有在底部调用onScrolled

时间:2017-09-12 17:31:33

标签: 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();
        }
    });

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

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

3 个答案:

答案 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概念的回收站视图即可实现任何形式的提要