DataBinding

DataBinding参考地址:http://blog.csdn.net/qq285016127/article/details/54835731

什么是DataBinding,我们直接上例子吧:

  • 我们在Activity中如果想要获取布局的所有控件,需要一个个控件通过findVIewById() ,但是使用DataBinding就不需要这么麻烦了,我们可以把布局中的所有控件绑定到DataBinding的子类中,想要获取布局中的哪一个控件,只需要直接通过DataBinding的子类就可以获取到了.

使用DataBinding前的准备工作:

  • Android是默认支持DataBinding的,所以只需要在App下的build.gradle文件里面的android标签里配置就可以了

dataBinding{
    enabled true;
}

DataBinding的简单使用:

  • 布局文件的根标签需要添加一个layout属性,里面只能有一个子控件!!!

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

    <LinearLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/but"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="修改"/>

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"/>
    </LinearLayout>
</layout>
  • 逻辑代码中获取获取布局的控件:
    • DataBindingUtil: 是DataBinding的一个工具类
    • DataBindingUtil.setContentView(this, R.layout.activity_main): 可以把一个布局转换成一个标签对象
    • 参数1: 需要一个Activity
    • 参数2: 需要转换的布局文件
    • setContentView: 默认返回的是一个ViewDataBinding对象,这里回返回一个ActivityMainBinding是因为只要我们的布局文件名字发生变化,那么该对象也会跟着变化
    • 我们的所有控件就封装在ActivityMainBinding类中,只要通过该类的对象.控件id就可以了

        final ActivityMainBinding mainBinding;
        mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        mainBinding.but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainBinding.tv.setText("我是天才!!!");
            }
        });

DataBinding例子2:

  • 布局文件
    • data标签: 相当于声明数据模块,该模块包含导包 声明变量/对象。
    • name: 表明声明一个变量,变量名叫data对象类型是com.lai.www.databinding.DataBean.
    • android:text=”@{data.name}”: 表明我们要取出data对象的name属性。

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

    <data>
        <!--
            这里相对于是创建一个DataBean对象
            DataBean bean = null
         -->
        <variable
            name="data"
            type="com.lai.www.databinding.DataBean"/>
    </data>

    <LinearLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/but"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{data.name}"/>

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{data.age}"/>
    </LinearLayout>
</layout>
  • 逻辑代码:
    • DataBean bean = new DataBean(): 封装数据的对象
    • mainBinding.setData(bean): 把这个对象设置给mainBinding,我们就可以在布局中直接引用bean里面的数据了

        ActivityMainBinding mainBinding;
        mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        //先创建一个DataBean对象,用来封装数据
        DataBean bean = new DataBean();
        //把这个对象设置给mainBinding,这样我们就可以在布局文件中直接使用了
        mainBinding.setData(bean);
        bean.setName("我是天才!!!");
        bean.setAge("21");

支持在布局中使用表达式

  • 数学 + - / * %
  • 字符串连接 +
  • 逻辑 && ||
  • 二进制 & | ^
  • 一元运算 + - ! ~
  • 移位 >> >>> <<
  • 比较 == > < >= <=
  • instanceof
  • 分组 ()
  • null
  • Cast
  • 方法调用
  • 数据访问 []
  • 三元运算 ?:
  • 例子:

android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值