2010-01-25 73 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

相關問題