封裝-分頁功能的封裝

使用

    private void initLoadNextPageManager() {
        //mLoadNextPageManager.loadFirstPage();

        mLoadNextPageManager = new LoadNextPageManager() {

            //這裏應該獲取一個能傳入參數的東西

            @Override
            public boolean isLastPage() {
                return isLastPageForOldListAndNewList(); //需要解析數據的時候傳入兩個list
                //return LoadNextPageManager.isLastPage(getNewListDat(), getListData()); //這麼
            }

            @Override
            public Map<String, String> getMapParams() {
                final Map<String, String> params = RequestParamsUtil.getParamsMap();



                params.put("url", "http://weibo.com/6294019137/I1eGFsreC");
                params.put("pageSize", "" + getPAGESIZE());
                params.put("pageNo", "" + getPageNum());
                return params;
            }

            @Override
            public Map<String, String> getHeaderParams() {
                return RequestParamsUtil.getHeadersMap();
            }

            @Override
            public void requestHttpWithParams(Map<String, String> headers, Map<String, String> params, final StringCallback mCallBack) {
                ParamsUtils.printParams(params);//打印參數

                OkHttpUtils
                        .get()
                        .url(YQMSAPP.SELECTCOMMENTS)
                        .params(params)
                        .headers(headers)
                        .build()
                        .execute(new AuthorStringCallBack(BaseApplication.getAppActivityBase()) {
                            @Override
                            public void onError(Call call, Exception e, int id) {
                                super.onError(call, e, id);
                                if (null != mCallBack) {
                                    mCallBack.onError(call, e, id);
                                }
                            }

                            @Override
                            public void onResponse(String response, int id) {
                                super.onResponse(response, id);
                                if (null != mCallBack) {
                                    mCallBack.onResponse(response, id);
                                }

                                //解析數據,判斷問題
                                IStarResponse<IStarResult2<IStarDataPage<SameCommentListBean>>> parse = IStarJSONUtils.parse(response, new TypeToken<IStarResponse<IStarResult2<IStarDataPage<SameCommentListBean>>>>() {
                                });


                                if ("success".equals(parse.getMsg())
                                        || "0".equals(parse.getStatus())) {
                                    List<SameCommentListBean> data = null;
                                    try {
                                        data = parse.getResult().getData().getData();
                                    } catch (Exception e) {
                                        data = new ArrayList<>();
                                    }
                                    setOldAndNewListData(((QuickAdapter) displayCommentAdapter.getInnerAdapter()).getDatas(), data); //設置數據用於比較

                                    if (isLastPage()) { //說明沒有更多數據了
                                        RecyclerViewStateUtils.setFooterViewState(BaseApplication.getAppActivityBase(), rv_same_content_list, 0/*REQUEST_COUNT*/, LoadingFooter.State.TheEnd, null);
                                    } else {
                                        //還有更多數據,直接加入,更新數據
                                        ((QuickAdapter) displayCommentAdapter.getInnerAdapter()).addDatas(data);
                                        displayCommentAdapter.notifyDataSetChanged();
                                        RecyclerViewStateUtils.setFooterViewState(rv_same_content_list, LoadingFooter.State.Normal);
                                    }
                                }


                            }
                        });
            }
        };

        //mLoadNextPageManager.setPAGESIZE(200);
        mLoadNextPageManager.loadFirstPage();
    }

源代碼

public abstract class LoadNextPageManager {

    private int FIRST_PAGE = 1;
    private int PAGESIZE = 10;//默認每頁的個數
    private int pageNum = FIRST_PAGE; //頁數,默認是從1開始

    private List listData; //將舊數據傳進來
    private List newListDat; // 將新數據傳進來用於比較


    private int totalSize;//總個數,用於保存吧

//    public static LoadNextPageManager newInstance() {
//
//        LoadNextPageManager fragment = new LoadNextPageManager() {
//
//            @Override
//            public void requestHttpWithParams(StringCallback mCallBack) {
//
//            }
//
//            @Override
//            public boolean isLastPage() {
//                List listData = null;
//                List newListData = null;
//                return LoadNextPageManager.isLastPage(listData, newListData);
//            }
//
//            @Override
//            public Map<String, String> getMapParams() {
//                return new HashMap<>();
//            }
//        };
//        return fragment;
//    }

    // 獲取總個數
    public int getTotalSize() {
        return totalSize;
    }

    // 設置總個數
    public void setTotalSize(int totalSize) {
        this.totalSize = totalSize;
    }

    /**
     * @param listData    全部的數據
     * @param newListData 新請求的數據
     */
    public void setOldAndNewListData(List listData, List newListData) {
        this.listData = listData;
        this.newListDat = newListData;
    }

    public List getListData() {
        return listData;
    }

    public void setListData(List listData) {
        this.listData = listData;
    }

    public List getNewListDat() {
        return newListDat;
    }

    public void setNewListDat(List newListDat) {
        this.newListDat = newListDat;
    }

    public int getPAGESIZE() {
        return PAGESIZE;
    }

    public void setPAGESIZE(int PAGESIZE) {
        this.PAGESIZE = PAGESIZE;
    }

    public void setFirstPage() {
        setPageNum(FIRST_PAGE);
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageNum() {
        return pageNum;
    }

    //頁數加1
    private void increasePageNum() {
        pageNum++;
    }

    // 頁數減1
    private void decreasePageNum() {
        pageNum--;
    }

    // 加載第一頁
    public void loadFirstPage() {
        //OkHttpUtils.post().params(para)
        setFirstPage();
        loadMorePage();
    }

    // 加載更多數據
    public void loadMorePage() {

        Map<String, String> headers = getHeaderParams();
        Map<String, String> params = getMapParams();
        if (null == headers) {
            headers = new HashMap<>();
        }
        if (null == params) {
            params = new HashMap<>();
        }
        increasePageNum();//請求之前, 先添加頁數

        requestHttpWithParams(headers, params, new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                decreasePageNum();//頁數回覆到原來
            }

            @Override
            public void onResponse(String response, int id) {
                // 判斷是否是足後一頁
                if (isLastPage()) {
                    decreasePageNum();//頁數恢復到上一頁
                }
            }
        });
    }

    // 下載下一頁
    public abstract void requestHttpWithParams(Map<String, String> headers, Map<String, String> params, StringCallback mCallBack);

    public abstract boolean isLastPage(); //判斷是否是最後一頁,可以使用靜態方法,也可以自己判斷

    public abstract Map<String, String> getMapParams();

    public Map<String, String> getHeaderParams() {
        return new HashMap<>();//頭部
    }


    //判斷是否是最後一頁
    public static boolean isLastPage(List listData, List newListData) {
        if (newListData == null || newListData.size() < 1) { // 沒有數據
            //但原列表有數據
            if (listData != null && listData.size() > 0) {
                return true; //是最後一頁
            }
        }
        return false;
    }

    // 判斷是否是最後一頁面
    public boolean isLastPageForOldListAndNewList() {
        return LoadNextPageManager.isLastPage(getListData(), getNewListDat());
    }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章