将onScrolling监听器绑定到Android ListView

9

我想问一下,是否有可能将某些监听器绑定到ListView滚动事件上。

我的目标是,一旦ListView滚动到底部,如果还有数据,我想向服务器请求更多的数据。

我知道有一个类似的函数:getLastVisiblePosition(),但我认为必须在某种监听器中使用它,以便与当前最后可见位置进行比较,我是对的吗?

谢谢, /Marcin

3个回答

23

仅仅是对TomTo的答案进行推广,以下是我对你如何实现这个功能的一些想法(仅限理论层面,我并没有在实践中尝试过):

ListView lv = (ListView)findViewById(R.id.list_view);
lv.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, 
        int visibleItemCount, int totalItemCount) {
        //Check if the last view is visible
        if (++firstVisibleItem + visibleItemCount > totalItemCount) {
            //load more content
        }
    }
});

由于firstVisibleItem返回的是一个索引(从0开始),我加1来获取实际项号。然后,如果该项号加上可见项数大于总项数,则理论上最后一个视图应该可见。这不应该是问题,但请记住,直到滚动结束才会调用此函数。


我一会儿看一下,然后告诉你。 - Marcin
6
好的,应该是这样:if (view.getLastVisiblePosition()+1 == NUMBER_OF_RESULTS) {},跟你的IF差不多,但还是谢谢你提供的提示。 - Marcin
1
嘿,我甚至没有考虑到getLastVisiblePosition。简单多了。 :) 很高兴你解决了它! - Kevin Coppock

1

使用:

if (++visibleItemCount > totalItemCount)

替换为:

if (++firstVisibleItem + visibleItemCount > totalItemCount)


这是一个关于IT的内容。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接