2014-05-22 7 views
6

Ich versuche zu wissen, wann der Benutzer zum Listenanfang oder -ende geblättert hat und nicht mehr blättern kann.Wie kann ich feststellen, ob der Benutzer zum Anfang oder Ende einer Listenansicht/Bildlaufansicht geblättert hat?

Jetzt verwende ich OnScrollListener, um zu wissen, welche Listview-Elemente sichtbar sind.

listview.setOnScrollListener(new OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
      } 
     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

      if (totalItemCount - visibleItemCount == firstVisibleItem) { 
       //last item visible 
      } 

      if (firstVisibleItem == 0) { 
       //first item visible 
      } 
     } 
    }); 
+0

Okay, so haben, warum Ihre Lösung nicht funktioniert? Was funktioniert nicht? –

+0

weil es mir nicht sagt, was ich wissen muss, wenn der Benutzer zum oberen oder unteren Ende der Liste gescrollt hat und er nicht weiter scrollen kann. – user1940676

Antwort

10

Ich habe eine Lösung gefunden, indem ich den Versatz des ersten oder letzten Eintrags überprüfe, wenn der Versatz dieser Einträge 0 ist, dann haben wir den unteren/oberen Rand deserreicht.

listview.setOnScrollListener(new OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      if (firstVisibleItem == 0) { 
       // check if we reached the top or bottom of the list 
       View v = listview.getChildAt(0); 
       int offset = (v == null) ? 0 : v.getTop(); 
       if (offset == 0) { 
        // reached the top: 
        return; 
       } 
      } else if (totalItemCount - visibleItemCount == firstVisibleItem){ 
       View v = listview.getChildAt(totalItemCount-1); 
       int offset = (v == null) ? 0 : v.getTop(); 
       if (offset == 0) { 
        // reached the bottom: 
        return; 
       } 
      }    
     } 
    }); 
+0

Dieses Codesegment kann nicht erkennen, ob ListView den unteren Rand erreicht. Bitte bearbeiten Sie es erneut. – SilentKnight

+3

Im zweiten Block schreiben: "// erreichte den Boden:". – CoolMind

2

Versuchen Sie, diese Art und Weise

list.setOnScrollListener(new OnScrollListener() { 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 

      } 

     int mPosition=0; 
     int mOffset=0; 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      // TODO Auto-generated method stub 
      int position = list.getFirstVisiblePosition(); 
       View v = list.getChildAt(0); 
       int offset = (v == null) ? 0 : v.getTop(); 

       if (mPosition < position || (mPosition == position && mOffset < offset)){ 
        // Scrolled up 

       } else { 
        // Scrolled down 

       } 
     } 
    }); 
+0

danke, ich habe vergessen, die Offsets, aber eine kleine Sache in der sonst Wie weiß ich, wenn ich am Ende der Liste? – user1940676

+0

@ user1940676 gehen Sie zu diesem [http://stackoverflow.com/questions/5123675/find-out-if-listview-is-scrolled-to-the-bottom](http://stackoverflow.com/questions/5123675/ find-out-if-listview-is-scrolled-to-the-bottom) –

0

Adapter getView Methodenaufruf, wenn Scroll-Listenansicht

Kontrolle der Position, wenn Ihre Position zu Datengröße Listenansicht gleich ist, so dass Sie

auf letzte Element der Liste sind
+0

nicht genau, die getview wird aufgerufen, wenn die Ansicht sichtbar wird und nicht, wenn sie den oberen/unteren Rand der Liste erreicht. – user1940676

0
@Override 
public void onScrollChanged() 
{ 

// We take the last son in the scrollview 
View view = (View) scrollview.getChildAt(scrollview.getChildCount() - 1); 
int diff = (view.getBottom() - (scrollview.getHeight() + scrollview.getScrollY())); 
if (diff == 0) 
{ 
// bottom of the scrollview 
} 
} 
Verwandte Themen