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 数据也随之变化。如下图。
图6databinding,顾名思义,指的是 layout 与 数据类进行双向绑定。
假如不使用任何 api 的话,要怎么实现双向绑定 ?Observable && Observer ?
为了方便开发,Android 平台提供了数据类 ViewModel。并在 ViewModel 的基础下通过 LiveData,BaseObservable 等可以被观察的数据类型实现绑定。其实也就是 Observable && Observer 。
如下图,定义MainVM 继承 ViewModel,用于管理可被观察的数据。
图7content,用于存储EditText 输入的值,同时也是 TextView展示的值。
定义完之后,就可以在 activity_main.xml 里使用这个 ViewModel 了。
1,新增 <layout> 标签包含之前的所有内容。
2,新增<data> 标签声明 vm为MainVM类型。
3,通过@{} @={}操作符 设置 TextView, EditText 的 android:text 属性。 其中 @{} 表示只读,@={} 表示读写(即双向绑定)
图8编译运行,正常启动,然而功能并没有实现。因为这里还差了最关键的一步。
绑定 ViewModel 与 Layout。
1,通过DataBindingUtil.setContentView 获取 ActivityMainBinding 类 (凡是带有 <layout> 标签的xml,都会根据其名字自动生成)。该类继承于 ViewDataBinding。可以通过binding类获取 xml 的控件(前提是已设置控件id),以及设置 ViewModel。
2,对 ActivityMainBinding 类的 vm 属性设值。该属性名是由 xml 里的 <data>标签声明定义的。
图9编译,运行,一切正常,功能完美。该例子代码:mvvm