用RxJava+Retrofit+OKHttp封裝的一個Kotlin版本的MVP框架

kotlin-mvp

技術要點

1. RxJava+Retrofit+OkHttp實現鏈式http請求

2. 封裝基類:BaseActivity、BasePresenterActivity、BaseFragment、BasePresenterFragment、RecycleAdapter、BasePresenter

3. 封裝工具擴展類:CalendarExt、ContextExt、DateExt、EditTextExt、GsonExt、RxJavaExt、StringExt

4. 引入LifeCycle,將Presenter和Activity的生命週期綁定在一塊兒

5. 將在Application中初始化移至到ContentProvider中,從而不用封裝BaseApplication

6. AOP(面向切面)封裝註解:TimeLog、ClickGap

7. APT(編譯時註解)封裝註解:OnClickFirstDrawable、OnClickFirstText、OnClickSecondDrawable、OnClickSecondText、Prefs、PrefsField、StatusBar

8. Dagger2對類的生命週期作一個管理

最低兼容:19

Gradle

1. 在Project的build.gradle中添加

allprojects {
     repositories {
 	    maven { url 'https://jitpack.io' }
     }
 }
複製代碼

2. AspectJX的使用請參考官方文檔

dependencies {
    classpath 'com.github.franticn:gradle_plugin_android_aspectjx:2.0.6'
}
複製代碼

3. 在app的build.gradle的添加

apply plugin: 'kotlin-kapt' // 使用 kapt 註解處理工具

apply plugin: 'android-aspectjx'
複製代碼

4. 添加依賴

implementation "com.github.catch-pig.kotlin-mvp:mvp:last_version"
kapt "com.github.catch-pig.kotlin-mvp:compiler:last_version"
kapt "com.google.dagger:dagger-compiler:2.23.2"
kapt "com.google.dagger:dagger-android-processor:2.23.2"
複製代碼

使用

1. 在須要使用狀態欄、標題欄、加載動畫的主題中配置全局參數:

屬性 類型 必須 默認 說明
title_bar_back_icon DrawableRes 標題欄的返回圖標
title_bar_background ColorRes 標題欄的背景色
title_bar_text_color ColorRes 標題欄的文字顏色
title_bar_show_line boolean false 標題欄的下方的線條是否顯示
loading_view_color ColorRes loading動畫顏色
loading_view_background ColorRes loading動畫背景色
recycle_view_empty_layout LayoutRes emptyLayout 列表空頁面

使用示例:java

```
<style name="AppThemeBarStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <!--全局標題欄和狀態欄配置-->
    <item name="title_bar_background">@color/colorPrimary</item>
    <item name="title_bar_back_icon">@drawable/back</item>
    <item name="title_bar_text_color">@color/white</item>
    <item name="title_bar_show_line">false</item>
    <item name="loading_view_color">@color/colorAccent</item>
    <item name="loading_view_background">@color/white</item>
    <!--全局標題欄和狀態欄配置-->
</style>
```
複製代碼

2. Activity

  • 使用MVP的繼承BasePresenterActivity
  • 不使用MVP的繼承BaseActivity

3. Fragment

  • 使用MVP的繼承BasePresenterFragment
  • 不使用MVP的繼承BaseFragment

4. 若是使用RecycleView的時候,Adapter能夠繼承RecycleAdapter來使用

在app的build.gradle的android下添加以下代碼:android

//啓用實驗性功能
androidExtensions {
    experimental = true
}
複製代碼

只須要實現如下兩個方法git

class UserAdapter(iPageControl: IPageControl):RecyclerAdapter<User>(iPageControl) {
    override fun layoutId(): Int {
        return R.layout.item_user
    }

    override fun bindViewHolder(holder: CommonViewHolder, m: User, position: Int) {
        //使用的experimental以後,能夠直接holder.控件ID,不須要holder.itemView.控件ID
        holder.name.text = m.name
    }
}
複製代碼

5. 註解使用

5.1 Title-標題

屬性 類型 必須 默認 說明
value StringRes 標題內容
backgroundColor ColorRes 全局標題背景色 標題背景色
textColor ColorRes 全局標題文字顏色 標題文字顏色
backIcon DrawableRes 全局標題返回按鈕圖標 標題返回按鈕圖標

5.2 OnClickFirstDrawable-標題上第一個圖標按鈕的點擊事件

屬性 類型 必須 默認 說明
value StringRes 按鈕圖片內容

5.3 OnClickFirstText-標題上第一個文字按鈕的點擊事件

屬性 類型 必須 默認 說明
value StringRes 按鈕文字內容

5.4 OnClickSecondDrawable-標題上第二個圖標按鈕的點擊事件

屬性 類型 必須 默認 說明
value StringRes 按鈕圖片內容

5.5 OnClickSecondText-標題上第二個文字按鈕的點擊事件

屬性 類型 必須 默認 說明
value StringRes 按鈕文字內容

5.6 StatusBar-狀態欄

屬性 類型 必須 默認 說明
hide boolean false 隱藏狀態欄
enabled boolean false 狀態欄是否可用
transparent boolean false 狀態欄透明

5.7 TimeLog-打印方法和構造方法執行的時間

屬性 類型 必須 默認 說明
value LEVEL LEVEL.D 日誌等級

5.8 ClickGap-重複點擊延時

屬性 類型 必須 默認 說明
value Long 800毫秒 重複點擊間隔

5.9 Prefs-SharedPreferences註解生成器

屬性 類型 必須 默認 說明
value String "" 別名
mode PrefsMode PrefsMode.MODE_PRIVATE 模式,對應PreferencesMode

5.10 PrefsField-SharedPreferences字段註解

屬性 類型 必須 默認 說明
value String "" 字段別名,若是爲空則取修飾字段的參數名稱

6. 刷新分頁

使用RefreshLayoutWrapper+RecyclerAdapter控件實現刷新功能

  • RefreshLayoutWrapper繼承於SmartRefreshLayout,具體使用請看SmartRefreshLayout官方文檔,默認每頁數據量爲16,若是想修改每頁數據量,可以使用以下方法更改:github

    RefreshLayoutWrapper.pageSize = 16
    複製代碼
  • RefreshLayoutWrapper實現了IPageControl,能夠經過調用接口內的方法類獲取刷新控件的狀態和更改狀態bash

    //獲取刷新的狀態
    iPageControl.getRefreshStatus()
    複製代碼
  • RecyclerAdapter在實例化的時候傳入IPageControl, 獲取數據成功以後,只須要調用autoUpdateList(list)方法, 能夠自動RefreshLayoutWrapper頁碼和刷新狀態變化app

  • 數據更新失敗能夠調用RecyclerAdapter.updateFailed()maven

  • 獲取每頁的數據量和下一頁的頁碼,能夠調用一下方法ide

    //每頁的數據量
    RecyclerAdapter.pageSize = 16
    //下一頁的頁碼
    RecyclerAdapter.nextPageIndex = 1
    複製代碼

第三方庫

SmartRefreshLayout-刷新控件

Immersionbar-狀態欄

Dagger2

RxJava

RxAndroid

OkHttp

Retrofit

Gson

AndroidUtilKTX-工具類

LoadingView-Loading動畫

相關文章
相關標籤/搜索