MVVM设计模式在Android编程中的应用
大家好,这一期呢,我们来看一下mvvm的设计模式。
Mvvm的意思是model, view, viewmodel。
Model. 这一部分控制的是应用的数据部分,它不能够直接的跟视图进行交互。通常的说,会把自己的数据接口暴露给view model, 下文中的例子中涉及到的数据有用户名,密码,是否点击按钮等等。
View. 这一部分主要是应用中的可视部分,它来观察viewmodel的上的变化。
View model. 它是model和view的桥梁。
它跟mvp相比,有哪些特点呢?
view model这一层替换掉了presenter这个中间层。
Presenter会有一个view的引用,但是viewmodel没有。
Presenter通过传统的方式,用激活事件的方法来更新视图。
view model会发送数据流。
Presenter和view是1对1的关系。
而view和view model是一对多的关系。
view model不知道view在聆听。
在安卓编程中有两种方式实现mvvm。
一种是data binding即数据绑定。
另一种是RxJava。
这个例子中我们还会沿用前面用的那个程序需求, 就是登录以后,显示一个消息。在这其中,我们来展示view model在没有view引用的情况下,如何做到这一步的。
这里有个问题,有没有可能在没有引用的情况下通知某些类呢?
有,在安卓中有三种方式: 双向数据绑定, 实时动态数据,使用Rx Java。
我们来看一下,双向数据绑定是怎么做到的。双向数据绑定的意思是说,在视图中发生的任何改变会传递到数据模型当中,同样的,数据模型的任何改变也会反映到视图上面。
在我们的例子中view model跟view之间的关联就是双向的。
我们需要binding adapter和xml定制的属性。
首先,要在build.gradle文件中添加如下设置:
然后是定义ViewModel:
在XML中绑定View和ViewModel:
View中使用DataBinding,定义BindAdapters:
在上面例子中,由于需要显示用户名和密码输入错误,所以在按钮点击触发中处理比较合适。并没有聆听用户名和密码的输入。
假设在未来有一个文本框,文本框的数据需要动态更新的话,就可以使用另一个BindAdapter聆听数据改变,然后显示在视图当中。
MVVM的好处是双向的数据绑定,不需要传送View给ViewModel。
不好的地方是流程的熟悉需要较长的过程,并不容易上手。
保持联系,请点击关注。