我在使用它,但是它总是返回0,即使我已经滚动到列表的末尾。
我在使用它,但是它总是返回0,即使我已经滚动到列表的末尾。
getScrollY()实际上是View的一个方法,而不是ListView的方法。它指的是整个视图滚动的距离,因此它几乎始终为0。
如果您想知道ListView内容滚动了多远,可以使用listView.getFirstVisiblePosition()方法。
要查看是否到达列表末尾,您需要执行以下操作:
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
}
}
}
});
}
priorFirst计数器的原因是有时会生成多次滚动事件,因此您只需要对第一次到达列表末尾做出反应。
如果您正在尝试创建自动增长列表,我建议使用这个教程。
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
设置位置:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);