您的位置:首页 > 移动开发 > Android开发

Android数据绑定Data Binding初体验

2015-12-23 23:01 429 查看

Android数据绑定Data Binding初体验

配置

新版的Android Studio 已内置数据绑定框架,只需在app的build.gradle中添加

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


布局文件的改变

比起原来的布局文件,增加了layout为root节点,data节点进行数据的声明

<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
</data>
<!--原先的根节点(Root Element)-->
<LinearLayout>
....
</LinearLayout>
</layout>


Data节点

在data节点中声明数据变量

name为声明的名称

type为该类的包名+类名

<variable
name="user"
type="com.ethanco.mydatabinding.User" />


简单的例子 ##

新建User类

public class User {
private final String firstName;
private final String lastName;

public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

public String getFirstName() {
return firstName;
}

public String getLastName() {
return lastName;
}
}


编写布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.ethanco.mydatabinding.User" /></data>
<!--原先的根节点(Root Element)-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}" />
</LinearLayout>
</layout>


绑定数据

当编写好variable,就会自动生成一个继承ViewDataBinding的类,例如activity_main.xml就会生成ActivityMainBinding

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User("Test", "User");
binding.setUser(user);


运行程序

即发现TextView的text以显示为Test和User

绑定事件

View.OnClickListener有个方法onClick(), 你就可以使用android:onClick属性来绑定一个方法

注意:绑定的方法的签名必须和该属性原本对应的方法的签名完全一样,否则编译阶段会报错。

新建MyHandlers类

public class MyHandlers {
public void onClick(View view) {
Log.i("zhk-MyHandlers", "onClick: ");
Toast.makeText(view.getContext(), "onClick", Toast.LENGTH_SHORT).show();
}
}


声明

<variable
name="handlers"
type="com.ethanco.mydatabinding.MyHandlers" />


设置绑定

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{handlers.onClick}"
android:text="ClickMe" />


设置Handlers

在Activity中

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
.....
binding.setHandlers(new MyHandlers());


运行程序

点击Button发现以绑定了MyHandlers的onClick方法

其他

现在Data Binding只支持单向绑定,期待双向绑定,届时,各种注解就正的可以下岗了!

参考

https://github.com/LyndonChin/MasteringAndroidDataBinding

https://github.com/derron/DataBinding-album-sample/blob/master/MVVM.md

程序源码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: