【问题标题】:Android Dynamically load Listview at scroll end?Android在滚动结束时动态加载Listview?
【发布时间】:2011-02-21 11:23:05
【问题描述】:

我正在从 Http 服务器加载一个列表视图,一次 20 个,在列表视图结束时,我想从服务器加载接下来的 20 个数据,这个过程将一直持续到数据在服务器中结束,我使用扩展 BaseAdapter 的类来填充前 20 个数据。我该怎么办??

【问题讨论】:

    标签: android


    【解决方案1】:

    这看起来也是一个优雅的解决方案:http://benjii.me/2010/08/endless-scrolling-listview-in-android/

    它还实现了AbsListView.OnScrollListener,并在当前滚动视图中剩余项目达到一定阈值时使用 AsyncTask 加载更多内容。

    【讨论】:

    • 很好的解决方案!但我决定将(firstVisibleItem + visibleThreshold) 更改为(firstVisibleItem + visibleItemCount)
    • 链接似乎不再起作用。 (截至 2016 年 4 月 11 日)
    【解决方案2】:

    好的,我已经看到这是一个常见问题,所以我制作了一个 SMALL LIBRARY 自定义加载更多并在 github 中拉刷新 ListView,请检查此在 here,一切都在存储库中得到了很好的解释。

    【讨论】:

      【解决方案3】:

      您可以实现AbsListView.OnScrollListener,它会获得通知并允许您加载更多数据。

      参见例如

      ....
      ListView.setOnScrollListener(this);
      ....
      

      然后看看https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L287

      或查看 sdk 示例中的 List9 example

      【讨论】:

        【解决方案4】:

        Heiko Rupp 的代码是解决这个问题的最佳选择。 您唯一应该做的就是实现onScrollListeneronScroll() 只需使用代码检查是否有列表结尾

        boolean loadMore =  firstVisibleItem + visibleItemCount >= totalItemCount-1;
        

        如果 true 以常规方式加载您的数据..

        感谢 Heiko Rupp 为这个 sn-p :)

        【讨论】:

          【解决方案5】:

          这是我用来在列表视图末尾加载更多数据的方法

                  listview.setOnScrollListener(new OnScrollListener(){
          
                  @Override
                  public void onScroll(AbsListView view,
                  int firstVisibleItem, int visibleItemCount,
                  int totalItemCount) {
                  //Algorithm to check if the last item is visible or not
                  final int lastItem = firstVisibleItem + visibleItemCount;
                  if(lastItem == totalItemCount){                 
                  // you have reached end of list, load more data             
                  }
                 } 
                  @Override
                  public void onScrollStateChanged(AbsListView view,int scrollState) {
                  //blank, not using this
                  }
                  });
          

          【讨论】:

            【解决方案6】:

            当我不小心尝试从非 UI 线程更新视图时,我遇到了这个问题。将 ui 更新代码推送到 ui 线程解决了我的问题!

            Handler mainHandler = new Handler(Looper.getMainLooper());
            mainHandler.post(new Runnable() {
                @Override
                public void run() {
                        // insert ui update code here
                    }
                }
            });
            

            【讨论】:

              猜你喜欢
              • 2015-12-05
              • 1970-01-01
              • 2014-10-17
              • 1970-01-01
              • 1970-01-01
              • 2011-10-03
              • 1970-01-01
              • 1970-01-01
              • 2021-01-30
              相关资源
              最近更新 更多