Android中如何實現無限滾動列表

jopen 10年前發布 | 36K 次閱讀 Android Android開發 移動開發

列表和網格是安卓原生應用程序中使用最廣泛的兩個設計組件。開發者之所以大量使用它們,因為它們雖然實現起來簡單明了,但提供了簡潔、優良的用戶體驗。

使用列表和網格的一個基本要求是,當用戶向下滾動時可以動態加載數據支持無限滾動。這篇博客將教你如何在自己的應用中實現這個特性。

非死book_stream

我們需要的一個主要組件是InfiniteScrollListener類,它實現了OnScrollListener接口。讓我們直接看下面這個類的代碼實現:

InfiniteScrollListener.java

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;
        }
    }
}

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的setOnScrollListener()設置。我們可以用一個匿名類實現,就像上面第二段代碼展示的那樣。

在實現InfiniteScrollListener時,需要實現LoadMore方法。在此方法中我們可以生成想添加到列表中的新條目,然后使用我們適配器的notifyDataSetChanged方法添加上去。你可能要自己生成數據,也可以從數據庫或者服務端加載。

這就是安卓中實現無限滾動列表所需要做的全部做工。列表是一種向用戶批量展示信息同時又帶來不錯體驗的方法。如果你的應用中已經有ListView或者你打算實現一個,下載我們的Native Ads SDK,它允許在你自己的列表中完全自定義廣告。不過10分鐘,在不影響用戶體驗的情況下,應用就可以為你賺更多的錢了。可以從這里檢出代碼。

原文鏈接: avocarrot   翻譯: 伯樂在線 - 黃瓜
譯文鏈接: http://blog.jobbole.com/73595/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!