RecyclerView滑动到底部自动加载
??? 你經(jīng)常聽到“上拉加載”這樣的字眼嗎?你知道這個(gè)功能是怎么實(shí)現(xiàn)的嗎?這篇文章記錄了我對“上拉加載”的實(shí)現(xiàn),與大家一起分享。
??? “上拉加載”針對的是RecyclerView或者Listview這樣的列表控件(本文以RecyclerView為例),一般和“數(shù)據(jù)分頁”配合使用,旨在實(shí)現(xiàn)“分頁加載,隨用隨取”,從而避免了一個(gè)接口返回過多的數(shù)據(jù)。
??? RecyclerView每加載一個(gè)item都會(huì)調(diào)用一次onBindViewHolder方法,并且只在item由不可見變?yōu)榭梢姷臅r(shí)候才會(huì)調(diào)用此方法。我們可以通過onBindViewHolder方法來判斷是否已經(jīng)到達(dá)列表的底部。
public void onBindViewHolder(CollectionViewHolder holder, int position) {holder.fillData(mData.get(position));if(position == getItemCount()-1){//已經(jīng)到達(dá)列表的底部 loadMoreData();}}??? 上面代碼中我們通過比較position和getItemCount判斷當(dāng)前加載的item是不是最后一條,如果是最后一條的話就要執(zhí)行網(wǎng)絡(luò)請求加載下一頁數(shù)據(jù)。
??? 上面就是我實(shí)現(xiàn)“上拉加載”的核心思想。使用過程中僅僅這樣還是不夠的,還需要繼續(xù)完善、優(yōu)化,下面記錄一下我是如何添加底部提示的。
??? 描述:如果所有的數(shù)據(jù)都已經(jīng)加載完畢了(服務(wù)器已經(jīng)返回了最后一頁數(shù)據(jù)),我們在最后一條數(shù)據(jù)下面顯示一個(gè)“沒有更多”的提示。
??? 實(shí)現(xiàn):這里要提一下RecyclerView加載item的原理:RecyclerView在加載item之前會(huì)調(diào)用getItemCount方法,然后調(diào)用相同次數(shù)的onBindViewHolder方法,顯示相同條數(shù)的數(shù)據(jù)。現(xiàn)在我需要RecyclerView在原來數(shù)據(jù)的基礎(chǔ)之上,多顯示一條數(shù)據(jù),所以我進(jìn)行了如下修改:
public int getItemCount() {return mData.size() + 1;}這樣就為“提示”這根蘿卜挖好了一個(gè)坑。可是onCreateViewHolder并沒有position這樣的參數(shù),我們沒有辦法為普通數(shù)據(jù)項(xiàng)和最后一行的提示項(xiàng)生成特定的item。我是通過這樣的方法解決這個(gè)問題的,我把數(shù)據(jù)項(xiàng)的展示布局和“沒有更多”的布局放在同一個(gè)item當(dāng)中,然后再根據(jù)onBindViewHolder傳遞過來的position來控制最終顯示哪一個(gè)布局。
??? 上面是比較基礎(chǔ)一點(diǎn)的操作,其實(shí)關(guān)于提示項(xiàng)的顯示要比這個(gè)復(fù)雜得過,要考慮很多情況,如何判斷服務(wù)器返回的是最后一頁,已顯示和未顯示的判斷和狀態(tài)的更新。有時(shí)間再繼續(xù)聊!
轉(zhuǎn)載于:https://www.cnblogs.com/hsji/p/4955957.html
總結(jié)
以上是生活随笔為你收集整理的RecyclerView滑动到底部自动加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 学习之NSPredicate
- 下一篇: OData V4 系列 查询操作