27 Stimmen

Android: ListView.getScrollY() - funktioniert das?

Ich verwende es, aber es gibt immer 0 zurück, auch wenn ich bis zum Ende der Liste gescrollt habe.

34voto

Cheryl Simon Punkte 45901

GetScrollY() ist eigentlich eine Methode von View, nicht von ListView. Sie bezieht sich auf den Scrollbetrag der gesamten Ansicht, so dass er fast immer 0 sein wird.

Wenn Sie wissen wollen, wie weit der Inhalt der ListView gescrollt ist, können Sie listView.getFirstVisiblePosition() verwenden;

4voto

Dinedal Punkte 2556

Es funktioniert, es gibt den oberen Teil des gescrollten Teils der Ansicht zurück in Pixel vom oberen Rand der sichtbaren Ansicht. Siehe die [getScrollY()](http://developer.android.com/reference/android/view/View.html#getScrollY()) Dokumentation. Wenn Ihre Liste die gesamte Ansicht einnimmt, erhalten Sie immer den Wert 0, da sich der obere Rand des gescrollten Teils der Liste immer am oberen Rand des Bildschirms befindet.

Um festzustellen, ob Sie sich am Ende einer Liste befinden, müssen Sie etwa so vorgehen:

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

Der Grund für den priorFirst-Zähler ist, dass Scroll-Ereignisse manchmal mehrfach erzeugt werden können, so dass Sie nur auf das erste Erreichen des Endes der Liste reagieren müssen.

Wenn Sie versuchen, eine automatisch wachsende Liste zu erstellen, würde ich Folgendes vorschlagen tutorial .

1voto

Rahul Ogale Punkte 21

Sie benötigen zwei Dinge, um die Bildlaufposition einer listView genau zu definieren:

Um die aktuelle Position zu ermitteln:

int firstVisiblePosition = listView.getFirstVisiblePosition(); 
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.

Zum Einstellen der Position:

listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo.. 
listView.scrollTo(0,-topEdge);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X