2010-12-13 9 views
9

volevo solo chiedere c'è la possibilità di associare qualche listener all'evento di scroll ListView.Binding onScrolling listener per Android ListView

Quello che mi piacerebbe ottenere è che una volta che ListView è stato fatto scorrere verso il basso vorrei chiedere al server più dati se ce ne sono.

So che esiste una funzione come: getLastVisiblePosition() ma presumo che debba essere usata in qualche tipo di listener per poter comparare con l'ultima posizione visibile attualmente, giusto?

applausi, /Marcin

risposta

23

Proprio per estrapolare sulla risposta tomto, alcune riflessioni su come si potrebbe fare questo (teorico, non ho provato questo in pratica):

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

Dal firstVisibleItem si restituisce un indice (0-based) , Incremento di uno per ottenere il numero dell'articolo reale. Quindi, se questo, più il numero di elementi visibili, è maggiore del numero totale di elementi, in teoria dovrebbe essere visibile l'ultima vista. Non dovrebbe essere un problema, ma tieni presente che questo non viene chiamato fino a quando lo scorrimento non è finito.

+0

avrò uno sguardo in un minuto e ti faccio sapere – Marcin

+6

ok e quindi dovrebbe essere qualcosa di simile: if (view.getLastVisiblePosition () +1 == NUMBER_OF_RESULTS) {} invece il tuo IF, ma buon suggerimento comunque, grazie – Marcin

+1

Heh, non ha nemmeno pensato a getLastVisiblePosition. Molto più semplice :) Sono contento che tu abbia funzionato! – kcoppock

1

usato

if (++visibleItemCount > totalItemCount)

invece

if (++firstVisibleItem + visibleItemCount > totalItemCount)