天天看點

Android開發之ListView利用OnScrollListener實作分頁加載資料

上篇博文和大家分享了下拉重新整理,這是一個使用者體驗非常好的操作方式。新浪微薄就是使用這種方式的典型。

還有個問題,當使用者從網絡上讀取微薄的時候,如果一下子全部加載使用者未讀的微薄這将耗費比較長的時間,造成不好的使用者體驗,同時一屏的内容也不足以顯示如此多的内容。這時候,我們就需要用到另一個功能,那就是listview的分頁了。通過分頁分次加載資料,使用者看多少就去加載多少。

通常這也分為兩種方式,一種是設定一個按鈕,使用者點選即加載。另一種是當使用者滑動到底部時自動加載。今天我就和大家分享一下這個功能的實作。

首先,寫一個xml檔案,moredata.xml,該檔案即定義了放在listview底部的視圖:

Android開發之ListView利用OnScrollListener實作分頁加載資料
Android開發之ListView利用OnScrollListener實作分頁加載資料

可以看到是一個按鈕和一個進度條。因為隻做一個示範,這裡簡單處理,通過設定控件的visibility,未加載時顯示按鈕,加載時就顯示進度條。

寫一個item.xml,大家應該很熟悉了。用來定義listview的每個item的視圖。

Android開發之ListView利用OnScrollListener實作分頁加載資料
Android開發之ListView利用OnScrollListener實作分頁加載資料

main.xml就不貼了,整個主界面就一個listview。

直接先看下activity的代碼,在裡面實作分頁效果。

Android開發之ListView利用OnScrollListener實作分頁加載資料
Android開發之ListView利用OnScrollListener實作分頁加載資料

通過注釋,大家應該很容易了解了。這裡做下簡單的解析。首先要注意的是,addfootview方法一定要在setadapter方法之前,否則會無效。addfootview方法為listview底部加入一個視圖,在本例中就是那個button加progressbar的視圖。當使用者點選按鈕時,調用loadmoredate方法,為listview綁定更多的資料,通過adapter的notifydatasetchanged方法通知listview重新整理,顯示剛加入的資料。

這裡用handler異步延遲2秒操作,模仿加載過程。同時listview綁定了onscrolllistener監聽器,并且實作了onscroll和onscrollstatechanged方法。在後者方法中,我們通過判斷listview已經停止滾動并且最後可視的條目等于adapter的條目,可以知道使用者已經滑動到底部并且自動加載,代碼中将這部分代碼注釋掉了,大家可以自己試下。

代碼中還加入了一個maxdatenum變量,用來記錄最大的資料數量。也就是說網絡或者其他地方一共的資料。通過onscroll方法判斷使用者加載完這些資料後,移除listview底部視圖,不讓繼續加載。同時在loadmoredate方法中也對最大資料量做相應的操作來判斷加載數量。(預設加載5條,不足5條時加載剩餘的)。

看下效果圖:

Android開發之ListView利用OnScrollListener實作分頁加載資料
Android開發之ListView利用OnScrollListener實作分頁加載資料
Android開發之ListView利用OnScrollListener實作分頁加載資料
Android開發之ListView利用OnScrollListener實作分頁加載資料

就寫這麼多了,總的來說還是很簡單的,但是确實非常有用的一個效果。歡迎留言交流。

繼續閱讀