吐血推薦一個Android自定義控件,可以節(jié)約70%開發(fā)時間

前言

本文主要向大家介紹一個思路,用于解決在實際開發(fā)中,加載數(shù)據(jù)列表這個最基本的需求(你應(yīng)該已經(jīng)熟悉recyclerView的用法)。下面我們開始分析加載一個列表一般需要哪些需求。

需求

1.從服務(wù)器獲取一段Json(當(dāng)然也可以是其他格式的數(shù)據(jù)),比如:

{
  "list":[
        {"name":"zhang","age":20},
        {"name":"li","age":10},
        {"name":"wang","age":20},
        {"name":"zhao","age":30}
  ]
}

2.新建Adapter,根據(jù)數(shù)據(jù)加載視圖
3.一般需要下拉刷新、上拉加載分頁數(shù)據(jù)
4.無數(shù)據(jù)時,各種花樣的提示,網(wǎng)絡(luò)錯誤時,各種花樣的提示,譬如:


需求差不多就是這些,但是我們開發(fā)時實現(xiàn)還是標(biāo)膠復(fù)雜的,比如:

  • 獲取到數(shù)據(jù)更新adapter
  • 給SwipeRefreshLayout設(shè)置下拉監(jiān)聽,網(wǎng)絡(luò)請求結(jié)束后關(guān)閉dialog
  • 設(shè)置上拉加載函數(shù),網(wǎng)絡(luò)請求完成關(guān)閉上拉加載的狀態(tài)
  • 獲取到的數(shù)據(jù)為空或者獲取失敗,顯示相應(yīng)的布局,重新請求成功再隱藏相應(yīng)布局
  • 網(wǎng)絡(luò)請求成功后pageIndex++
  • 如果分頁大小是20,那么第一次獲取的size小于20,就不能夠上拉加載。

這些代碼,起碼得要個100行吧,寫一次還好,要是動不動就寫個一次

那么接下來就該我封裝的自定義控件BaseRecyclerView登場了,先簡單看一下用法:


神奇吧,這幾行代碼,上面所有的需求都被解決了!?。?/p>

解釋

之前提到的所有需求,都被封裝在BaseRecyclerView里。BaseRecyclerView只對外提供了一個初始化的方法,傳入Adapter,以及實現(xiàn)一個接口。Adapter是干嘛的我們都知道(如果對BaseRecyclerView不了解的同學(xué)可以先去了解一下,當(dāng)然可以繼續(xù)向下看,思路有了,ListView也可以封裝一個類似的),重點說一下NetWorkHandle接口,這個接口里有兩個需要實現(xiàn)的方法,一個是init方法,init方法的作用有在注釋里寫,主要是初始化配置:


然后是loadData方法:
public void loadData(boolean isRefresh, final String pageIndex)
這里面其實是使用了代理模式,我們無需關(guān)心在何時何地觸發(fā)上拉操作和下拉操作,只需要知道,當(dāng)用戶下拉或者上拉時,會調(diào)用這個方法,isRefresh是true表示下拉刷新,false表示下拉加載,pageIndex表示頁數(shù),僅此而已。封裝過程如下所示:

源碼

有興趣的查看具體實現(xiàn)細(xì)節(jié),代碼都很簡單,主要就是經(jīng)驗的總結(jié),另外這個項目里還有其他一些整理的東西。代碼寫的不是很好,歡迎提出改進(jìn)建議。
項目地址:https://github.com/gg051202/android-frame

使用

Paste_Image.png

-----------------------------------------------------分割線----------------------------------------------
抱歉,忘了貼文字了:

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    compile 'com.github.gg051202:android-frame:v0.2.8'
}

其實可以去這個網(wǎng)站 https://jitpack.io/,只要在搜索框里輸入github項目的地址,就可以直接引用了,特別方便。比如你可以把別人一些很好的開源庫fork到自己的倉庫里,然后修改一些代碼引用,或者自己寫一些東西然后發(fā)布。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,631評論 4 61
  • 鼠尾草(理性的香氣) 唇形科鼠尾草屬。多年生芳香草本植物。原產(chǎn)于地中海地區(qū)。葉片長橢圓形,色灰綠,葉表有凹凸?fàn)罴?xì)皺...
    樹先森6閱讀 2,066評論 3 4
  • 剛剛從青海甘肅旅游回來,將我的經(jīng)歷和經(jīng)驗記錄在這里,給想去西部旅游的人一些參考。 此次行程是根據(jù)包車師傅推薦的7日...
    夏天的記錄閱讀 1,149評論 0 3

友情鏈接更多精彩內(nèi)容