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
配置:
环境要求:
- 系统版本:Android 2.1(API level 7)及以上
- Gradle版本:1.5.0-alpha1及以上
- 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的基本用法,当然还有其它很多的高级用法,更新中...
原文地址:https://www.cnblogs.com/zhangqie/p/9329350.html