前言
最近找到实习,接手的工作也是公司现有的项目,里面用到了不少自己以前没涉及的SDK和设计模式
于此做下笔记分享经验
DateBingding简介
DataBinding是一个support library,所以它可以支持所有的android sdk,最低可以到android2.1(API7)。
使用DataBinding需要Android Gradle插件的支持,版本至少在1.5以上,需要的Android studio的版本在1.3以上。
首先我们要检查下是否安装了support library
Tool-> SDK Manager -> SDK Tools
没有就安装一下,之后我们在module级别的build.gradle上进行配置
android {
....
dataBinding {
enabled = true
}
}
开始使用
使用DataBinding的layout files和普通的非DataBinding布局文件是有一些区别的
使用了DataBinding 的layout
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.zain.databindingdemo.User" />
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
很容易发现,使用Databinding是通过<layout>来嵌套我们的布局的
而变量user作为被绑定的数据,在layout文件中是这样描述和使用的:
<data>
<variable name="user" type="com.example.zain.databindingdemo.User"/>
</data>
layout中view的属性值通过"@{}"这样的语法表达方式和数据user实现绑定
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
定义数据绑定的Data对象
定义一个bean类,如:
package com.example.zain.databindingdemo;
public class User {
private String firstName;
private String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
绑定数据
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
User user = new User("Zhuang","Zain");
binding.setUser(user);
}
}
很容易发现用法也有一些变化
首先是
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
这个相当于
setContentView(R.layout.activity_main);
用来实现了layout与Activity的绑定
而且使用了DataBinding后就不用findViewById()来一个个绑定了
代码简介度up
效果:
这就是DataBinding最简单的应用了
可能遇到的问题
找不到ActivityMainBinding
首先要知道一点,对应Activity 的Binding 是自动生成的
其命名规范为对应的layout 名字从下划线改成驼峰式再加上Binding
如MainActivity 对应的 layout 名字为 activity_main.xml
那么自动生成的 Bingding 命名为 ActivityMainBinding
如果没找到,请rebulid project
一次不行那就多来几次
网友评论