技術要點
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' }
}
}
複製代碼
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. 註解使用
屬性 |
類型 |
必須 |
默認 |
說明 |
value |
StringRes |
是 |
無 |
標題內容 |
backgroundColor |
ColorRes |
否 |
全局標題背景色 |
標題背景色 |
textColor |
ColorRes |
否 |
全局標題文字顏色 |
標題文字顏色 |
backIcon |
DrawableRes |
否 |
全局標題返回按鈕圖標 |
標題返回按鈕圖標 |
屬性 |
類型 |
必須 |
默認 |
說明 |
value |
StringRes |
是 |
無 |
按鈕圖片內容 |
屬性 |
類型 |
必須 |
默認 |
說明 |
value |
StringRes |
是 |
無 |
按鈕文字內容 |
屬性 |
類型 |
必須 |
默認 |
說明 |
value |
StringRes |
是 |
無 |
按鈕圖片內容 |
屬性 |
類型 |
必須 |
默認 |
說明 |
value |
StringRes |
是 |
無 |
按鈕文字內容 |
屬性 |
類型 |
必須 |
默認 |
說明 |
hide |
boolean |
否 |
false |
隱藏狀態欄 |
enabled |
boolean |
否 |
false |
狀態欄是否可用 |
transparent |
boolean |
否 |
false |
狀態欄透明 |
5.7 TimeLog-打印方法和構造方法執行的時間
屬性 |
類型 |
必須 |
默認 |
說明 |
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
複製代碼
第三方庫