如何在nestedScrollView内的RecyclerView中实现分页

Abh*_*wal 3 pagination android android-recyclerview nestedscrollview android-nestedscrollview

我已经包含RecyclerView在里面NestedScrollView并设置

mRecyclerView.setNestedScrollingEnabled(false);

由于滚动RecyclerView设置为false,因此我将无法获得 的滚动位置,RecyclerView因此我将无法将分页放入RecyclerView.

我也试过这个

   mRecylerview.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) {

            if(dy > 0) {
                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
                if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    // End has been reached
                    // Do something
                    if (mOnLoadMoreListener != null) {
                        mOnLoadMoreListener.onLoadMore();
                        isLoading = true;
                    }

                }
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

但是这里lastVisibleItem总是给出要显示的列表的长度。

经过几次挖掘,我发现当我们使用RecylerViewinside 时,NestedScrollView所有视图都是在最开始创建的,这就是lastVisibleItem总是给出列表大小的原因 。

或者,如果我错了,请解释一下,我RecyclerView内部NestedScrollView是如何工作的?。

是否有任何解决方法,以便我可以获得RecyclerView滚动位置,以便我可以使我的分页工作?。

这将是一个很大的帮助。提前致谢

小智 6

这里滚动是 NestedScrollView

scroll.getViewTreeObserver().addOnScrollChangedListener(() -> {
                View view = (View) scroll.getChildAt(scroll.getChildCount() - 1);

                Log.d("CategoryNeswList", scroll.getChildCount() + " child");
                int diff = (view.getBottom() - (scroll.getHeight() + scroll
                        .getScrollY()));

                if (diff == 0) {
//                        getPlaylistFromServer("more");
                    Toast.makeText(mContext, "Load More", Toast.LENGTH_SHORT).show();
                }
            });
Run Code Online (Sandbox Code Playgroud)