MVVM 教程(一)

本系列将介绍 MVVM 完整的开发实例。

1,创建项目(AndroidStudio 3.2 beta 5)

gradle 4.6

com.android.tools.build:gradle:3.2.0-beta05

勾选 kotlin 语言支持。

图2
图3
图4

这里需要勾选 AppCompat。 ( AppCompatActivity 实现 LifecycleOwner 接口。)

点击完成,生成项目。

在开始配置 databinding 之前运行下,正常运行,没毛病。

2,配置 databinding

修改app模块的 build.gradle 文件,开启 databinding,如下图红框所示。

图5

这里需注意下,compileSdkVersion & targetSdkVersion 必须大于等于 27

3,databinding 实践

为了更加直观的感受数据与layout的双向绑定效果,在activity_main.xml 新增 EditTexdt 文本编辑框,实现当 EditText 数据变化时,TextView 数据也随之变化。如下图。

图6

databinding,顾名思义,指的是 layout 与 数据类进行双向绑定。 

假如不使用任何 api 的话,要怎么实现双向绑定 ?Observable && Observer ?

为了方便开发,Android 平台提供了数据类 ViewModel。并在 ViewModel 的基础下通过 LiveData,BaseObservable 等可以被观察的数据类型实现绑定。其实也就是 Observable && Observer 。

如下图,定义MainVM 继承 ViewModel,用于管理可被观察的数据。

图7

content,用于存储EditText 输入的值,同时也是 TextView展示的值。

定义完之后,就可以在 activity_main.xml 里使用这个 ViewModel 了。

1,新增 标签包含之前的所有内容。

2,新增 标签声明  vm为MainVM类型。

3,通过@{}  @={}操作符 设置 TextView, EditText 的 android:text 属性。  其中 @{} 表示只读,@={} 表示读写(即双向绑定)

图8

编译运行,正常启动,然而功能并没有实现。因为这里还差了最关键的一步。

绑定 ViewModel 与 Layout。

1,通过DataBindingUtil.setContentView 获取 ActivityMainBinding 类 (凡是带有 标签的xml,都会根据其名字自动生成)。该类继承于 ViewDataBinding。可以通过binding类获取 xml 的控件(前提是已设置控件id),以及设置 ViewModel。

2,对 ActivityMainBinding 类的 vm 属性设值。该属性名是由 xml 里的 标签声明定义的。

图9

编译,运行,一切正常,功能完美。该例子代码:mvvm

你可能感兴趣的:(MVVM 教程(一))