27

我正在使用它,但它总是返回 0,即使我已经滚动到列表末尾。

4

3 回答 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 回答