2010-12-13 10 views
9

solo quería preguntar si existe la posibilidad de vincular a algún oyente con el evento de desplazamiento ListView.Enlazar onScrolling listener al android ListView

Lo que me gustaría lograr es que una vez ListView haya sido desplazado hacia abajo, me gustaría pedirle al servidor más información, si existe alguna.

Sé que hay una función como: getLastVisiblePosition(), pero supongo que debe utilizarse en algún tipo de oyente para comparar con la última posición visible actual, ¿verdad?

aplausos, /Marcin

Respuesta

23

Sólo para extrapolar sobre la respuesta de TomTo, algunas ideas sobre cómo se puede hacer esto (teórico, no he probado esto en la práctica):

ListView lv = (ListView)findViewById(R.id.list_view); 
lv.setOnScrollListener(new OnScrollListener() { 
    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 
     //Check if the last view is visible 
     if (++firstVisibleItem + visibleItemCount > totalItemCount) { 
      //load more content 
     } 
    } 
}); 

Desde firstVisibleItem se devuelve un índice (basado en 0) , Incremente en uno para obtener el número de artículo real. Entonces, si eso, más el número de elementos visibles, es mayor que el número total de elementos, entonces, en teoría, la última vista debería ser visible. No debería ser un problema, pero tenga en cuenta que esto no se llama hasta que el desplazamiento finalice.

+0

voy a echar un vistazo en un minuto y le hará saber – Marcin

+6

bien por lo que debe ser algo como: if (view.getLastVisiblePosition () +1 == NUMBER_OF_RESULTS) {} en su lugar su IF, pero buena pista de todos modos, gracias – Marcin

+1

Heh, ni siquiera pensó en getLastVisiblePosition. Mucho más simple :) ¡Me alegra que lo hayas hecho funcionar! – kcoppock

1

utilizado

if (++visibleItemCount > totalItemCount)

lugar

if (++firstVisibleItem + visibleItemCount > totalItemCount)