mvc,mvp,mvvm 框架对比以及mvvm数据绑定方法使用

 

MVC

model:实体类

view:xml布局文件

controller :对应的Acitivity ,处理数据业务和逻辑业务

 

MVP

model:实体类

view:xml布局文件和Activity,负责view的绘制和用于交互,数据业务和

present:完成view与model间的加护,处理逻辑业务

 

MVVM(数据与ui双向绑定)

model:实体类

view:xml布局文件和Activity,负责view的绘制和用于交互

ViewModel:负责完成view和Model间的交互,处理数据业务和逻辑业务

 

下面来张图

 

 

 

 

END________________

MVVM除了ViewDataBinding 还有LiveData。这里我们介绍ViewDataBinding

 

ViewDataBinding用法:

首先:

 

 

接下来我们说下xml

最外层用<layout>标签,<data>数据,<variable>变量也就是我们的VM层,且自动生成Binding对象。比如activity_main,会生成ActivityMainBinding,写好即可生成不用clean和build,生成规则是xml名字去掉下划线

在View或者layout可访问<variable>标签对象的变量,方法

 

在Activity ,获取对应的ViewDataBinding,并将xml中的对象绑定

binding = DataBindingUtil.setContentView(this, layoutId);(自定生成)
binding.setModel(model) 或者 bindding.setVariable(varibableId(自动生成),model)

现在我们来说一说VM层:

ViewModel:专注和业务逻辑和业务数据相关的事,UI相关的事情OUT,也不要持有任何控件的引用,更不会在ViewModel中通过UI控件的引用去做更新UI的事情。但是ViewModel可能会改变数据,由于数据和UI已经绑定到一起了,所以相应的控件上会自动去更新UI。
 
 但是要想真正实现双向绑定,我们就要用到在VM层 用到一下
ObservableFiled  ,  ObservableBoolean  ,  ObservableByte  ,  ObservableChar,
ObservableShort  ,  ObservableInt  ,  ObservableLong  ,  ObservableFloat,
ObservableDouble  ,  ObservableParcelable  ,  ObservableArrayMap  ,  ObservableArrayList
ObservableFiled  ,  ObservableBoolean  ,  ObservableByte  ,  ObservableChar,
 
例如下: 

除了以上这种还可以给ObservableBoolean(以及其他)添加监听,

viewModel.uc.isFinishRefreshing.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable observable, int i) {
//结束刷新
binding.twinklingRefreshLayout.finishRefreshing();
}
});

 

 

在xml中定义新的属性

1.需要在Widget根节点上增加 

xmlns:binding="http://schemas.android.com/apk/res-auto"

2.在model层,用到注解 @BindingAdapter

 

2.运用

bind:showLoading="@{vm.showLoading}"

bind:message="@{vm.message}"

这里有2个参数,任一 一个变化,都会调用ShowLoading方法

 

posted @ 2018-08-21 16:51  学海无涯++  阅读(408)  评论(0)    收藏  举报