我正在使用它,但它总是返回 0,即使我已经滚动到列表末尾。
问问题
23398 次
3 回答
34
getScrollY() 实际上是 View 上的一个方法,而不是 ListView。它指的是整个视图的滚动量,所以它几乎总是为0。
如果你想知道 ListView 的内容滚动了多远,你可以使用 listView.getFirstVisiblePosition();
于 2010-01-25T16:47:27.500 回答
4
它确实有效,它从可见视图的顶部返回视图滚动部分的顶部(以像素为单位)。请参阅getScrollY()文档。基本上,如果您的列表占据了完整视图,那么您将始终得到 0,因为列表滚动部分的顶部始终位于屏幕顶部。
你想看看你是否在列表的末尾是这样的:
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 计数器的原因是有时滚动事件可以产生多次,因此您只需要在第一次到达列表末尾时做出反应。
如果您正在尝试创建自动增长列表,我建议您使用本教程。
于 2010-01-25T15:50:19.173 回答
1
您需要两件事来精确定义 listView 的滚动位置:
获取当前位置:
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);
于 2020-03-13T13:21:28.233 回答