Android Data Binding 入门

Android Data Binding 入门

android {
    ......
    // dataBinding 加入
    dataBinding {
        enabled = true
    }
    ......
}
  • 布局文件

    最外层根节点变为==layout==,新增节点==data==用来存放页面可能用的数据以及方法

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <!--
    <data class="">
        <import type="com.smq.databanding.User" />
        <variable
            name="aaa"
            type="User" />
    </data>
    -->
    <RelativeLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!" />
    </RelativeLayout>

</layout>
  • 默认生成规则

根据layout的文件名来生成对应的Binding类,例如==R.layout.activity_main==对应生成的类名为==ActivityMainBinding==。自动生成的类在build目录下,as中不可见。

  • Variable和import

这两个标签是在layout资源文件中data标签的下级标签,其中variable标签可以独自使用,其独自使用方法如下:

<data>
    <variable name="user" type="com.smq.databanding.User" />
</data>

其中name对应的字段会在具体view控件赋值时用到,type字段对应值是具体引用的类的全路径。

variable和import方法联合使用方法如下:

<data>
    <import type="com.smq.databanding.User"/>
    <variable name="user" type="User" />
</data>

多个路径类名相同的解决方法

<import type="com.example.home.data.User" />
<import type="com.examle.detail.data.User" alias="DetailUser" />
<variable name="user" type="DetailUser" />

绑定variable

当设置了variable标签后,框架会自动生成一个继承自ViewDataBinding的类,如果data中有class属性,比如

<data class="com.smq.databanding.CustomBinding" >
    <import  alias="User2"  type="com.smq.databanding.User" />
    <variable name="user" type="User2" />
</data>

则生成的类名为CustomBinding,否则就根据layout的文件名来生成对应的Binding类,例如R.layout.activity_main对应生成的类名为ActivityMainBinding。自动生成的类在build目录下,as中不可见。

  • 具体在Activity中的绑定方法如下
public class MainActivity extends AppCompatActivity {
    //MainBanding dataBinding;
    ActivityMainBinding dataBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        init();
    }
    private void init() {
        dataBinding.setUser(new User("zhangfei", 18));
    }
}
  • XML中使用,样例
<?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>
        <import alias="User2" type="com.smq.databanding.User" />
        <variable name="user" type="User2" />
    </data>
    <RelativeLayout
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name + user.age}" />
    </RelativeLayout>
</layout>
  • java类静态方法的使用
    首先定义一个静态方法
public class MyStringUtils {
    public static String capitalize(final String word) {
        if (word.length() > 1) {
            return String.valueOf(word.charAt(0)).toUpperCase() + word.substring(1);
        }
        return word;
    }
}

然后在 xml 的 data 节点中导入:

<import type="com.liangfeizc.databindingsamples.utils.MyStringUtils" />

使用方法与 Java 语法一样:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{MyStringUtils.capitalize(user.firstName)}" />
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值