android数据绑定之Data Binding
来源:互联网 发布:骑士队球员数据 编辑:程序博客网 时间:2024/05/17 18:48
(1)工具:
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 />
阅读全文
0 0
- android数据绑定之Data Binding
- Android Data Binding 数据绑定技术导读
- Android数据绑定Data Binding初体验
- Android Data Binding(数据绑定)用户指南
- Android Data Binding(数据绑定)用户指南
- Android 数据绑定(Data Binding)详解
- 数据绑定(Data Binding)
- 数据绑定(data binding)
- Android简明开发教程十:数据绑定Data Binding
- Android简明开发教程十:数据绑定Data Binding
- Android数据绑定库Data Binding Library介绍
- Android Data Binding(数据绑定)教程汇总
- 数据绑定数据库详解Android Data Binding Library
- vlc for android中的数据绑定(Data Binding)
- Android Data Binding(结合RecyclerView动态绑定数据)
- Android 官方数据绑定框架 Data Binding 简单使用
- HTML中的数据绑定(Data Binding)
- 数据绑定(data binding )1
- 请允许我...ps学习备忘!
- 点积
- C++网络编程
- Spring+SpringMVC+Shiro+Redis+Maven权限管理
- VUE组件之间传值
- android数据绑定之Data Binding
- 四大浏览器内核
- 对ARM TrustZone的理解
- 绘制异形PCB的步骤
- Cache占用过多内存导致Linux系统内存不足问题排查
- Json数据的三种格式
- 【Python】Python 之列表(List)结构
- 【JavaScript 基础】03 流程控制语句
- I2C clock设置的过程