如何知道用户是否滚动到列表视图/滚动视图的顶部或底部

use*_*676 7 android

我试图知道用户何时滚动到列表视图的顶部或底部,他不能再滚动.

现在我正在使用OnScrollListener来了解哪些listview项可见.

    listview.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
            }
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            if (totalItemCount - visibleItemCount == firstVisibleItem) {
                //last item visible
            }

            if (firstVisibleItem == 0) {
                //first item visible
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

use*_*676 13

我已经通过了第一或最后一个项目的检查偏移找到了解决办法,这些项目的当偏移为0,那么我们已经达到了底部/顶listview.

    listview.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (firstVisibleItem == 0) {
                // check if we reached the top or bottom of the list
                View v = listview.getChildAt(0);
                int offset = (v == null) ? 0 : v.getTop();
                if (offset == 0) {
                    // reached the top:
                    return;
                } 
            } else if (totalItemCount - visibleItemCount == firstVisibleItem){
                View v =  listview.getChildAt(totalItemCount-1);
                int offset = (v == null) ? 0 : v.getTop();
                if (offset == 0) {
                    // reached the bottom:
                    return;
                }
            }               
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 在第二个块中写:"//到达底部:". (3认同)