簡介
為了簡化開發(fā),減少相同模塊的復制粘貼,提高開發(fā)效率,現(xiàn)將一些常用的控件統(tǒng)一封裝處理,原則上使用mvp架構,抽象出presenter層并對view層保持弱引用關系,后期support 更新至26.1.0 方可切換為官方的生命周期監(jiān)聽方案。
MVP整體架構圖
常規(guī)的MVP架構圖,就不多做解釋,下面說下View與Presenter的兩個不同策略方案
support 26.1.0版本以上方案
該方案是在高版本中,官方已經(jīng)將AppCompatActivity實現(xiàn)了生命周期監(jiān)聽
具體說明請看:
https://developer.android.com/topic/libraries/architecture/adding-components.html
https://developer.android.com/topic/libraries/architecture/guide.html
support 26.1.0版本以下方案
該方案是利用弱引用的特性,解決Presenter對Activity強引用關系,當無法回收Activity時導致的內存泄漏問題
目標實現(xiàn)
頁面動態(tài)配置,結果自動映射到Map,高可配,高復用,低耦合
頁面效果展示如下:
代碼配置:
這里展示一部分
代碼加載展示:
整體架構方案
Activity:
1.Activity作為View層 只負責UI的展示,toolbar、recyclerView、multiTypeAdapter、bottomView四個常用部分組成
2.multiTypeAdapter是封裝好的框架,是個自定義的Adatper,該框架旨在項目中,免去寫Adapter的麻煩。支持自動排序(默認正序),拖拽,左右滑動刪除等功能,還有加載更多,空布局展示,頭尾布局等
multiTypeAdapter框架實現(xiàn)原理圖,將每個可復用的Item都抽象為一個ViewModel的實例
Presenter:
1.Presenter層 負責頁面數(shù)據(jù)的轉換,從Tables里拿到配置好的列表數(shù)據(jù),通過ItemTransformationFactory將數(shù)據(jù)轉化為頁面需要ViewData,添加到multiTypeAdapter中。
2.ItemValidate 負責認證每一項數(shù)據(jù)的合法性
3.ItemTableType 負責不同的Item項,如: 只顯示文本的樣式,顯示文本加輸入框的的樣式,支持拓展新樣式
4.ItemTableBean 負責一項Item的基本屬性,key、keyName、itemUUID、ItemTableType等屬性
5.ItemTableList 最終由ItemTransformationFactory轉換成multiTypeAdapter需要的頁面數(shù)據(jù)類型。
6.需要展示默認信息的頁面:需要一層Map映射,Map的key就對應ItemTableBean中的key
7.在Presenter中創(chuàng)建一個新的map,傳入到ItemTransformationFactory的方法中可以自動將EditText,Select的數(shù)據(jù)自動映射到這個map中,在網(wǎng)絡提交的時候直接作為參數(shù)即可。
Model:
架構圖中沒有該層的展示,保持原有項目結構即可。
Demo
demo代碼地址:github.com/Papeone/Table