当用户在RecyclerView + PagerSnapHelper上轻扫时,ScrollListener代码无法按预期工作

时间:2018-07-31 22:19:24

标签: android android-recyclerview

每当用户向左或向右滑动时,我都试图更改AppBar中的日期(向左滑动一天;向右滑动一天)。目前,我有一个带有以下代码的ScrollListener:

int scrollDirection = 0;               //-1 is left ; 1 is right

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);

            if (dx > 0) {
                scrollDirection = 1;
            }

            if (dx < 0) {
                scrollDirection = -1;
            }
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == RecyclerView.SCROLL_STATE_SETTLING) {
                if (scrollDirection == 1) {
                    cal.add(Calendar.DATE, 1);
                }

                if (scrollDirection == -1) {
                    cal.add(Calendar.DATE, -1);
                }

                setCurrentDate(cal.getTime());
            }

        }

现在,在正常情况下,此方法可以正常工作,但如果用户用手指轻击(向下一个视图滑动一半,然后释放,导致PagerSnapHelper捕捉回到原始视图),则日期会更改,而视图保持不变。

PagerSnapHelper可以按预期工作,问题出在将滚动状态注册为稳定状态的代码,而视图未更改,因此日期也在更改。我正在寻找一种方法来检测呈现的视图实际上是新视图还是上一个视图。

1 个答案:

答案 0 :(得分:0)

我尝试了所有推荐的方法,但是功能仍然经常出现问题。例如,如果我在android认为recyclerView为IDLE前浏览了两页,那么日期将无法正确更新。

在研究解决类似问题的方式时,我决定根据所移动的屏幕长度更改日期,因为recyclerView中的一个视图正好是一个屏幕宽度。以下是我的解决方案

return ()