DataBinding基础使用(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wei11556/article/details/83784107

介绍

DataBinding,2015年IO大会介绍的一个框架,是Google对MVVM在Android上的一种实现,可以直接数据绑定到xml中,并实现自动刷新。

好处:

去掉了大部分的UI相关代码(比如findViewById、 setOnClickListener、setText等)

xml变成UI的唯一真实来源,数据绑定也直接发生在xml

配置

首先在配置gradle文件

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

使用

布局代码

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <import type="com.lisn.mywanandroid.Bean.DataBindingBean" />
        <variable
            name="dataBean"
            type="DataBindingBean" />
        <variable
            name="listener"
            type="com.lisn.mywanandroid.Ui.Activity.DataBindingActivity.TestClickListener"/>
    </data>

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp"
        tools:context=".Ui.Activity.DataBindingActivity">

        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{dataBean.x2c}"
            android:onClick="@{()->listener.onClickListenerBinding()}"
            tools:text="@tools:sample/date/hhmm" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{dataBean.xml}"
            android:onClick="@{()->listener.onClickListenerBinding()}"
            app:layout_constraintTop_toBottomOf="@id/tv1"
            tools:text="@tools:sample/date/hhmm" />

    </android.support.constraint.ConstraintLayout>
</layout>

使用代码

public class DataBindingActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ViewDataBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_data_binding);
        DataBindingBean bean = new DataBindingBean();
        viewDataBinding.setVariable(BR.dataBean, bean);
        bean.setX2c("屌爆了");

        TestClickListener clickListener = new TestClickListener();
        viewDataBinding.setVariable(BR.listener, clickListener);
    }

    public static void startActivity(Activity activity) {
        activity.startActivity(new Intent(activity,DataBindingActivity.class));
    }

    public class TestClickListener{
        public void onClickListenerBinding(){
            Toast.makeText(DataBindingActivity.this, "BindingClick", Toast.LENGTH_SHORT).show();
        }
    }
}

bean对象

public class DataBindingBean {
    public String x2c = "X2C";

    public String xml = "XML";

    public void setX2c(String x2c) {
        this.x2c = x2c;
    }

    public void setXml(String xml) {
        this.xml = xml;
    }
}

先看xml的变化,最外层的多出了一个layout标签,然后在layout标签中,还多了一个data标签,在TextView中调用了variable 对应的name的对象的属性和方法。

然后看java代码,setContentView被替换成了DataBindingUtil.setContentView,并且返回了一个ViewDataBinding对象,在这个对象中我们调用了setVariable()来对 xml定义的user和listener进行赋值。

看完代码,我们基本上就了解了最基础的知识:

1、使用DataBinding,要在原来的xml最外层嵌套标签。

2、标签中可以定义这个xml到底绑定了哪些东西。其中定义的肯定是个对象类,name是引用的名字,type对应的具体的类的完成包名+类名。

3、在xml中的view使用定义的类中,语法最外层是 @{},如果调用的属性@{ name.filed}, 如果是方法 @{ () -> name.function()}

4、需要替换setContentView,变为DataBindingUtil.setContentView(),来获得能够操作xml中定义的各种内容。

5、在xml中定义的name对象,会生成类似于R文件的BR文件,通过BR.name 就可以找到对应的绑定内容。
 

猜你喜欢

转载自blog.csdn.net/wei11556/article/details/83784107