android -------- Data Binding的使用(一)

Google推出自己官方的数据绑定框架Data Binding Library 已经很久了,很多企业也在使用

面试的时候也有问到,所以也去学习了一番,特来分享一下,希望对各位有所帮助

 

描述:

Data Binding 是把数据直接绑定到 XML 文件上,并能实现自动刷新。

Data Binding 减少了代码的耦合性,一些如 findViewById、setText 之类的操作都可以通过绑定实现。

Data Binding 是MVVM模式开发的

 

Google 官方文档:https://developer.android.google.cn/reference/android/databinding/package-summary

 

配置:

环境要求:

  1. 系统版本:Android 2.1(API level 7)及以上

  2. Gradle版本:1.5.0-alpha1及以上

  3. Android Studio版本:1.3及以上

 

在app根目录的build.gradle文件中加入Data Binding配置:

android {
compileSdkVersion 22
buildToolsVersion "27.0.3"

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

 

简单的一个案例 :布局中绑定数据

先写一个实体类

public class Employee {

    public Employee(String frstName,String lastName){
        this.frstName = frstName;
        this.lastName = lastName;
    }

    private String frstName;

    private String lastName;

    public String getFrstName() {
        return frstName;
    }

    public void setFrstName(String frstName) {
        this.frstName = frstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

 

布局文件 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:bind="http://schemas.android.com/apk/res-auto">
    
    <data>
        <variable
            name="employee"
            type="com.zhangqie.databinding.demo1.Employee"/><!-- 实体类的地址 -->
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

        <TextView
            android:id="@+id/tv_name1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <TextView
            android:id="@+id/tv_name2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{employee.frstName}"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{employee.lastName}"
            />
    </LinearLayout>
</layout>

 

由上面可看出

我们在最外层再套一层 标签layout,里面包含了 data标签和LinearLayout标签

data 标签下面的 variable 定义数据绑定用的实体类

type 里面是完整的带包名的类,
name 自定义一个名称,下面具体绑定的时候就是用的这个名称。

layout标签的定义会默认生成一个数据绑定类 (类名根据文件的名称来生成)

 

编译一下我就会生成了一个 ActivityMainBinding的类了

 

之后MainActivity中

 

public class MainActivity extends AppCompatActivity {

    Employee employee = new Employee("切切歆语","小张");


    ActivityMainBinding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_main);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        //直接访问Id 设置属性
        binding.tvName1.setText("小张");
        binding.tvName2.setText("歆语");

        //传对象绑定数据
        //两种方式一样
        binding.setEmployee(employee);
        //binding.setVariable(com.zhangqie.databinding.BR.employee,employee);

    }
}

 

这样看起来是不是方便了很多呢

 

运行效果:

              

 

特点:

MVVM 的实现

提高开发效率

性能高 ,功能强

 

上面是Data Binding的基本用法,当然还有其它很多的高级用法,更新中...

 

posted @ 2018-07-18 15:21  切切歆语  阅读(347)  评论(0编辑  收藏  举报