android数据绑定之Data Binding
2017-08-25 14:52
471 查看
(1)工具:
Android studio 1.3.0或更高
(2)在build.gradle中引入:
例如:
(3)数据对象
Sample可以是plain-old Java object(POJO) 对象或者JavaBean对象。
package com.pdm.alina.myactivityanimation.bean;
public class Sample implements Serializable {
private final int color;
private final String name;
public Sample(@ColorRes int color, String name) {
this.color = color;
this.name = name;
}
@BindingAdapter("bind:colorTint")
public static void setColorTint(ImageView view, @ColorRes int color) {
DrawableCompat.setTint(view.getDrawable(), color);
}
public String getName() {
return name;
}
public int getColor() {
return color;
}
}
这里使用@BindingAdapter("bind:colorTint")注解静态绑定适配器方法,为下文中sample_test.xml的app:colorTint属性自定义setter方法,即setColorTint().
Binding适配器对其他定制类型非常有用,例如:自定义loader可以用来异步加载图像,当有冲突时自定义的Binding适配器将覆盖Data Binding默认适配器。
(4) 在xml文件中使用Data Binding
例如:sample_test.xml
Data Binding的Layout与普通的Layout的区别在于:根标签为<layout>,接下来是一个<data>标签,然后是view元素。在<data>中描述了一个名为sample的属性,即为com.pdm.alina.myactivityanimation.bean包下的Sample实体:
使用@{sample.~}进行Sample对象的属性值读取设置:
sample_test.xml默认对应生成一个SampleTestBinding类(与xml文件的名字一致,即xml名字+Binding),这个类继承ViewDataBinding类,包含了不仅文件中所有的绑定关系。
(如果<data class="BindNameTest">中设置了Binding类名称,则生成BindNameTest的Binding类)
(5)数据绑定
在inflate的时候创建binding:
binding的获取还可以通过如下方法:
(6)事件处理
有两种方法:方法调用和监听绑定
方法调用:表达式会在编译时处理,如果函数不存在或者函数签名吗不对,编译将会报错。
例如(参考上面提到的Sample类代码):
表达式如下(以sample_test.xml)为基础:
监听绑定:
表达式如下:
Android studio 1.3.0或更高
(2)在build.gradle中引入:
例如:
android { ...... dataBinding { enabled = true } }
(3)数据对象
Sample可以是plain-old Java object(POJO) 对象或者JavaBean对象。
package com.pdm.alina.myactivityanimation.bean;
public class Sample implements Serializable {
private final int color;
private final String name;
public Sample(@ColorRes int color, String name) {
this.color = color;
this.name = name;
}
@BindingAdapter("bind:colorTint")
public static void setColorTint(ImageView view, @ColorRes int color) {
DrawableCompat.setTint(view.getDrawable(), color);
}
public String getName() {
return name;
}
public int getColor() {
return color;
}
}
这里使用@BindingAdapter("bind:colorTint")注解静态绑定适配器方法,为下文中sample_test.xml的app:colorTint属性自定义setter方法,即setColorTint().
Binding适配器对其他定制类型非常有用,例如:自定义loader可以用来异步加载图像,当有冲突时自定义的Binding适配器将覆盖Data Binding默认适配器。
(4) 在xml文件中使用Data Binding
例如:sample_test.xml
<?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> <variable name="sample" type="com.pdm.alina.myactivityanimation.bean.Sample" /> </data> <LinearLayout android:id="@+id/sample_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:padding="@dimen/spacing_double"> <ImageView android:id="@+id/sample_icon" android:src="@drawable/circle_24dp" app:colorTint="@{sample.color}"/> <TextView android:id="@+id/sample_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{sample.name}" tools:text="View animations sample"/> </LinearLayout> </layout>
Data Binding的Layout与普通的Layout的区别在于:根标签为<layout>,接下来是一个<data>标签,然后是view元素。在<data>中描述了一个名为sample的属性,即为com.pdm.alina.myactivityanimation.bean包下的Sample实体:
<variable name="sample" type="com.pdm.alina.myactivityanimation.bean.Sample" />
使用@{sample.~}进行Sample对象的属性值读取设置:
<ImageView android:id="@+id/sample_icon" style="@style/MaterialAnimations.Icon.Small" android:src="@drawable/circle_24dp" app:colorTint="@{sample.color}"/>
sample_test.xml默认对应生成一个SampleTestBinding类(与xml文件的名字一致,即xml名字+Binding),这个类继承ViewDataBinding类,包含了不仅文件中所有的绑定关系。
(如果<data class="BindNameTest">中设置了Binding类名称,则生成BindNameTest的Binding类)
(5)数据绑定
在inflate的时候创建binding:
protected void onCreate(@Nullable Bundle savedInstanceState) { ...... SampleTestBinding binding = DataBindingUtil.setContentView(this, R.layout.sample_test); Sample sample = (Sample) getIntent().getExtras().getSerializable("..."); binding.setSample(sample); // set方法和sample_test.xml布局中variable的名称改对应 }
binding的获取还可以通过如下方法:
SampleTestBinding binding = SampleTestBinding.inflate(getLayoutInflater())
(6)事件处理
有两种方法:方法调用和监听绑定
方法调用:表达式会在编译时处理,如果函数不存在或者函数签名吗不对,编译将会报错。
例如(参考上面提到的Sample类代码):
public class Sample1 { ...... public void onClickTest(View view) { ......... } }
表达式如下(以sample_test.xml)为基础:
<ImageView android:id="@+id/sample_icon" android:src="@drawable/circle_24dp" app:colorTint="@{sample.color}" android:onClick="@{sample::onClickTest}" // 此时sample属于Sample1 />
监听绑定:
public class Sample2 { ...... public void onTaskClickTest(Sample2 sample2) { ......... } }
表达式如下:
<ImageView android:id="@+id/sample_icon" android:src="@drawable/circle_24dp" app:colorTint="@{sample.color}" android:onClick="@{()->sample.onTaskClickTest(sample)}" // 此时sample属于Sample2 />
相关文章推荐
- Android官方数据绑定框架DataBinding(一)
- Android官方数据绑定框架DataBinding
- Android官方数据绑定框架DataBinding(二)
- Android官方数据绑定框架DataBinding
- Android Data Binding数据绑定详解
- Android Data Binding(数据绑定)用户指南
- Android官方数据绑定框架DataBinding
- Android官方数据绑定框架DataBinding
- Android DataBinding数据绑定技术在传统ListView中的使用简例
- Android官方数据绑定框架DataBinding(一)
- Data Binding Library(数据绑定库)--来自android官网的翻译
- Android 用户界面---用AdapterView绑定数据(Binding to Data with AdapterView)
- 数据绑定数据库详解Android Data Binding Library
- Android中的数据绑定框架DataBinding(对比AngularJS双向数据绑定很好理解)
- Android databinding xml中处理数据与控件绑定
- Android官方数据绑定框架DataBinding
- Android 6.0 数据绑定之DataBinding(一)
- Android官方数据绑定框架DataBinding(一)
- Android官方数据绑定框架DataBinding(二)
- Android DataBinding(数据绑定)详解(一)