NestedScrollView setOnScrollChangeListener api 21

NestedScrollView setOnScrollChangeListener api 21

大家好,我正在尝试处理 recyclerView 中的 onScrolled 事件,它位于 NestedScrollView.

到目前为止,我已经找到了 setOnScrollChangeListener,但是这个方法是 API 23,我的目标是 API 21,有什么办法可以在 API21?

您可以使用下面的 ViewTreeObserver#addOnScrollChangedListener() 来实现 api 23:

mRecylerview.getViewTreeObserver().addOnScrollChangedListener(
    new ViewTreeObserver.OnScrollChangedListener() {
      @Override public void onScrollChanged() {
          int x = toolbar.getScrollX();
          int y = toolbar.getScrollY();
      }
    });

一段时间后我有了一个想法,我已经停止收听 RecyclerView 上的滚动并开始收听 NestedScrollView onScroll 事件。

我使用此代码段

成功实现了 loadOnDemand recyclerView
    nsv_posts_timeline.setOnScrollChangeListener(
            NestedScrollView.OnScrollChangeListener {
                                _, scrollX, scrollY, _, oldScrollY ->

        if(scrollY > oldScrollY){
            val totalItens = timelineAdapter.itemCount

            val currentView = rv_timeline.findChildViewUnder(scrollX.toFloat(), scrollY.toFloat())
            val childPosition = rv_timeline.getChildAdapterPosition(currentView)

            if((totalItens/2) - (stepSize/2) <= childPosition && !isLoading){
                isLoading = true
                                          //skip , take
                timelinePresenter.loadMore(totalItens, 5)
            }
        }
    })

isLoading 是一个 class 属性,当我从服务器

回调 returns 时,我将其更改为 false

我认为您在 View.OnScrollChangeListener 中使用 setOnChangeScrollListener。 请像这样使用 NestedScrollView.OnScrollChangeListener:

 scvProduct.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView nestedScrollView,int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            Log.e("ProductFragment","position button " + topPositionButton + " scrollY " + scrollY);
            if(scrollY > oldScrollY){
                Log.e("ProductFragment","down");
            }
            else{
                Log.e("ProductFragment","up");
            }
        }
    });

感谢 Kotlin 中的@NhatVM:

scrollView.setOnScrollChangeListener(
    NestedScrollView.OnScrollChangeListener { nestedScrollView, scrollX, scrollY, oldScrollX, oldScrollY ->
        // ...
    }
)