Ich verwende es, aber es gibt immer 0 zurück, auch wenn ich bis zum Ende der Liste gescrollt habe.
Antworten
Zu viele Anzeigen?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 .
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);