android分頁邏輯處理

使用場景:

在Android頁面的顯示的時候沐批,往往有很多的頁面加載數(shù)據(jù)分頁邏輯。每次的頁面處理的話會多次的去書寫邏輯判斷。顯得很繁瑣米丘,如何更加簡單的實現(xiàn)一個頁面的分頁邏輯處理。只需要一次的書寫就能處理全部的頁面糊啡。這樣就要考慮到數(shù)據(jù)刷新的封裝性拄查。

一般我們的邏輯處理是在每個頁面進(jìn)行邏輯判斷,如下:

(1)加入行為棚蓄,下拉或者上滑的行為習(xí)慣堕扶,如圖1所示:


圖1

(2)判斷數(shù)據(jù)處理數(shù)據(jù)異步后的獲取碍脏,每次都會去進(jìn)行數(shù)據(jù)的判斷。如圖2所示:


圖2

通過上面的描述稍算,完成一個分頁式的網(wǎng)絡(luò)請求的大致的具體步驟:請求數(shù)據(jù)->解析數(shù)據(jù)->處理數(shù)據(jù)典尾,所以能夠把這三個步驟全部進(jìn)行分離開來是很重要的。一般項目的中的使用的都是mvp架構(gòu)糊探,已經(jīng)把第一步和第二步進(jìn)行了分割钾埂,普通的邏輯完全可以勝任,但是頁面分頁邏輯科平,并沒有處理勃教。這樣每次的分頁的處理還是需要去重新書寫這部分的判斷。如圖3所示:
圖3

所以我們可以在上面的基礎(chǔ)上加入一層的封裝:

新增加兩個類專門去處理下拉和上拉分頁處理問題

(1)BaseLoadMoreAndRefreshView增加分頁行為匠抗,包括回調(diào)數(shù)據(jù)故源,沒有更多數(shù)據(jù),返回數(shù)據(jù)是全部為空的處理汞贸。

/**
 * 上拉下拉處理的分類
 */
public interface BaseLoadMoreAndRefreshView<T> extends BaseView {
    /**
     * 回調(diào)數(shù)據(jù)
     */
    void refreshDate(List<T> list);

    /**
     * 沒有跟多數(shù)據(jù)
     */
    void loadMoreNoDate();

    /**
     * 空數(shù)據(jù)頁面
     */
    void loadEmptyPage();


}

(2)BaseLoadMoreAndRefreshPresenter 處理分頁邏輯绳军。

package com.xx.xx.base;

import com.xx.xx.mvp.BasePresenterImpl;

import java.util.ArrayList;
import java.util.List;

/**
 * 下拉和上拉數(shù)據(jù)處理抽象類
 */
public abstract class BaseLoadMoreAndRefreshPresenter
        <T, D extends BaseLoadMoreAndRefreshView>
        extends BasePresenterImpl<D> {
    private int page = 1;
    private List<T> mDate = new ArrayList<>();

    /**
     * 設(shè)置頁面信息
     *
     * @param page
     */
    public void setStartPage(int page) {
        this.page = page;
    }

    /**
     * 獲取的主要參數(shù)
     *
     * @param page
     */
    protected abstract void loadDate(int page);

    /**
     * 上拉加載
     */
    public void loadMore() {
        page++;
        loadDate(page);
    }

    /**
     * 下拉刷新
     */
    public void refreshDate() {
        page = 1;
        loadDate(page);
    }

    /**
     * 處理數(shù)據(jù),加入分頁判斷
     * @param page
     * @param tList
     */
    public void showData(int page, List<T> tList) {

        if (page == 1) {
            if (tList.size() > 0) {
                mDate.clear();
                mDate.addAll(tList);
                mView.refreshDate(mDate);
            } else {
                mDate.clear();
                mView.loadEmptyPage();
            }

        } else if (page > 1 && tList.size() > 0) {
            mDate.addAll(tList);
            mView.refreshDate(mDate);
        } else {
            mView.loadMoreNoDate();
        }
    }
}

