RecyclerView續(xù),下拉刷新與上拉加載

唉丈屹,好久好久沒寫文章了调俘,簡(jiǎn)直就是罪過,工作忙不是借口泉瞻,自己懶才是真的脉漏,本來中間還有一篇嘮叨的,內(nèi)容也沒啥袖牙,就是工作上忙唄侧巨,不想加班唄,還有累唄鞭达,寫了司忱,但沒發(fā),算了········

正事畴蹭,上次寫了RecyclerView的強(qiáng)大坦仍,忘了補(bǔ)充好多個(gè)問題,今天全部補(bǔ)上叨襟。

首先下拉刷新繁扎,這個(gè)簡(jiǎn)單,所以我也只是簡(jiǎn)單說說

我一直都是認(rèn)為谷歌有自帶的框架就不用第三方糊闽,所以當(dāng)然是用SwipeRefreshLayout來下拉刷新

配置下很簡(jiǎn)單

        mSwipeRefreshLayout.setOnRefreshListener(mOnRefreshListener);
        mSwipeRefreshLayout.setColorSchemeResources(R.color.status_bar_bg, R.color.orange, R.color.green);

    /**
     * 刷新
     */
    private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            pageNum = 1;
            mAdapter.clearList();//清楚數(shù)據(jù)梳玫,上一篇文章的事
            getData();//獲取數(shù)據(jù)
        }
    };

官方控件簡(jiǎn)簡(jiǎn)單單的下拉刷新就完成了

接下來是上拉加載,別人扔給我的控件

mRecyclerView.addOnScrollListener(mOnScrollListener);


    /**
     * RecycleView的滑動(dòng)監(jiān)聽(加載更多)
     */
    private EndlessRecyclerOnScrollListener mOnScrollListener = new EndlessRecyclerOnScrollListener() {

        @Override
        public void onLoadNextPage(View view) {
            super.onLoadNextPage(view);
            //下面這是重點(diǎn)右犹,第三個(gè)參數(shù)是一頁10條(用來控制是否可以繼續(xù)下拉)提澎,第四個(gè)是顯示加載狀態(tài),最后一個(gè)可以配置點(diǎn)擊重試請(qǐng)求網(wǎng)絡(luò)
            RecyclerViewStateUtils.setFooterViewState(Activity.this, mRecyclerView, 10, LoadingFooter.State.Loading, null);
            pageNum++;
            getData();
        }
    };

那個(gè)設(shè)置狀態(tài)的幾種類型:

RecyclerViewStateUtils.setFooterViewState(mRecyclerView, LoadingFooter.State.Normal); //加載完成后不顯示的正常狀態(tài)

RecyclerViewStateUtils.setFooterViewState(mRecyclerView, LoadingFooter.State.TheEnd);//沒有下一頁的狀態(tài)

 RecyclerViewStateUtils.setFooterViewState(Activity.this, mRecyclerView, 10, LoadingFooter.State.Loading, null);//加載狀態(tài)

接著上EndlessRecyclerOnScrollListener

public class RecyclerViewStateUtils {

    /**
     * 設(shè)置headerAndFooterAdapter的FooterView State
     *
     * @param instance      context
     * @param recyclerView  recyclerView
     * @param pageSize      分頁展示時(shí)念链,recyclerView每一頁的數(shù)量
     * @param state         FooterView State
     * @param errorListener FooterView處于Error狀態(tài)時(shí)的點(diǎn)擊事件
     */
    public static void setFooterViewState(Activity instance, RecyclerView recyclerView, int pageSize, LoadingFooter.State state, View.OnClickListener errorListener) {

        if(instance==null || instance.isFinishing()) {
            return;
        }

        RecyclerView.Adapter outerAdapter = recyclerView.getAdapter();

        if (outerAdapter == null || !(outerAdapter instanceof HeaderAndFooterRecyclerViewAdapter)) {
            return;
        }

        HeaderAndFooterRecyclerViewAdapter headerAndFooterAdapter = (HeaderAndFooterRecyclerViewAdapter) outerAdapter;

        //只有一頁的時(shí)候盼忌,就別加什么FooterView了
        if (headerAndFooterAdapter.getInnerAdapter().getItemCount() < pageSize) {
            return;
        }

        LoadingFooter footerView;

        //已經(jīng)有footerView了
        if (headerAndFooterAdapter.getFooterViewsCount() > 0) {
            footerView = (LoadingFooter) headerAndFooterAdapter.getFooterView();
            footerView.setState(state);

            if (state == LoadingFooter.State.NetWorkError) {
                footerView.setOnClickListener(errorListener);
            }
            recyclerView.scrollToPosition(headerAndFooterAdapter.getItemCount() - 1);
        } else {
            footerView = new LoadingFooter(instance);
            footerView.setState(state);

            if (state == LoadingFooter.State.NetWorkError) {
                footerView.setOnClickListener(errorListener);
            }

            headerAndFooterAdapter.addFooterView(footerView);
            recyclerView.scrollToPosition(headerAndFooterAdapter.getItemCount() - 1);
        }
    }

