2010-01-25 66 views
26

我正在使用它,但它始终返回0,即使我已滚动到列表的末尾。Android:ListView.getScrollY() - 它工作吗?

+1

如果你正在寻找的是在用户滚动时在列表顶部消失的像素数目看看[我的答案在这里](http://stackoverflow.com/questions/10808387/android-正确的滚动位置在列表视图/ 13415273#13415273) – Maria 2012-12-04 16:54:56

+0

正确的[解决方案](http://stackoverflow.com/questions/12727594/android-listview-current-scroll-location-y-pixels/35594825 #35594825) – Sarasranglt 2016-02-24 06:35:05

回答

31

getScrollY()实际上是一个View上的方法,而不是ListView。它指的是整个视图的滚动量,因此它几乎总是为0.

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

+0

谢谢:)这真的解释了很多:) – cV2 2014-01-20 11:08:54

+8

请注意,getFirstVisiblePosition将返回* item *而不是* position *,因此它不是可以用作getScrollY的替代方法,除非在所有情况下列表项目的高度正好相同。 – 2014-03-25 14:38:05

+0

scroolview在视口顶部还是在尾部? – 2016-04-13 19:30:01

4

它确实有效,它返回视图的滚动部分顶部以可见视图顶部的像素为单位。请参阅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

相关问题