【问题标题】:Android: ListView.getScrollY() - does it work?Android:ListView.getScrollY() - 它有效吗?
【发布时间】:2010-01-25 12:59:12
【问题描述】:

我正在使用它,但它总是返回 0,即使我已经滚动到列表末尾。

【问题讨论】:

  • 如果您要查找的是当用户向下滚动时在列表顶部消失的像素数,请查看my answer here
  • 正确的solution

标签: android scroll-offset


【解决方案1】:

getScrollY() 实际上是 View 上的一个方法,而不是 ListView。指的是整个view的滚动量,所以几乎都是0。

如果想知道ListView的内容滚动了多远,可以使用listView.getFirstVisiblePosition();

【讨论】:

  • 请注意,getFirstVisiblePosition 将返回 item 而不是 position,因此它不能用作 getScrollY 的替代品,除非在这种情况下所有列表项的高度完全相同。
  • scroolview的getScroolY位置是在视口顶部还是在最后?
【解决方案2】:

它确实有效,它返回视图滚动部分的顶部从可见视图顶部以像素为单位。请参阅getScrollY() 文档。基本上,如果您的列表占据了完整视图,那么您将始终得到 0,因为列表的滚动部分的顶部始终位于屏幕顶部。

你想看看你是否在列表的末尾是这样的:

public void onCreate(final Bundle bundle) {
     super.onCreate(bundle);
     setContentView(R.layout.main);
     // The list defined as field elswhere
     this.view = (ListView) findViewById(R.id.searchResults);
     this.view.setOnScrollListener(new OnScrollListener() {
          private int priorFirst = -1;
          @Override
          public void onScroll(final AbsListView view, final int first, final int visible, final int total) {
               // detect if last item is visible
               if (visible < total && (first + visible == total)) {
                    // see if we have more results
                    if (first != priorFirst) {
                         priorFirst = first;
                         //Do stuff here, last item is displayed, end of list reached
                    }
               }
          }
     });
}

priorFirst 计数器的原因是有时滚动事件可以产生多次,所以你只需要在第一次到达列表末尾时做出反应。

如果您想创建一个自动增长的列表,我建议您使用tutorial

【讨论】:

    【解决方案3】:

    你需要两件事来精确定义 listView 的滚动位置:

    获取当前位置:

    int firstVisiblePosition = listView.getFirstVisiblePosition(); 
    int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
    

    设置位置:

    listView.setSelectionFromTop(firstVisiblePosition,0);
    // Note the '-' sign for scrollTo.. 
    listView.scrollTo(0,-topEdge);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-23
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多