MVVM 教程(一)

作者: 进击的杰爷 | 来源:发表于2018-08-16 17:31 被阅读161次

    本系列将介绍 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,新增 <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

    相关文章

      网友评论

        本文标题:MVVM 教程(一)

        本文链接:https://www.haomeiwen.com/subject/qfunbftx.html