具體使用過程:
(1)界面上使用:

 refresh.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                imp.loadMore();
            }

            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                imp.refreshDate();
            }
        });

(2)Presenter實現(xiàn)類中數(shù)據(jù)解析后進(jìn)行調(diào)取showData方法進(jìn)行判斷:

 @Override
            public void onResponseSucceed(String json) {
                List<CollectionBean> collectionBeans = GsonUtils.jsonToList(json, CollectionBean.class);
                if (collectionBeans != null) {
                    showData(page, collectionBeans);
                }
            }

(3)頁面實現(xiàn)View的接口矢腻,進(jìn)行具體的實現(xiàn)门驾。

    @Override
    public void refreshDate(List<CollectionBean> list) {
        adapter.refreshData(list);
    }

    @Override
    public void loadMoreNoDate() {
        ToastUtils.showToast(getString(R.string.on_more_date));
    }

    @Override
    public void loadEmptyPage() {
        adapter.setEmptyView(EmptyViewHelperForActivity.getInstance().getErrViewNoDate(CollectionActivity.this));
        adapter.refreshData(new ArrayList<>());
    }

總結(jié):使用這樣的判斷處理能夠更好地處理分頁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末多柑,一起剝皮案震驚了整個濱河市奶是,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竣灌,老刑警劉巖聂沙,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異初嘹,居然都是意外死亡及汉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門屯烦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坷随,“玉大人,你說我怎么就攤上這事驻龟∥旅迹” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵翁狐,是天一觀的道長类溢。 經(jīng)常有香客問我,道長谴蔑,這世上最難降的妖魔是什么豌骏? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮隐锭,結(jié)果婚禮上窃躲,老公的妹妹穿的比我還像新娘。我一直安慰自己钦睡,他們只是感情好蒂窒,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荞怒,像睡著了一般洒琢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褐桌,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天衰抑,我揣著相機(jī)與錄音,去河邊找鬼荧嵌。 笑死呛踊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啦撮。 我是一名探鬼主播谭网,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赃春!你這毒婦竟也來了愉择?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤织中,失蹤者是張志新(化名)和其女友劉穎锥涕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狭吼,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡站楚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搏嗡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窿春。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖采盒,靈堂內(nèi)的尸體忽然破棺而出旧乞,到底是詐尸還是另有隱情,我是刑警寧澤磅氨,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布尺栖,位于F島的核電站,受9級特大地震影響烦租,放射性物質(zhì)發(fā)生泄漏延赌。R本人自食惡果不足惜除盏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挫以。 院中可真熱鬧者蠕,春花似錦、人聲如沸掐松。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽大磺。三九已至抡句,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杠愧,已是汗流浹背待榔。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留流济,地道東北人究抓。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像袭灯,于是被迫代替她去往敵國和親刺下。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,111評論 1 32
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中稽荧。橘茉。。 其實如果沒有APIManager這一層是沒法使用delegate的姨丈,畢竟多個單...
    yhtang閱讀 5,206評論 1 23
  • 流水賬似的記錄畅卓,變成一顆顆珍珠,串成美麗的生活回憶蟋恬。 2018-08-02 前面連續(xù)兩天都加班翁潘,等回到家米粒都睡了...
    李孟宸閱讀 259評論 0 0
  • 1.原因 搞完個人博客,當(dāng)然是要配置點(diǎn)自己喜歡的東西了歼争。第一步是搞一個眾樂樂的評論功能拜马,ok,就去弄了一下gita...
    Jayce_xi閱讀 601評論 2 1
  • 時間在走沐绒,我們在努力俩莽! 李莊、周村乔遮、高灣扮超、大里村等,真正的把家訪落在實處! 這次的家訪出刷,因為路程遠(yuǎn)且學(xué)生分布極分散...
    楊雯_0c88閱讀 116評論 0 0