【发布时间】:2010-01-25 12:59:12
【问题描述】:
我正在使用它,但它总是返回 0,即使我已经滚动到列表末尾。
【问题讨论】:
-
如果您要查找的是当用户向下滚动时在列表顶部消失的像素数,请查看my answer here
-
正确的solution
标签: android scroll-offset
我正在使用它,但它总是返回 0,即使我已经滚动到列表末尾。
【问题讨论】:
标签: android scroll-offset
getScrollY() 实际上是 View 上的一个方法,而不是 ListView。指的是整个view的滚动量,所以几乎都是0。
如果想知道ListView的内容滚动了多远,可以使用listView.getFirstVisiblePosition();
【讨论】:
它确实有效,它返回视图滚动部分的顶部从可见视图顶部以像素为单位。请参阅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 计数器的原因是有时滚动事件可以产生多次,所以你只需要在第一次到达列表末尾时做出反应。
如果您想创建一个自动增长的列表,我建议您使用tutorial。
【讨论】:
你需要两件事来精确定义 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);
【讨论】: