Android - listview未滚动触发onScroll

说明:

listview未滚动触发onScroll

解决:

利用OnScrollListener中的onScrollStateChanged方法中的scrollState

public void onScrollStateChanged(AbsListView view, int scrollState);

该方法有两个入参,第二个参数scrollState有三种状态:

public static int SCROLL_STATE_IDLE = 0;            //结束滚动
    public static int SCROLL_STATE_TOUCH_SCROLL = 1;    //触摸滚动
    public static int SCROLL_STATE_FLING = 2;           //手指离开屏幕后的滚动状态

此时我们可将焦点定位到 SCROLL_STATE_IDLE,将滚动到底部的判断和处理放在结束滚动之后。

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
        case SCROLL_STATE_IDLE:
            boolean toBottom = view.getLastVisiblePosition() == view.getCount() - 1;
            if (toBottom && !isLoading && !isFinish) {
                //...
            }
            break;
    }

这样就能操控onScroll的触发了。

总结:

  • onScroll 只有在scrollState等于1和2的时候调用。

其中1是手指没有离开屏幕的滑动,2是手指离开了屏幕的滑动,这两种状态的滑动onScroll一直被调用

  • 0有两种情况:

1、手指不离开滑动中停止,然后离开屏幕会出现0
2、滑动过程中手指离开但是屏幕继续滑动自然停止后是0

  • 再scrollState为0的时候不会调用onScroll

以上都自己打印log,手指操作一下就能理解了


你可能感兴趣的:(【,Android,基础开发,】,Android,listview)