不使用OnScrollListener在滚动时加载新的ListView项

时间:2012-01-24 19:53:44

标签: android listview dynamic

我见过一些使用OnScrollListener的ListView动态增长实现。

我想知道,还有更优雅的解决方案吗?如果适配器说有更多可用项目,ListView本身是否会从适配器请求更多数据?

毕竟,ListView在滚动时按需创建其视图,那么我为什么要创建自己的滚动侦听器呢?从理论上讲,我应该能够在滚动ListView时响应发布到底层适配器的ListView请求。 当ListView告诉其适配器它需要更多数据用于下一个视图时,我可以向服务器发出新的数据请求(批量),当加载完成时,我可以通知ListView新数据可用。

有没有人尝试过这样的方法?有没有可用的源代码?

我需要实现某种无穷无尽的列表,但它实际上只有有限数量的JSON记录(大约500个),并且每条记录都有一个唯一的Id,所以我可以将它们缓存在一个简单的Map中。我只是想用最优雅,最直接的方法(最好与Android 1.6兼容)来实现它,避免使用各种hacky解决方案。

2 个答案:

答案 0 :(得分:4)

  

毕竟,ListView在滚动时按需创建其视图,   那我为什么要创建自己的滚动监听器?

没有列表视图不会创建视图。它是创建视图的适配器。

您可以通过跟踪Listview请求的位置来尝试在getview函数中请求更多数据。但优雅的解决方案将保留在onscrolllistener上。

答案 1 :(得分:1)

正如manjusg所说,你可以在你的getView方法中使用这个技巧:

...
if (position > lastViewed && position == getCount()-1) {
    lastViewed = position;
    runYourTask();
}
...