标签:
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如何实现无限滚动列表
标签:
原文地址:http://www.cnblogs.com/hebao0514/p/5223554.html