Recyclerview 快速滑动实现上拉加载,加载方法不及时执行

前一阵将support库版27.0.0发现了这个问题。发现RecyclerView在滑动到底部后,会有急秒的停滞,之后再去加载下一页数据。

滑动越快,停滞时间越长。我们知道上拉加载实现方案基本都是监听滑动状态,当滑动停止时,再去加载下一页。代码基本如下:

@Override

public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

    super.onScrollStateChanged(recyclerView, newState);

    if (newState == RecyclerView.SCROLL_STATE_IDLE) {

        onLoadNextPage();

    }

}

具体解决方案如下:

https://juejin.im/entry/5b978fe8f265da0b001f16c0

方案一,重写AppBarLayout.Behavior

代码如下

public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {

    public FixAppBarLayoutBehavior() {

        super();

    }

    public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    @Override

    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,

            View target, int dx, int dy, int[] consumed, int type) {

        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);

        stopNestedScrollIfNeeded(dy, child, target, type);

    }

    @Override

    public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target,

                              int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {

        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);

        stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);

    }

    private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {

        if (type == ViewCompat.TYPE_NON_TOUCH) {

            final int currOffset = getTopAndBottomOffset();

            if ((dy < 0 && currOffset == 0) || (dy > 0 && currOffset == -child.getTotalScrollRange())) {

                ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);

            }

        }

    }

}

修改引用

            ...

            app:layout_behavior="yourPackage.FixAppBarLayoutBehavior">

方案二:直接修改support版本,升级到28

你可能感兴趣的:(Recyclerview 快速滑动实现上拉加载,加载方法不及时执行)