    /**
     * 獲取當(dāng)前RecyclerView.FooterView的狀態(tài)
     *
     * @param recyclerView
     */
    public static LoadingFooter.State getFooterViewState(RecyclerView recyclerView) {

        RecyclerView.Adapter outerAdapter = recyclerView.getAdapter();
        if (outerAdapter != null && outerAdapter instanceof HeaderAndFooterRecyclerViewAdapter) {
            if (((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterViewsCount() > 0) {
                LoadingFooter footerView = (LoadingFooter) ((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterView();
                return footerView.getState();
            }
        }

        return LoadingFooter.State.Normal;
    }

    /**
     * 設(shè)置當(dāng)前RecyclerView.FooterView的狀態(tài)
     *
     * @param recyclerView
     * @param state
     */
    public static void setFooterViewState(RecyclerView recyclerView, LoadingFooter.State state) {
        RecyclerView.Adapter outerAdapter = recyclerView.getAdapter();
        if (outerAdapter != null && outerAdapter instanceof HeaderAndFooterRecyclerViewAdapter) {
            if (((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterViewsCount() > 0) {
                LoadingFooter footerView = (LoadingFooter) ((HeaderAndFooterRecyclerViewAdapter) outerAdapter).getFooterView();
                footerView.setState(state);
            }
        }
    }
}

好了上拉加載完成了

建議:加載的時(shí)候可以清楚上拉加載的監(jiān)聽积糯,完成了,確定不是最后一頁了再加上
mRecyclerView.clearOnScrollListeners();
mRecyclerView.addOnScrollListener(mOnScrollListener);

唉谦纱,當(dāng)初剛出校園看成,滿腔熱血,現(xiàn)在想買輛單車都買不起服协,怪不得從古代起就辣么多懷才不遇的詩寫出來绍昂,寶寶還是努力干活吧······

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偿荷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唠椭,老刑警劉巖跳纳,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異贪嫂,居然都是意外死亡寺庄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門力崇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斗塘,“玉大人,你說我怎么就攤上這事亮靴♀擅耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵茧吊,是天一觀的道長(zhǎng)贞岭。 經(jīng)常有香客問我,道長(zhǎng)搓侄,這世上最難降的妖魔是什么瞄桨? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮讶踪,結(jié)果婚禮上芯侥,老公的妹妹穿的比我還像新娘。我一直安慰自己乳讥,他們只是感情好柱查,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雏婶,像睡著了一般物赶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上留晚,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天酵紫,我揣著相機(jī)與錄音告嘲,去河邊找鬼。 笑死奖地,一個(gè)胖子當(dāng)著我的面吹牛橄唬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播参歹,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼仰楚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了犬庇?” 一聲冷哼從身側(cè)響起僧界,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臭挽,沒想到半個(gè)月后捂襟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欢峰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年葬荷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽帖。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宠漩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出懊直,到底是詐尸還是另有隱情捡遍,我是刑警寧澤逊桦,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響锋喜,放射性物質(zhì)發(fā)生泄漏昆烁。R本人自食惡果不足惜侥加,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一缆娃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懦铺,春花似錦捉貌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至急前,卻和暖如春醒陆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背裆针。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工刨摩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寺晌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓澡刹,卻偏偏與公主長(zhǎng)得像呻征,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罢浇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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