分页不适用于NestedScrollView中的RecyclerView

问题描述 投票:16回答:3

如何实现recyclerview内的NestedScrollView的分页?

android pagination android-recyclerview android-nestedscrollview
3个回答
34
投票

请遵循以下步骤:

1.设置嵌套滚动,启用回收器视图的false。

recyclerView.setNestedScrollingEnabled(false);

2.将滚动侦听器添加到nestedscrollview。

 mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
           @Override
           public void onScrollChanged()
           {
                    View view = (View)mScrollView.getChildAt(mScrollView.getChildCount() - 1);

                    int diff = (view.getBottom() - (mScrollView.getHeight() + mScrollView
                                    .getScrollY()));

                    if (diff == 0) {
                       // your pagination code
                    }
           }
  });

2
投票

如果您使用的是Kotlin,您的代码将会是这样的

 scroll?.viewTreeObserver?.addOnScrollChangedListener {
        val view = scroll.getChildAt(scroll.childCount - 1)
        Timber.d("Count==============${scroll.childCount}")

        val diff = view.bottom - (scroll.height + scroll.scrollY)
        Timber.d("diff==============$diff")

        if (diff == 0) {
            //your api call to fetch data
        }
    }

并且最后但并非最不重要的设置RecyclerView滚动false

 ViewCompat.setNestedScrollingEnabled(recyclerView, false)

0
投票

我可以在OnScrollChangeListener中获得解决方案设置nestedScrollView

每次加载项目时都应更改字段isLoading,例如,如果您正在使用改造。您可以在它开始运行之前将其设置为true,并在获得falseresponse时将其设置为failure

每次获得物品时都应更换qazxsw poi字段,并检查此页面是否为最后一页。

我正在使用kotlin。

isLastPage

当然,你需要将字段private var isLoading = false private var isLastPage = false nestedScrollView.setOnScrollChangeListener { v: NestedScrollView?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int -> val nestedScrollView = checkNotNull(v){ return@setOnScrollChangeListener } val lastChild = nestedScrollView.getChildAt(nestedScrollView.childCount - 1) if (lastChild != null) { if ((scrollY >= (lastChild.measuredHeight - nestedScrollView.measuredHeight)) && scrollY > oldScrollY && !isLoading && !isLastPage) { //get more items } } } 设置为isNestedScrollingEnabled

false
© www.soinside.com 2019 - 2024. All rights reserved.