如何在2.6内部嵌套的RecyclerView中实现分页

时间:2016-12-20 15:03:53

标签: android pagination android-recyclerview nestedscrollview android-nestedscrollview

我在RecyclerView内加了NestedScrollView并设置了

mRecyclerView.setNestedScrollingEnabled(false);

由于RecyclerView的滚动设置为 false ,因此我无法获得RecyclerView的滚动位置,因此我无法在RecyclerView中添加分页{1}}。

我也试过这个

   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;
                    }

                }
            }
        }
    });

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

这里滚动是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();
                }
            });