DataBinding简单使用入门

一世执手 提交于 2020-03-03 05:05:20

DataBinding是什么

DataBindingGoogle 推出的一个数据绑定的支持库,它可以将数据和UI进行绑定,能够让UI随着数据变化而变化,也可以让数据随着UI变化而变化,无需再写代码去更新UI或数据

它解决了两个问题:

1.麻烦的findViewById()

2.更新UI数据需切换至UI线程

MVVM架构(Model–View–ViewModel)

View有用户输入后,ViewModel通知Model更新数据,同理Model数据更新后,ViewModel通知View更新,DataBinding直接就实现了这种架构,相当于我们只写ViewModel并绑定,ViewModel会由DataBinding自己实现
 

DataBinding的使用准备

Android Studio版本在1.3以上

gradle版本在1.5.0-alpha1以上

在app的build.gradle中添加(标红部分):

android {

  ....

  dataBinding {

      enabled =true

  }

}

DataBinding的使用(只写了关键代码)

布局文件:例如login.xml

布局文件结构如下,最外层必须为layout标签,data标签相当于java文件,比如import关键字和java文件里意思一样,导包。variable标签相当于定义变量,name为变量名,type为变量类型 等等。

下面在布局里引用声明对象时格式如android:text="@={account.userName}",就可以把text的属性值和userName双向绑定,一个变化,另一个就会变化,要实现双向绑定,userName的属性不能为普通的string类型,单向绑定可以为普通类型,后面会说到属性的类型。

<layout  xmlns:android=http://schemas.android.com/apk/res/android>

  <data>

  <import  type=“android.view.View”/>  <!-- 导入数据类型 -->

  <variable    <!– 声明对象-->

            name="account"

            type="com.byd.databindingdemo.model.Account" />

  </data>

 

  <LinearLayout>

   <EditText

    android:text="@={account.userName}"/>

  </LinearLayout>

</layout>

数据类: 例如Account.java

如果只需要单向绑定,即UI随着数据改变,普通类型也行,如果要实现双向绑定就必须使用如ObservableInt、ObservableField<String>等类型,Androidstudio会有提示,根据需要选择。get()方法必须要注意方法名,最好利用Android studio自己生成,否则容易出错。set()方法随意。例如:

public class Account {

  private ObservableField<String> userName = new ObservableField<>();

  //private String userName;

  //get()set()方法

}

Activity:例如 Login.java

Activity类和布局绑定如下,binding对象可以直接根据控件id使用控件,省去了findviewbyId的烦恼,布局里的account对象通过binding.setAccount(account)赋值,赋值之后就可以通过改变Activity类里的account的值直接改变UI了,无需再写代码去更新控件,方便靠谱省时间,例如:

public class Login extends Activity {

  protected void onCreate(Bundle savedInstanceState){

    //绑定布局, LoginBinding对象命名是布局+Binding,去掉下划线,单词首字母大写,Androidstudio会有提示

    private LoginBinding binding = DataBindingUtil.setContentView(this, R.layout.login);

    Account account = new Account(); 

    binding. setAccount(account)//设置布局中account对象的值

    account.setUserName(“小明”);

  }

}

至于DataBinding的原理不难理解,编译后可以在build文件夹下寻找发现LoginBindingImpl文件,点开之后就可以看到自动生成的各控件的观察者,即MVVM里的view-model部分,如下是一个DataBinding的简单demo,便于初学者研究学习:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!