简介
为了简化开发,减少相同模块的复制粘贴,提高开发效率,现将一些常用的控件统一封装处理,原则上使用mvp架构,抽象出presenter层并对view层保持弱引用关系,后期support 更新至26.1.0 方可切换为官方的生命周期监听方案。
MVP整体架构图
常规的MVP架构图,就不多做解释,下面说下View与Presenter的两个不同策略方案
support 26.1.0版本以上方案
该方案是在高版本中,官方已经将AppCompatActivity实现了生命周期监听
具体说明请看:
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时导致的内存泄漏问题
目标实现
页面动态配置,结果自动映射到Map,高可配,高复用,低耦合
页面效果展示如下:
代码配置:
这里展示一部分
代码加载展示:
整体架构方案
Activity:
1.Activity作为View层 只负责UI的展示,toolbar、recyclerView、multiTypeAdapter、bottomView四个常用部分组成
2.multiTypeAdapter是封装好的框架,是个自定义的Adatper,该框架旨在项目中,免去写Adapter的麻烦。支持自动排序(默认正序),拖拽,左右滑动删除等功能,还有加载更多,空布局展示,头尾布局等
multiTypeAdapter框架实现原理图,将每个可复用的Item都抽象为一个ViewModel的实例
Presenter:
1.Presenter层 负责页面数据的转换,从Tables里拿到配置好的列表数据,通过ItemTransformationFactory将数据转化为页面需要ViewData,添加到multiTypeAdapter中。
2.ItemValidate 负责认证每一项数据的合法性
3.ItemTableType 负责不同的Item项,如: 只显示文本的样式,显示文本加输入框的的样式,支持拓展新样式
4.ItemTableBean 负责一项Item的基本属性,key、keyName、itemUUID、ItemTableType等属性
5.ItemTableList 最终由ItemTransformationFactory转换成multiTypeAdapter需要的页面数据类型。
6.需要展示默认信息的页面:需要一层Map映射,Map的key就对应ItemTableBean中的key
7.在Presenter中创建一个新的map,传入到ItemTransformationFactory的方法中可以自动将EditText,Select的数据自动映射到这个map中,在网络提交的时候直接作为参数即可。
Model:
架构图中没有该层的展示,保持原有项目结构即可。
Demo
demo代码地址:github.com/Papeone/Table