recyclerview onScrollListener无法正常工作

时间:2017-12-13 10:48:28

标签: android android-recyclerview onscrolllistener

我在recyclerView内有一个pull to refresh layout。 我添加了一个onScrollListener,通过在名为delta Y (dy)的变量中添加/减去totalScrolled来跟踪总垂直移动。 如果recyclerview完全滚动到顶部totalScrolled,则应该为0,并且视图应该可见。

问题仅在于某种方式存在错误且scroll listener无法准确告诉我列表有多少scrolled。在向下滚动并再次通过我的多个项目列表后,totalScrolled不会返回到0。

任何人都遇到过这个问题而且知道如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

不使用scrollListener的onScrolled回调中的dy来跟踪不准确的总垂直滚动,而是使用来自recyclerView本身的函数 - RecyclerView.computeVerticalScrollOffset() - 它可以准确地跟踪recyclerView滚动的像素数。

我的代码看起来像这样:

    home_screen_recycler.addOnScrollListener(object: RecyclerView.OnScrollListener() {

        override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)

            val scrollOffset = home_screen_recycler.computeVerticalScrollOffset()

            presenter.onListScrolled(scrollOffset)
        }
    })

答案 1 :(得分:0)

在我的项目中,我使用了这个逻辑。

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (arrayList.size() == 0)
                return;
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                int itemPosition = mLinearLayoutManager.findLastCompletelyVisibleItemPosition();
                if (itemPosition == (arrayList.size() - 1)) {
                    // here you can fetch new data from server.
                }
            }
        }
    });