DataBinding 使用教程 一

来源:互联网 发布:统计建模与r软件 编辑:程序博客网 时间:2024/06/07 11:43

databinding 是一个实现数据和数据和UI绑定的框架,是一个实现MVVM模式的工具

优点:避免findViewById setText setVisiable等操作控件的方法,可以直接在布局文件中声明和处理逻辑

缺点:太过依赖model,不成熟,api 变更大,没有得到很好的发展(从2015年7月引入,一年多了,没见得有好红火)

第一步 环境搭建



然后gradle同步一下,你会发现多出来几个架包依赖



mvvm 是Model-View-ViewModel的简写,也需要依赖模型,我们先构建一个model
package com.xuan.asange.databindingdemo;/** * Description * Company * author  youxuan  E-mail:xuanyouwu@163.com * date createTime:16/12/14 * version */public class User {    private String name;    private int age;    public User(String name, int age) {        this.name = name;        this.age = age;    }    public User() {    }}

databiding的实质是让数据填充处理在布局文件中
我们需要构建一个在布局文件中的全局变量
声明方式
<data>
  <variable  name="变量名"  type="变量类型"/>
</data>
如:
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android">    <data>        <variable            name="user"            type="com.xuan.asange.databindingdemo.User" />    </data>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@{user.name}" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@{String.valueOf(user.age)}" />    </LinearLayout></layout>

绑定数据
package com.xuan.asange.databindingdemo;import android.databinding.DataBindingUtil;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.xuan.asange.databindingdemo.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_main);        ActivityMainBinding binding = DataBindingUtil.setContentView(                this, R.layout.activity_main);        User user = new User("阿三哥", 27);        binding.setUser(user);    }}

运行结果:





0 0