MVVM 由下面三层组成:

  • View:视图,即Activity/Fragment。主要进行视图控件的一些初始设置,不应该有任何的数据逻辑操作。
  • Model:模型层,即数据模型,用于获取和存储数据。定义实体类,以及获取业务数据模型,比如通过数据库或者网络来操作数据等。
  • ViewModel:视图模型,负责业务逻辑。作为连接 View 与 Model 的中间桥梁,ViewModel 与 Model 直接交互,处理完业务逻辑后,通过 DataBinding 将数据变化反应到用户界面上。

在这里插入图片描述

DataBinding 与 MVVM 之间的关系:

MVVM 是一种思想,一种架构模式,而 DataBinding 是谷歌推出的方便实现 MVVM 的工具。

DataBinding,一个实现视图和数据双向绑定的工具。使用 DataBinding 库以后,可以使用声明式布局文件来减少粘结业务逻辑和布局文件的胶水代码,有利于开发者更方便地实现 MVVM 模式。

双向绑定:
在这里插入图片描述

使用:

环境配置

在 Module:app 的 build.gradle 文件添加如下代码:

android {
    // ...
    dataBinding {
        enabled = true
    }
}

使用方法

使用 DataBinding 的布局文件和普通的布局文件有点不同,DataBinding 布局文件的根标签是 layout 标签,layout 里面有一个 data 元素和 View 元素,这个 View 元素就是我们没使用DataBinding时候的布局文件。例子代码如下:

 <layout xmlns:android="http://schemas.android.com/apk/res/android">  
  
    <data>  
        <variable  
            name="user"  
            type="com.example.mvvmdemo.UserBean"/>  
    </data>  
  
    <LinearLayout  
        android:orientation="vertical" android:layout_width="match_parent"  
        android:layout_height="match_parent">  
        <TextView  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:text="@{user.name}"/>  
        <TextView  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:text="@{user.sex}"/>  
    </LinearLayout>

</layout>

data 元素里面的 user 就是我们自定义的 user 实体类,当我们向 DataBinding 中设置好 user 类以后,我们的两个 TextView 会自动设置 text 的值。

UserBean实体类代码如下:

public class UserBean {  
  
    public ObservableField<String> name = new ObservableField<>();  
    public ObservableField<String> sex = new ObservableField<>();  
 
    public UserBean(){  
        name.set("王小明");  
        sex.set("男");  
    }  
}

这个实体类的元素是 DataBinding 中的 ObservableField 类,ObservableField 的作用是,当我们实体类中的值发生改变时,会自动通知View刷新。所以使用 DataBinding 的时候,建议使用 ObservableField 来定义实体类。

之后,我们只需要在 Activity 中绑定 layout 就可以了。下面是使用代码:

ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);  
UserBean user = new UserBean();  
activityMainBinding.setUser(user);

在使用 DataBinding 的时候,我们设置布局使用 DataBindingUtil 工具类中的 setContentView() 方法。设置好了 user 后,layout 中的 TextView便显示为"王小明"和"男"。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