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层:
除了以上这种还可以给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方法
浙公网安备 33010602011771号