android Data Binding讲解一

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)}"/>


   下一章会讲解更复杂的用法。




猜你喜欢

转载自blog.csdn.net/wode_dream/article/details/53886480