列表和網格是安卓原生應用程式中使用最廣泛的兩個設計元件。開發者之所以大量使用它們,因為它們雖然實現起來簡單明瞭,但提供了簡潔、優良的使用者體驗。
使用列表和網格的一個基本要求是,當使用者向下滾動時可以動態載入資料支援無限滾動。這篇部落格將教你如何在自己的應用中實現這個特性。
我們需要的一個主要元件是InfiniteScrollListener類,它實現了OnScrollListener介面。讓我們直接看下面這個類的程式碼實現:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public abstract class InfiniteScrollListener implements AbsListView.OnScrollListener { private int bufferItemCount = 10; private int currentPage = 0; private int itemCount = 0; private boolean isLoading = true; public InfiniteScrollListener(int bufferItemCount) { this.bufferItemCount = bufferItemCount; } public abstract void loadMore(int page, int totalItemsCount); @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // Do Nothing } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (totalItemCount < itemCount) { this.itemCount = totalItemCount; if (totalItemCount == 0) { this.isLoading = true; } } if (isLoading && (totalItemCount > itemCount)) { isLoading = false; itemCount = totalItemCount; currentPage++; } if (!isLoading && (totalItemCount - visibleItemCount)<=(firstVisibleItem + bufferItemCount)) { loadMore(currentPage + 1, totalItemCount); isLoading = true; } } } |
1 2 3 4 5 6 7 8 9 |
// 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的setOnScrollListener()設定。我們可以用一個匿名類實現,就像上面第二段程式碼展示的那樣。
在實現InfiniteScrollListener時,需要實現LoadMore方法。在此方法中我們可以生成想新增到列表中的新條目,然後使用我們介面卡的notifyDataSetChanged方法新增上去。你可能要自己生成資料,也可以從資料庫或者服務端載入。
這就是安卓中實現無限滾動列表所需要做的全部做工。列表是一種向使用者批量展示資訊同時又帶來不錯體驗的方法。如果你的應用中已經有ListView或者你打算實現一個,下載我們的Native Ads SDK,它允許在你自己的列表中完全自定義廣告。不過10分鐘,在不影響使用者體驗的情況下,應用就可以為你賺更多的錢了。可以從這裡檢出程式碼。