Android Data Binding
入门篇 —MVVM 提高开发效率 性能高/功能强
用途
1) 去掉Activity和Fragments内的UI代码
2) XML变成UI的唯一真实来源
3) 减少定义view id的主要用途(不再需要findViewById)类似方法
ButterKnife/Android Annotations/RoboBinding优势劣势
优势
1) 去除Activity/Fragment中的UI代码
2) 性能查过手写代码,安全(不会id错而crash)
3) 保证执行在主线程
劣势
1) IDE支持不那么完善
2) 报错不那么直接
3) 没有重构支持使用-Gradle
1) 在App module - build.gradle中
android{
dataBinding{
enabled=true
}
}
基础使用
1) layout文件改写
在原layout文件外套一层标签
2) 去除findViewById
3) 事件绑定主要性能
1) 0反射
2) findViewById需要遍历整个viewgroup,现在只需做一次
3) 使用位标记来检验更新
4) 数据改变在下次批量更新时才会触发操作
5) 缓存表达式表达式
1) 二元
2) 一元
3) 移位
4) 比较
5) Instanceof
6) grouping
7) 文字
8) Cast
9) 方法调用
10) Filed访问
11) Array数组
12) 三目运算符
13) 取非空表达式缺省
1) this
2) super
3) new
4) 显示泛型调用避免空指针
1) 自动空指针检测
2) 数组越界无法检测include
1) bind:
2) 尚不支持direct child, 如root为mergeviewstub
ViewStub proxy final field
ViewStubProxy
OnInflateListenerObservable
1) BaseObservable
notifyPropertyChange@Bindable
2) Observable Fields
ObservableBoolean, ObservableByte,ObservableChar…ObservableParcelable
3) Observable Collection
ObservableArrayMap, ObservableArrayList高级绑定: 动态变量
1) RecyclerView
2)
final T item = mItems.get(position);
holder.getBinding().setVariable(BR.item, item);
holder.getBinding().executePendingBindings();
- 刷新
1) 立即绑定
变量或Observable改变后,会在下个帧进行绑定的改变,如果需要立即执行,可以执行executePendingBindings()
2)后天线程
data binding会本地化变量/值域,以避免同步问题(对collection不行)
高级篇
List使用Data Binding
1). RecyclerView:
I. 更高级、灵活的ListView
II. 替代ListView、GridView、瀑布流
III. Holder
2). Generic Binding
可复用ViewHolder自定义属性
1) Setter: 自动寻找set方法
<LinearLayout
app:scrimColor="@{@color/scrimColor}"
/>
2) BindingMethods: Binding类型
@Binding
Methods({
@BindingMethod(
type = "android.widget.ImageView"
attribute = "android:tint"
method = "setIamgeTintList"
)
})
android:tine -> setImageTintList
3) BindingApater
@BingdingApdater("bind:imageUri")
public static void loadImageFromUri(ImageView view, Uri uri){
... // load
}
4) 多属性适配,只需在上一条中括号中添加相同的一条即可
5) BingdingConversion
@BindingConversion
public static ColorDrawable convertColorToDrawable(int color){
return new ColorDrawable(color);
}
- 双向绑定
1) 老方式
Listener———-
<EditText
android:text="@{user.name}"
android:afterTextChanged="@{callback.change}"/>
public void change(Editable s){
final String text = s.toString();
if(!text.equals(name.get())){
name.set(text);
}
}
2) 现在: 使用 @=
本文介绍Android Data Binding的基本概念及使用方法,包括其在Activity和Fragment中的应用、与ButterKnife等工具的区别,以及如何通过Gradle配置启用Data Binding等功能。

8063

被折叠的 条评论
为什么被折叠?



