前言
上一篇我们讲了如何快速的写一个MVP去过面试关,未曾想有朋友说能否再来一个MVVM。
那贫僧就紧接着再来一发吧!
拆分
Model-View-ViewModel
- Model
负责数据 - View
负责展示 - ViewModel
负责将View和Model关联起来,起到一个中介的作用
废话不多说,既然速成,代码走起
我们这里依然遵从MVP速成的思维方式。使用MVP的抽象情景,不过为了更加突出ViewModel的存在意义,我们需要通过view的展示情况来反应出ViewModel的作用
那么好,情景是这样的,按钮上显示user的age,用户点击按钮,user的age+1,并且显示在按钮上。
- View层
activity_main.layout
3步:
* 用一个layout标签包裹原先的布局,并将原先根标签的署名挪到layout标签
* 在layout标签内添加data标签,并包裹variable标签,属性名name表示布局文件中使用的名字,type表示类地址
* 在需要数据的地方使用`@{class.property}`的方式来注明使用的具体数据。
* Model层
public class User {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
* ViewModel层
由activity来充当
public class MvvmActivity extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//系统会根据你的layout文件名生成相应的Binding文件,比如说使用的activity_main,那么就生成ActivityMainBinding文件
//DataBindingUtil是系统提供的bind工具
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
final User user = new User();
user.setAge(18);
findViewById(R.id.bt_hello).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int age = user.getAge();
user.setAge(age++);
}
});
}
}
其实到以上为止已经速成完毕
MVVM略微比MVP简单一点,主要就是databinding这个东西,只要在布局文件中处理好了,并掌握系统为我们生成的bind工具的使用方法速成就没有什么问题了。
由于是代码速成,故而把一些环境的依赖放在这里:
project的build.gradle文件
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath "com.android.databinding:dataBinder:1.0-rc4"
}
module的build.gradle文件
apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
如何快速的写一个MVP出来