2010-01-25 10 views
26

Lo estoy usando, pero siempre devuelve 0, aunque me he desplazado hasta el final de la lista.Android: ListView.getScrollY() - ¿funciona?

+1

Si lo que busca es el número de píxeles que desaparece en la parte superior de la lista cuando el usuario se desplaza hacia abajo, eche un vistazo a [mi respuesta aquí] (http://stackoverflow.com/questions/10808387/android- getting-exact-scroll-position-in-listview/13415273 # 13415273) – Maria

+0

La [solución] correcta (http://stackoverflow.com/questions/12727594/android-listview-current-scroll-location-y-pixels/35594825 # 35594825) – Sarasranglt

Respuesta

31

getScrollY() es en realidad un método en Ver, no en ListView. Se refiere a la cantidad de desplazamiento de la vista completa, por lo que casi siempre será 0.

Si desea saber qué tan lejos se desplazan los contenidos de ListView, puede usar listView.getFirstVisiblePosition();

+0

gracias hombre :) que realmente explica mucho :) – cV2

+8

Tenga en cuenta que getFirstVisiblePosition devolverá el * elemento * no la * posición *, por lo tanto, no es algo que pueda usar como alternativa a getScrollY excepto en el caso de que todos los artículos de la lista son precisamente de la misma altura. –

+0

¿Es la posición getScroolY de scroolview en la parte superior de la ventana gráfica o al final? –

4

Funciona, devuelve la parte superior de la parte desplazada de la vista en píxeles desde la parte superior de la vista visible. Consulte la documentación de getScrollY(). Básicamente, si su lista ocupa la vista completa, siempre obtendrá 0, porque la parte superior de la lista desplazada siempre está en la parte superior de la pantalla.

Lo que se quiere hacer para ver si está al final de una lista es algo como esto:

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 
        } 
       } 
      } 
    }); 
} 

La razón para el contador priorFirst es que a veces se desplazan los eventos se pueden generar varias veces, por lo solo necesita reaccionar a la primera vez que se llega al final de la lista.

Si está intentando hacer una lista de crecimiento automático, sugeriría esto tutorial.