kotlin RecycleView 數(shù)據(jù)懶加載解決辦法

最近在研究安卓的Kotlin,碰到的問題是:首頁是一個(gè)多列表頁面,見下圖

Screenshot_1587867878.png

頂部接口分類接口大于三個(gè),每個(gè)分類的列表含有大于三個(gè)模塊(例如:動(dòng)作片,喜劇片,科幻片...),這樣算起來了啟動(dòng)加載的數(shù)據(jù)接口,大概有六個(gè),甚至更多.... 這種情況一次性請(qǐng)求 顯然不太科學(xué),一是接口返回需要時(shí)間,增加啟動(dòng)時(shí)間,二是其中一個(gè)接口請(qǐng)求失敗,無法及時(shí)刷新數(shù)據(jù).所以就想到當(dāng)前item出現(xiàn)在屏幕中的時(shí)候在加載進(jìn)行刷新.這樣請(qǐng)求接口就減少了很多.如果用戶不滑到底部,那么底部的item數(shù)據(jù)就不用加載了.也減少了不必要的數(shù)據(jù)請(qǐng)求.
代碼如下:

  view!!.home_fr_list.addOnScrollListener(object: RecyclerView.OnScrollListener(){

            override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                Log.e("scrole","調(diào)用了ScrollStateChanged")
            }

            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                val lastPosition = linerlayout.findLastVisibleItemPosition()
                //:找到最后一個(gè)顯示的
                val currentTypeM = homeList[lastPosition]
                //如果當(dāng)前數(shù)組為空 并且不再 加載中 那就去請(qǐng)求數(shù)據(jù)
                if (!currentTypeM.videList.isNotEmpty() && !currentTypeM.isLoading){
                    currentTypeM.isLoading = true
                    Log.e("滾動(dòng):RecyclerView","${currentTypeM.modeModel.resource_type_name}")
                    paramsM = ParamsModel(mod_id = CurrentCatorM.mod_id,resource_type_id = currentTypeM.modeModel.resource_type_id)
                    getPersenter()!!.getCurrentCatorgryVideoListModel(paramsM,lastPosition)
                }
            }

        })

在監(jiān)聽事件里面 判斷當(dāng)前item 數(shù)據(jù)源是否有數(shù)據(jù),如果為空就帶上當(dāng)前Position和參數(shù)去請(qǐng)求數(shù)據(jù),以便數(shù)據(jù)請(qǐng)求回來能夠找到刷新位置.然后在數(shù)據(jù)賦值哪里:

    override fun <T> setData(data: T, identi: String,currentPostion:Int) {
        //:分塊數(shù)據(jù)
        if (identi == "banner") {
             bannerList = data as MutableList<BannerModel>
            val refreshData = homeList[0]
            refreshData.bannerList = bannerList
            //:賦值 顯示數(shù)據(jù)
            homeAdpter.notifyItemChanged(0)
        }


        //:接受數(shù)據(jù)
        if (identi == "list"){
            val listModel = data as HomeListModel
            val refreshData = homeList[currentPostion]
            refreshData.videList = listModel.data
            homeAdpter.notifyItemChanged(currentPostion)
        }

    }

使用notifyItemChanged 來刷新當(dāng)前請(qǐng)求位置的數(shù)據(jù).這樣就完成了首頁數(shù)據(jù)懶加載的操作.
目前數(shù)據(jù)能夠正常加載啦~~~
遺留問題:

就是第一屏數(shù)據(jù)item 大于兩個(gè) ,那么第一個(gè)和和第二個(gè)都不會(huì)取請(qǐng)求數(shù)據(jù),這個(gè)通過 把findLastVisibleItemPosition 換成findFirstVisibleItemPosition 可以解決 總是加載屏幕中的加載第一個(gè)item.這樣也會(huì)有個(gè)問題就是,滑到底部的話,如果存在大于兩個(gè)item,最后一個(gè)item數(shù)據(jù)不會(huì)被夾在.

問題正在解決中.........
如果你有很好的建議歡迎指正!隨時(shí)在線!!!!!

補(bǔ)充數(shù)據(jù)加載方式

val firstPosition = linerlayout.findLastVisibleItemPosition()
val lastPosition = linerlayout.lastLastVisibleItemPosition()

visibleItemsArr = firstPosition - lastPosition ;得到可見屏幕內(nèi)可見items下標(biāo)數(shù)組
然后 for循環(huán)遍歷請(qǐng)求屏幕內(nèi)的可見模塊的數(shù)據(jù).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巧还,一起剝皮案震驚了整個(gè)濱河市悍缠,隨后出現(xiàn)的幾起案子宣鄙,更是在濱河造成了極大的恐慌绩脆,老刑警劉巖早龟,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坯墨,死亡現(xiàn)場離奇詭異芥喇,居然都是意外死亡使套,警方通過查閱死者的電腦和手機(jī)罐呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來童漩,“玉大人弄贿,你說我怎么就攤上這事〗门颍” “怎么了差凹?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵期奔,是天一觀的道長。 經(jīng)常有香客問我危尿,道長呐萌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任谊娇,我火速辦了婚禮肺孤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘济欢。我一直安慰自己赠堵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布法褥。 她就那樣靜靜地躺著茫叭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪半等。 梳的紋絲不亂的頭發(fā)上揍愁,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音杀饵,去河邊找鬼莽囤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛切距,可吹牛的內(nèi)容都是我干的朽缎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔚舀,長吁一口氣:“原來是場噩夢啊……” “哼饵沧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赌躺,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羡儿,沒想到半個(gè)月后礼患,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掠归,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年缅叠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虏冻。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肤粱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厨相,到底是詐尸還是另有隱情领曼,我是刑警寧澤鸥鹉,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站庶骄,受9級(jí)特大地震影響毁渗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜单刁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一灸异、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羔飞,春花似錦肺樟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恍风,卻和暖如春蹦狂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朋贬。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工凯楔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锦募。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓摆屯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糠亩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虐骑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容