(一)采呐、目的:
Android 應(yīng)用開發(fā)中茴厉,采用ListView組件來展示數(shù)據(jù)是很常用的功能,當(dāng)一個(gè)應(yīng)用要展現(xiàn)很多的數(shù)據(jù)時(shí)赏胚,一般情況下都不會(huì)把所有的數(shù)據(jù)一次就展示出來访娶,而是通過
分頁的形式來展示數(shù)據(jù),這樣會(huì)有更好的用戶體驗(yàn)觉阅。因此崖疤,很多應(yīng)用都是采用分批次加載的形式來獲取用戶所需的數(shù)據(jù)。例如:微博客戶端可能會(huì)在用戶滑 動(dòng)至列表底端時(shí)自動(dòng)加載下一頁數(shù)據(jù)典勇,也可能在底部放置一個(gè)"查看更多"按鈕劫哼,用戶點(diǎn)擊后,加載下一頁數(shù)據(jù)割笙。
(二)权烧、核心技術(shù)點(diǎn):
借助ListView組件的OnScrollListener監(jiān)聽事件眯亦,去判斷何時(shí)該加載新數(shù)據(jù);
往服務(wù)器get傳遞表示頁碼的參數(shù):page般码。而該page會(huì)每加載一屏數(shù)據(jù)后自動(dòng)加一妻率;
利用addAll()方法不斷往list集合末端添加新數(shù)據(jù),使得適配器的數(shù)據(jù)源每新加載一屏數(shù)據(jù)就發(fā)生變化板祝;
利用適配器對(duì)象的notifyDataSetChanged()方法宫静。該方法的作用是通知適配器自己及與該數(shù)據(jù)有關(guān)的view,數(shù)據(jù)已經(jīng)發(fā)生變動(dòng)券时,要刷新自己囊嘉、更新數(shù)據(jù)。
(三)革为、 OnScrollListener監(jiān)聽事件 :
1、該監(jiān)聽器中有兩個(gè)需要實(shí)現(xiàn)的方法:
onScrollStateChanged(AbsListView view, int scrollState):監(jiān)聽屏幕的滾動(dòng)狀態(tài)的變動(dòng)情況
onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount,
int totalItemCount):監(jiān)聽屏幕滾動(dòng)的item的數(shù)量
2舵鳞、 scrollState 回調(diào)順序如下:
第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1):表示正在滾動(dòng)震檩。當(dāng)屏幕滾動(dòng)且用戶使用的觸碰或手指還在屏幕上時(shí)為1
第2次:scrollState =SCROLL_STATE_FLING(2) :表示手指做了拋的動(dòng)作(手指離開屏幕前,用力滑了一下蜓堕,屏幕產(chǎn)生慣性滑動(dòng))抛虏。
第3次:scrollState =SCROLL_STATE_IDLE(0) :表示屏幕已停止。屏幕停止?jié)L動(dòng)時(shí)為0套才。
3迂猴、 onScroll中參數(shù)講解:
firstVisibleItem:當(dāng)前窗口中能看見的第一個(gè)列表項(xiàng)ID(從0開始)
visibleItemCount:當(dāng)前窗口中能看見的列表項(xiàng)的個(gè)數(shù)(小半個(gè)也算)
totalItemCount:列表項(xiàng)的總數(shù)
4、思路:
當(dāng)滾到最后一條背伴,加載新數(shù)據(jù)沸毁;
適配器的數(shù)據(jù)源要進(jìn)行累加:totalList.addAll(list);
數(shù)據(jù)發(fā)生變化,適配器通知:adapter.notifyDataSetChanged();【牢記】
判斷是否滾到最后一行傻寂。
示例代碼:
if (firstVisibleItem + visibleItemCount ==
totalItemCount ) {
isBottom = true;
}