Data Binding使用技巧
Data Binding
根据变量,自动赋值到各widget。
How
1.编写layout文件,这里的layout为: act_data_bind_demo.xml
这里需要先准备变量
在具体的widget上使用该变量 <TextView android:layoutwidth="matchparent" android:layoutheight="wrapcontent" android:text="@{user.name}"/>
2.Binding data 上面的步骤完成后,需要先编译整个Project,因为在这个过程中会生成一些类:DataBindingUtil,ActDataBindDemoBinding
注意:这里的ActDataBindDemoBinding是根据上面的布局文件的名字生成的。
在onCreate方法中:
ActDataBindDemoBinding binding = DataBindingUtil.setContentView(this,
R.layout.act_data_bind_demo);
customer = new Customer();
customer.setName("Andy");
customer.setMobile("13866668888");
binding.setUser(customer);
运行后,可以看到页面中的两个TextView都有值。
问题:如何获取EditText的输入内容?
failed:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:text="@{user.email}"/>
It's work: "
...android:text="@={user.email}"
问题:如何通过一个按钮改变当前页面中的TextView的值?
1.module类继承BaseObservable
public class Customer extends BaseObservable {
...
public void setMobile(String mobile) {
this.mobile = mobile;
notifyPropertyChanged(BR.mobile);
}
继承BaseObservable,同时在setter方法中调用notifyPropertyChanged。
2.更新Java中的Customer对象,例如当mobile改变,UI会制动刷新。
Custom Binding Class Names
默认情况下,Binding Class是根据layout文件名生成的。(例如,当layout文件为act_data_bind_demo.xml,生成的class为:ActDataBindDemoBinding)
可以自定义类名,以及设定包名:
<data class="com.andy.infrastructure.demos.databinding.DataBind">
<variable ...
</data>
上面的代码中,会在包com.andy.infrastructure.demos.databinding下生成一个名为DataBind的类。注意这个package必须是存在的,当然也可以不指定package(会在默认的包下生成该类)。
Include
在layout文件中使用include时,也可以传递数据到指定的layout中。需要额外2个步骤:
确保传递的变量在两个layout中都有声明
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto"> ... ... <include layout="@layout/user_name" bind:user="@{user}"/>
被引入的layout: ...
<TextView android:layoutwidth="matchparent" android:layoutheight="wrapcontent" android:padding="15dp" android:text="@{user.name}">
外层layout中传递变量
<include layout="@layout/user_name" bind:user="@{user}"/>
Expression Language
- 数学运算 + - / * %
- 字符串拼接 +
- 逻辑运算符 && ||
- 位运算 & | ^
- Unary + - ! ~
- 位移 >> >>> <<
- 比较运算符 == > < >= <=
- instanceof
- Grouping ()
- Literals character, String, numeric, null
- Cast
- Method calls
- Field access
- Array access []
三元运算符 ? :
Null Coalescing Operator ??
如果??左边不为空就使用左边值,否则就使用右边的值。
android:text="@{user.displayName ?? user.lastName}"
上面的代码相当于:
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
Data Objects
三种数据更新提示机制:
- Observable Object
- Observable Fields
- Observable Collections
Observable Object
这种方式,需要做三个步骤:
- 继承BaseObservable
- 为getter添加@Bindable
- 在setter中添加代码notifyPropertyChanged(BR.name);
Views With IDs
A public final field will be generated for each View with an ID in the layout. The binding does a single pass on the View hierarchy, extracting the Views with IDs. This mechanism can be faster than calling findViewById for several Views.
layout文件中widget有设置id时,可以使用bind对象直接访问该控件,省去findViewById
文本中的代码示例,链接如下:
Data Binding使用技巧的更多相关文章
- Data Binding和INotifyPropertyChanged是如何协调工作的?
前言 WPF的一大基础就是Data Binding.在基于MVVM架构的基础上,只有通过实现INotifyPropertyChanged接口的ViewModel才能够用于Data Binding. 要 ...
- WPF QuickStart系列之数据绑定(Data Binding)
这篇博客将展示WPF DataBinding的内容. 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Targ ...
- XAML数据绑定(Data Binding)
XAML数据绑定(Data Binding) Data Binding可以使得XAML标签属性的赋值更为灵活和方便.在绑定过程中,获取数据的标签成为目标标签:提供数据的标签成为源标签.在XAML中 ...
- Optimizing Performance: Data Binding(zz)
Optimizing Performance: Data Binding .NET Framework 4.5 Other Versions Windows Presentation Founda ...
- .NET: WPF Data Binding
WPF是分离UI和Logic的最佳工具,不同于Window Form的事件驱动原理,WPF采用的是数据驱动,让UI成为了Logic的附属,达到分离的效果. 本篇主要讲讲wpf的精华:data bind ...
- WP8.1 Study5:Data binding数据绑定
一.数据绑定 最简单的编程UI控件的方法是写自己的数据来获取和设置控件的属性,e.g. , textBox1.Text = "Hello, world"; 但在复杂的应用程序,这样 ...
- Data Binding in WPF
http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S1 Data Binding in WPF John Papa Code downl ...
- Data Binding(数据绑定)用户指南
1)介绍 这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件. Data Binding库不仅灵活而且广泛兼容- 它 ...
- 完全掌握Android Data Binding
转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html 来源 https://github.com/L ...
随机推荐
- C#通过反射给对象赋值
class Program { static void Main(string[] args) { UserSearchRequest model = new UserSearchRequest() ...
- 【前端优化之渲染优化】大屏android手机动画丢帧的背后
前言 上周我与阿里的宇果有一次技术的交流,然后对天猫H5站点做了一些浅层次的分析,后面点时间基本天天都会有联系,中途聊了一些技术细节.聊了双方团队在干什么,最后聊到了前端优化.因为我本身参与了几次携程 ...
- IOS 杂笔-11(实现在外部无法改变UIView的size)
我想题目说的或许不是很清楚,那么现在我详细介绍一下这篇随笔内容. 在外部无法改变UIVIew控件的size. 这里说是UIView,但是事实上,是大多数控件而绝非仅UIView. 想要实现在外部无法改 ...
- Python中对时间日期的处理方法简单汇总
这篇文章主要介绍了Python实用日期时间处理方法汇总,本文讲解了获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个d ...
- vs2013给项目统一配置boost库
1.打开项目,然后点击菜单中的 视图->其他窗口->属性管理器 2. 打开属性管理器,点击项目前的箭头,展开项目,找到debug或者release下面的Microsoft.Cpp.Win3 ...
- poll机制
使用POLL机制代替linux输入子系统(input subsystem)之按键输入和LED控制中的异步通知,实现同样的效果. 1.代码 只简单修改input_subsys_test.c, input ...
- Android Studio NDK 开发 问题记录
Android NDK 开发 问题解决 编译:找不到gles3库 使用旧的编译方式,写Android.mk 进行编译.报错如下 gles3/gl3.h no such file or director ...
- plain framework 1 1.0.3更新 优化编译部分、网络压缩和加密
有些东西总是姗姗来迟,就好比这新年的钟声,我们盼望着新年同时也不太旧的一年过去.每当这个时候,我们都会总结一下在过去的一年中我们收获了什么,再计划新的一年我们要实现什么.PF并不是一个十分优秀的框架, ...
- Django之Form组件
Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...
- 使用串口线真机调试Linux内核
一.环境 ubuntu 14.04 一台有串口的PC(编号PC1,被调试机器) 另一台PC通过USB转串口线连接PC1(编号PC2,发起调试命令的机器) 二.串口线配置及测试 安装cutecom US ...