【问题标题】:How i can load new elements when my ListView is scrolled to bottom?当我的 ListView 滚动到底部时,我如何加载新元素?
【发布时间】:2014-03-03 10:29:41
【问题描述】:

你可以在这里找到我的代码: How to correctly build table with data using onPostExecute and ListView

当我的 ListView 滚动到底部时,我需要从服务器加载数据。我试图在 Stackoverflow 上寻找解决方案,但对我没有帮助。

如果不难的话,我想知道它是如何工作的。

谢谢大家

【问题讨论】:

标签: java android


【解决方案1】:

您有 2 个解决方案:

1) 使用 OnScrollListener

你必须有一个扩展ListView并实现OnScrollListener的类。

初始化视图时,将其设置为滚动监听器: setOnScrollListener(this);

实现方法onScroll。当您使用参数 firstVisibleItemvisibleItemCounttotalItemCount 滚动时调用它。

firstVisibleItem+visibleItemCount==totalItemCount 到达列表底部时,您可以再次调用您的AsyncTask 以加载下一个项目。

2) 使用自定义适配器

在您必须覆盖的方法getView 中,您可以访问正在呈现的项目的位置,即即将在屏幕上可见。

假设您将项目存储在List items 中,您知道何时到达列表底部时position == items.size()-1。然后你可以调用你的 AsyncTask

警告

小心使用这 2 个解决方案,如果列表中的所有项目都适合屏幕,您的 AsyncTask 可能会被无缘无故地频繁调用。在开始之前,您必须对此进行必要的检查。

【讨论】:

  • 谢谢!我选择第一个解决方案。
  • @Philippe A 反向滚动怎么样?
  • @AjayTakur 你的意思是当用户向上滚动时?
  • 没关系。在解决方案 #1 中,totalItemCount 是恒定的,visibleItemCount 也很可能是恒定的,firstVisibleItem 会随着您向上滚动而减少。在解决方案 #2 中,位置会随着您向上滚动而减少,并且不会等于列表的大小。
【解决方案2】:

在你的程序中使用滚动状态改变监听器...我希望它肯定会帮助你...。

 listStudies.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (Logic Condition) {
                //Here also You can do your Logic here and then you can achieve your wishes.....
            }

        }
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
             if (Logic Condition) {
                //You just do your Logic here and then you can achieve your wishes.....
            }

        }
    });

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2011-08-17
    • 2019-05-31
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2011-08-13
    相关资源
    最近更新 更多