Android中如何使用DataBinding构建MVVM框架?

什么是DataBinding?

2015 Google IO大会带来的DataBinding库使得Android开发者可以方便的实现MVVM架构模式.使用DataBinding可以改善应用程序的开发,使代码更加干净优雅. DataBinding的使用教程在网上已经很多了,我在这里只是简单提一下最基本的用法,大家体验一下就好.如果想更深入学习的话,建议查看谷歌官方文档:https://developer.android.com/topic/libraries/data-binding/index.html

第一步. DataBinding环境配置

1.由于新版Android Studio已经内置了DataBinding的功能,为了方便开发,请确保使用AndroidStudio 1.3及以上的版本.

2.在app的build.gradle文件中添加下面的内容:

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

3.重新编译项目,配置完成.

第二步.在布局文件中使用DataBinding

根标签使用layout,在layout标签下用data标签来配置数据,例子如下:

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variable name="user" type="cn.itcast.mvvmdemo.User"/></data><LinearLayoutandroid:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstname}"/><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.lastname}"/></LinearLayout></layout>

重点:

<variable name="user" type="cn.itcast.mvvmdemo.User"/>

这句话代表,声明了一个user变量,类型是cn.itcast.mvvmdemo.User,当然这个User要提前定义.

第三步.创建 Model层 Bean对象

public class User {private String firstname;private String lastname;public User(String firstname, Stringlastname) {this.firstname = firstname;this.lastname = lastname;}public String getFirstname() {return firstname;}public void setFirstname(Stringfirstname) {this.firstname = firstname;}public String getLastname() {return lastname;}public void setLastname(Stringlastname) {this.lastname = lastname;}}

重点:

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstname}"/>

控件布局写法和以前一样,唯一不同之处在于控件内容的赋值部分.以前我们都会写一个默认值,然后再在代码中动态修改控件的值.此时已经不需要了. @{user.firstname}代表当前TextView的值取自于user对象中的firstname字段.

第四步.在View层Activity中代码如下

public class MainActivity extends AppCompatActivity {private User user;@Overrideprotected void onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding =DataBindingUtil.setContentView(this, R.layout.activity_main);user = new User("尼古拉斯凯奇", "赵四");binding.setUser(user);}}
  • ActivityMainBinding是DataBinding自动根据布局文件生成的类,不需要手动创建.该类的命名方式取自于布局文件的名称.比如布局文件名叫activity_main,那么生成的类名就叫ActivityMainBinding. 当使用DataBinding时,需要用DataBindingUtil来设置Activity的布局.
  • binding.setUser(user);表示将user对象和布局文件绑定在了一起, user对象的所有属性值都可以同步映射到布局文件的控件中.

第四步.运行看效果

你会发现,我们没有像往常那样在activity中findViewById,找到控件后给动态赋值,而是通过DataBinding的方式直接将对象的值作用在了布局文件中,从而使我们的代码更加优雅和简洁.