【问题标题】:How to determine the scroll direction of ListView如何判断ListView的滚动方向
【发布时间】:2012-10-26 18:03:45
【问题描述】:

我花了一整天的时间弄清楚ListView的滚动方向,但找不到任何解决方案。 我想要实现的是 ListView 的可移动标题,例如“Google Now”搜索,向下滚动时向上滚动,向上滚动时立即返回。

到目前为止我已经尝试过的:

实现的自定义 ListView 覆盖 onScrollChanged,但它始终为所有属性提供 0。

谁能让我走上正轨。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    这称为Quick Return 模式。 Roman Nurik 发表了一篇博文,解释了它的工作原理,并提供了示例代码来自己实现它。你可以在这里找到:https://plus.google.com/u/0/+RomanNurik/posts/1Sb549FvpJt

    【讨论】:

    • 您能否在 StackOverflow 上提供一个工作示例?该链接可能不会保留,而且 SO 支持 wiki 响应,允许人们随着时间的推移对其进行维护。
    【解决方案2】:

    这样的事情应该可以工作。您只需要缓存旧位置和偏移量并使用它来检查方向。您可能还想对 scrollState 进行过滤:

    listView.setOnScrollListener(new OnScrollListener() {
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            int position = listView.getFirstVisiblePosition();
            View v = listView.getChildAt(0);
            int offset = (v == null) ? 0 : v.getTop();
    
            if (mPosition < position || (mPosition == position && mOffset < offset) {
                 // Scrolled up
            } else {
                 // Scrolled down
            }
            mPosition = position;
            mOffset = offset;
        }
    });
    

    【讨论】:

    • 这不是 onScrollChanged 应该提供的东西,而不是一直为零吗?
    • 另外,滚动时不会调用 onScrollStateChanged,但会调用 onScroll。
    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多