Android 高级UI设计笔记09:Android如何实现无限滚动列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 高级UI设计笔记09:Android如何实现无限滚动列表相关的知识,希望对你有一定的参考价值。

  ListView和GridView已经成为原生的android应用实现中两个最流行的设计模式。目前,这些模式被大量的开发者使用,主要是因为他们是简单而直接的实现,同时他们提供了一个良好,整洁的用户体验。

对于ListView和GridView一个共同基本要求是:当用户向下滚动时可以动态加载数据支持无限滚动。下面教你如何在自己的应用中实现这个特性。

                           技术分享

具体流程如下:

(1)我们需要的一个主要组件是InfiniteScrollListener类,它实现了OnScrollListener接口。让我们直接看下面这个类的代码实现:

InfiniteScrollListener.java

 1 public abstract class InfiniteScrollListener implements AbsListView.OnScrollListener {
 2     private int bufferItemCount = 10;
 3     private int currentPage = 0;
 4     private int itemCount = 0;
 5     private boolean isLoading = true;
 6     
 7     public InfiniteScrollListener(int bufferItemCount) {
 8         this.bufferItemCount = bufferItemCount;
 9     }
10     
11     public abstract void loadMore(int page, int totalItemsCount);
12     
13     @Override
14     public void onScrollStateChanged(AbsListView view, int scrollState) {
15         // Do Nothing
16     }
17     
18     @Override
19     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){
20         if (totalItemCount < itemCount) {
21             this.itemCount = totalItemCount;
22             if (totalItemCount == 0) {
23                 this.isLoading = true; 
24             }
25         }
26         
27         if (isLoading && (totalItemCount > itemCount)) {
28             isLoading = false;
29             itemCount = totalItemCount;
30             currentPage++;
31         }
32         
33         if (!isLoading && (totalItemCount - visibleItemCount)<=(firstVisibleItem + bufferItemCount)) {
34             loadMore(currentPage + 1, totalItemCount);
35             isLoading = true;
36         }
37     }
38 }



(2)添加到事件到ListView中:

YourActivity.java

// Attach the listener to the AdapterView onCreate
yourListView.setOnScrollListener(new InfiniteScrollListener(5) {
    @Override
    public void loadMore(int page, int totalItemsCount) {
        List<HashMap<String, String>> newData = loader.loadData();
        dataList.addAll(newData);
        adapter.notifyDataSetChanged();
    }
});

如上,我们已经将这个类作为抽象类,这是一个很好的设计。我们的InfiniteScrollListener类实现了onScroll()方法,但是没有实现loadMore(),而是又给实现类来实现

onScroll()方法在我们滚动时,程序会自动调用。所以我们推荐在这个方法里,不要进行过重的处理和数据计算,因为滚动是很频繁,这个方法调用也是很频繁的。

为了实现这个效果,我们只需要在实现InfiniteScrollListener,并将这个实现类设置给ListView/GridView的setOnScrollListener()方法,就像是第二个代码片段的匿名类。

我们实现了InfiniteScrollListener类,我们也需要实现loadMore()方法,在这个方法里,我们可以给ListView/GridView添加Item,并通过notifyDataSetChanged()通知ListView/GridView数据发生改变。当然我们可以手动添加本地数据,也可以从数据库或者服务端来Load更多的数据。

这就是我们在Android中实现的在ListView/GridView的可以无限滚动的所作的。对于有大量信息,ListView/GridView无疑有着很好的出处用户体验。

 

以上是关于Android 高级UI设计笔记09:Android如何实现无限滚动列表的主要内容,如果未能解决你的问题,请参考以下文章

Android 高级UI设计笔记19:PopupWindow使用详解

Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件

Android基础——高级UI组件:选项卡

Android 高级UI解密 :Paint图形文字绘制 与 高级渲染

Android 高级UI解密 :Paint图形文字绘制 与 高级渲染

微信团队讲课笔记 Android 开发UI设计