MVVM(封装三)

接上篇,data binding 的接入,在某种意义上,使 xml 布局文件从 V 层(Activity)独立出来。V 层不再与 xml 交互 (findViewById,  xxx.setText(), xxx.setEnable) 。而只需关注与 xml 绑定的 vm 里的数据。下图是接入 data binding 后 MVP 的时序图。

data binding 支持在 xml 布局文件里绑定各种事件。比如某点击事件绑定 Presenter 的方法。如此一来,VM 要持有 Presenter对象。而且,实际项目里,点击事件并不是简单的触发一个方法。还包括了千奇百怪的业务需求。为了保持 VM 的整洁性。事件的绑定还是在 V 层,而不是通过 xml 布局文件。

上图可看出:

1,vm 仅包含与 xml 布局文件互相绑定的 LiveData 或 BaseObervable,V 层通过更新 vm的数据来更新界面。

2,Activity, ViewHolder(个人理解), View 都归 V层。xml虽然也是,但如上文说的,已相当独立。

3,控件的各种事件通过 V 层持有的 binding 对象绑定相关事件。如上篇文章说的。

4,双向绑定的实现是通过  根据xml布局文件自动生成的 binding类,将ViewModel 赋值到 xml 定义的data属性里。避免重复代码。这里根据上图定义 V 层不同类型的基类  Activity -----> BaseVmActivity,View -----> BaseBindingView。 ViewHolder 比较特殊。绑定操作是在Adapter,后续单独出来聊聊。

BaseVmActivity, BaseBindingView 思路是一样的,都是通过反射实现。在 《MVVM》 里已经介绍过。这里就简单的贴下代码。

BaseVmActivity:

BaseBindingView :

你可能感兴趣的:(MVVM(封装三))