Android在滚动端动态加载Listview?

aug*_*ine 63 android

我正在从Http服务器加载一个listview,一次20个,在Listview的末尾我想从服务器加载下一个20个数据,这个过程将继续,直到数据在服务器结束,我使用扩展BaseAdapter的类填充前20个数据.我该怎么办?

小智 42

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

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

  • 好方案!但我决定将`(firstVisibleItem + visibleThreshold)`改为`(firstVisibleItem + visibleItemCount)`. (4认同)

sho*_*uro 19

好吧,我已经看到这是一个常见的问题,所以我已经创建了一个带有自定义加载的SMALL LIBRARY并在github中刷新ListView ,请在此处查看,所有内容都在存储库中进行了解释.


Hei*_*upp 10

您可以实现一个AbsListView.OnScrollListener获取信息并允许您加载更多数据的信息.

见例如

....
ListView.setOnScrollListener(this);
....
Run Code Online (Sandbox Code Playgroud)

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

或者看一下sdk示例中的List9示例.


Mah*_*esh 8

Heiko Rupp的代码是解决这个问题的最佳选择.你应该做的唯一事情是实现, onScrollListeneronScroll() 通过使用代码检查是否有一个列表的结尾

boolean loadMore =  firstVisibleItem + visibleItemCount >= totalItemCount-1;
Run Code Online (Sandbox Code Playgroud)

if true使用常规方式加载数据..

感谢Heiko Rupp为这个片段:)


Aks*_*wal 8

这就是我用来在listview末尾加载更多数据的方法

        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
        }
        });
Run Code Online (Sandbox Code Playgroud)