版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wode_dream/article/details/53886480
基本概述:Data Binding的主要功能是把数据跟UI页面绑定。跟它类似的工具包像ButterKnife。
它是一个支持包,所以你可以用于任何Android2.1以上的版本;
优点:1、提高开发效率;2、性能提升;3、保证执行在主线程。
性能提升:findViewById需要遍历整个viewgroup,Dataing Binding只需要一次查找。
下面我们分步骤来讲解它的用法:
共有5个步骤
一、建立环境;
二、在代码中建立相关的数据对象;
三、数据绑定布局文件;
四、在代码中绑定数据对象;
五、为UI添加事件
一、建立环境
在app module 中的build.gradle里添加
android {
......
dataBinding{
enabled=true
}
}
二、在代码中建立相关的数据对象
public class User {
private String name;
private int age;
public User(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
三、数据绑定布局文件
注意,如果要往TextView中加入int类型,要转化为字符串(android:text='@{user.age+""}')。
<?xml version="1.0"encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.zfeng.databinding.User"/>
</data>
<LinearLayout
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
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='@{user.age+""}'/>
</LinearLayout>
</layout>
四、在代码中绑定数据对象
ActivityMainBinding对象是根据布局文件生成的,这个对象在编译时会生成。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
User user=new User("ZhaoFeng",28);
binding.setUser(user);
}
现在代码就可以运行了。
五、为UI添加事件
分为两种方式:1、方法引用;2、监听绑定。
方法引用是在数据绑定的时候实现的,而监听绑定是在时间被触发的时候。下面用两种方式分别实现。
1、普通事件(方法引用方式)
代码文件:
public class MainPresenter {
private Context context;
public MainPresenter(Context context){
this.context=context;
}
public void clickTv(View view){
Toast.makeText(context,"abcdefg",Toast.LENGTH_SHORT).show();
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
MainPresenter presenter=new MainPresenter(this);
User user=new User("ZhaoFeng",28);
binding.setUser(user);
binding.setPresenter(presenter);
}
布局文件:
<variable
name="presenter"
type="com.zfeng.databinding.MainPresenter"/>
有可能会报错,但不影响程序运行
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
android:onClick="@{presenter::clickTv}"/>
2、带传入参数的事件(监听绑定)
1、代码文件
public void clickWithText(User user){
Toast.makeText(context,user.getName()==null?"":user.getName(),Toast.LENGTH_SHORT).show();
}
2、布局文件
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:text='@{user.age+""}'
android:onClick="@{()->presenter.clickWithText(user)}"/>
下一章会讲解更复杂的用法。