我想在显示最后一行时在列表视图中加载数据。我正在为列表视图编写滚动事件。
现在如何检测列表视图显示最后一行?
有人可以帮我吗?
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) {
// if so, download more content
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
});
在列表视图中试试这个..它对我来说很好..
((ScrollView) findViewById(R.id.scrollDowns)).fullScroll(View.FOCUS_DOWN);
slezadav 的上述实现可能会在边缘条件下导致错误。页面中第一个可见项目和项目的总和可能比预期多或少 1 个计数。在我改用新方法之前,我一直在使用相同的东西。我所做的是在listview的适配器上放置一个侦听器,并在getview中检查是否(位置==要显示的数组中项目的totalItemCount),如果是,我从适配器调用我的侦听器,侦听器将从api中提取更多数据. 非常简单
您可以使用Amazing ListView来自动加载下一页(即最后一项上的“正在加载...”)。
根据文档实现这些方法:
onNextPageRequested
当用户滚动列表直到“加载”指示器可见时调用。这是在 UI 线程上调用的,因此如果您有一些网络请求,请确保在后台执行此操作。还给出了页码。默认情况下,您将被视为在最后一页,并且您不会在列表底部看到任何“正在加载...”消息。您需要控制是否还有页面要显示。
notifyMayHaveMorePages
表示我们还有更多数据,因此将显示“正在加载...”消息。notifyNoMorePages
表示我们已经加载了所有数据,因此不再显示“正在加载...”消息。nextPage
增加页码。在将新数据附加到适配器时执行此操作。resetPage
将页码重置为 1(或由 指定的值setInitialPage
)。
所以你需要做的是在onNextPageRequested
被调用时获取更多数据。并nextPage
在您将新数据附加到适配器时调用。