android - 检测 ListView 何时到达底部 - onScroll() 或 onScrollStateChanged()?

标签 android android-listview android-scroll

这似乎是一个已经有很多答案的问题;但是,我找不到通用的方法。 当到达底部时,我正在尝试将数据添加到 ListView;使用 AsyncTask 从 Internet 检索数据。 ListView 已经附加了一个适配器。

因此,在寻找实现这一目标的好方法时,我想到了两种不同的方法。

  1. 第一个,onScrollStateChanged() 方法,基本上与this 相关。页。但是,它使用的参数在实际API中并没有对应关系。同时,this链接使用正确的 API,但我不知道是否以正确的方式。我尝试了两个链接中的第一个,但有点无聊。调试应用程序时,diff 值变化很大,我不知道如何正确插入表达式。另外,我不知道如何修复可以开始检索数据的偏移量;我的意思是,我不想在即将到达底部时执行代码,而是在到达底部之前执行代码。此外,有时即使我们滚动到顶部也会调用它。
  2. 第二个是onScroll() 方法,用在this 中。回答或以不同的方式,在this代码。我尝试调整这两个代码中的最后一个,但这会导致很多问题,即使我们没有到达列表底部,数据也会加载。

那么,什么方法最好呢?什么时候以及为什么我应该更喜欢其中之一? 在我的情况下,我应该使用这两者中的哪一个?

最佳答案

这是我建议的第三种方法的一些代码,我在自己的项目中使用了这些方法。我使用适配器的 getView 方法来检测何时到达列表末尾。

public View getView(int position, View convertView, ViewGroup parent) {
    // handle recycling/creating/initializing view
    if(reachedEndOfList(position)) loadMoreData();
    return convertView;
}

private boolean reachedEndOfList(int position) {
    // can check if close or exactly at the end
    return position == getSize() - 1;
}

private void loadMoreData() {
    // Perhaps set flag to indicate you're loading and check flag before proceeding with AsyncTask or whatever
}

关于android - 检测 ListView 何时到达底部 - onScroll() 或 onScrollStateChanged()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177387/

相关文章:

android - 使用 CollapsingToolbarLayout 滚动后不会调用 OnClick 事件。

java - 从中心项开始我的 RecyclerView 水平旋转木马

java - Firebase 引用对象无法解析为类型

android - 在 Android 原生 ndk 中记录变量的值

android - 如何使用自定义适配器动态更新 ListView?

android - 使用 scrollTo ListView 时不刷新,手动滚动时刷新

android - 带有 viewpager 的协调器布局,滚动不起作用

android - 更新用户的个人资料图片

Android水平进度条

android - 创建 Intent 的最佳实践