正确可能只有一个,而错误却有千万种。
一、基础用法
-
启用
dataBinding
//在module的build.gradle中 apply plugin: 'kotlin-kapt'//必须 android{ //AS 4.0 以下, dataBinding{ enabled true } //AS 4.1之后 bindingFeature{ dataBinding = true // for view binding : // viewBinding = true } }
-
UI
改造
<layout> <data class=""> </data> <!-- 原有的UI的xml布局放在layout标签内即可。data标签内存放用于xml的数据变量,类型 --> <LinearLayout> </LinearLayout> </layout>
-
viewBinding
和dataBinding
-
xml
中的数据类型variable
声明变量;import
导入类型;对于xml
的特殊符号需要转义类似&
绑定
xml
与data
格式:@{}
、@={}
(双向绑定)-
可用表达式、函数调用、属性参数
-
??
判空 -
?:
三目运算符 -
@string/str_name
资源引用,可用占位符format
-
+
拼接字符,使用``反引号 -
default
设置默认值 -
include
绑定 -
点击事件
οnclick="@{()->vm.click()}" οnclick="@{(v)->vm.click(v)}" οnclick="@{()->vm.click(context)}" οnclick="@{BindHelp::staticClick}" οnclick="@{callback}"
-
EditText
的双向绑定text="@={etStr}"
-
UI
中关联xml
的dataBinding
//activity中 val binding = DataBindingUtil.setContentView<ActivityBaseUseBinding>(this, R.layout.activity_base_use) //fragment中 xxxBinding.inflater()
-
二、进阶用法
-
android:onCheckedChanged="@{(switch,checked)->vm.broadcast(checked)}"
-
Binding 响应
UI
的data Bean
-
Adapter
用于列表的适配器,include
-
@BindingConversion
转化支持 -
@BindingAdapter
高级支持 -
@InverseBindingAdapter
反相绑定-
@bindingadapter(xxx)
-
@bindingadapter(xxxAttrChanged)
-
@inverseBindingadapter
-
-
@BindingMethods
适配扩展支持binding
的函数
坑的经验:
-
TextView
的text
属性,有其注意data
不能为Number
类型 -
xml
中字符不能为中文 -
反射属性、函数必须是
public
-
使用
liveData
作为dataBinding
的时候,切记ui
中设置binding.lifecycleOwner
-
observableField
数据的时候,某些场合需要必须初始化,否则运行报错,不易排查 -
IDE
开发避免中文输入法引起字符飞崩,尤其xml
中。 -
./gradlew app:build
,./gradlew app:dependencies
等gradle
的指令常用,便于排错--stacktrace --debug
等参数必要信息,使用Execution failed for task
构建错误信息。 -
clean,rebuild,clear cache,delete build和apk文件夹
-
build.gradle,--offline
,AS&gradle的版本匹配