2010-12-13 5 views
9

wollte nur fragen, gibt es eine Möglichkeit, einige Listener an die ListView scroll-Ereignis zu binden.Bindung onScrolling Listener zum android ListView

Was ich erreichen möchte, ist, dass, wenn ListView nach unten gescrollt wurde ich Server für mehr Daten fragen möchte, wenn überhaupt vorhanden ist.

Ich weiß, dass es eine Funktion wie folgt gibt: getLastVisiblePosition() aber ich nehme an, dass es in irgendeiner Art von Listener verwendet werden muss, um mit der letzten sichtbaren Position zu vergleichen, bin ich richtig?

prost, /Marcin

Antwort

23

einfach auf TomTo Antwort auf extrapolieren, einige Gedanken darüber, wie Sie dies tun könnte (theoretisch, ich habe dies in der Praxis nicht versucht):

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

Da firstVisibleItem wird liefert einen Index (0-basiert) Ziehe ich um eins hoch, um die tatsächliche Artikelnummer zu erhalten. Wenn dann plus die Anzahl der sichtbaren Elemente größer als die Gesamtzahl der Elemente ist, sollte theoretisch die letzte Ansicht sichtbar sein. Sollte kein Problem sein, aber bedenken Sie, dass dies nicht aufgerufen wird, bis das Scrollen beendet ist.

+0

Ich werde einen Blick in einer Minute haben und lassen Sie – Marcin

+6

ok wissen, so dass es so etwas wie sein sollte: if (view.getLastVisiblePosition () +1 == NUMBER_OF_RESULTS) {} statt IF, aber trotzdem ein guter Hinweis, danke – Marcin

+1

Heh, dachte nicht einmal über getLastVisiblePosition nach. Viel einfacher. :) Froh, dass es funktioniert hat! – kcoppock

1

verwendet

if (++visibleItemCount > totalItemCount)

statt

if (++firstVisibleItem + visibleItemCount > totalItemCount)