- 启用dataBinding:
apply plugin: 'kotlin-kapt'
android{
dataBinding{
enabled true
}
bindingFeature {
dataBinding = true
}
}
- UI改造:
<layout>
<data class="">
<variable
name="data"
type="com.example.***.MyViewModel" />
</data>
<!--原有的U1的xml布局放在layout标签内即可。data标签内存放用于xml的数据变量,类型-->
<LinearLayout>
</LinearLayout>
</layout>
- xml中的数据类型:
variable声明变量;
import导入类型;
对于xml的特殊符号需要转义类似&
绑定xml与data格式: @{}、@={}(双向绑定)
可用表达式、函数调用、属性参数。
??判空
?:三目运算符
@string/str_name资源引用,可用占位符format。
+拼接字符,使用``反引号
default设置默认值,在开发的时候ui显示
include绑定
点击事件 :
onclick="@{()->vm.click()}"
onclick="@{(v)->vm.click(v)}"
onclick=@{()->vm.click(context)}"
onclick="@{BindHelp: :staticCiick}"
onclick="@{callback}"
EditText的双向绑定text="@={etStr}",数据变化导致UI变化是正向绑定,UI变化导致数据变化是反向变化。
UI中关联xml的dataBinding: - 在activity/fragment可以用以下代码和DataBinding绑定
val binding =
DataBindingUtil.setContentView<ActivityBaseUseBinding>(this,R.layout.activity_title)
binding.data = myViewModel
binding.lifecycleOwner = requireActivity()
- 使用
首先是布局文件:一个TextView:

可以看到最后一行 text=“@{name}”
name是定义在标签里面:一个定义好的变量

然后在Activity里面绑定后就可以使用 binding给它赋值:"binding.name = null"这样;
还可以自定类对象:
普通赋值:

定义某一个属性:在布局文件中:


对某些属性观察,要根据自己的需要写set()get()的代码:

- 在RecycleView中使用:


然后在Activity里面用binding.adapter = Adapater()赋值,注意写法:

@BindingAdataer高级支持:可以让一些本来不支持的参数转换成支持的参数;第一个参数value值和布局参数里面对应的参数对应,这里写的是"android:textColor";在getColor()方法里面这里的第一个参数必须是TextView,第二个需要传入的参数类型。


@BindingConversion转化支持:这里面的red;

在方法里面的参数是传入的数据对象类型,返回值是你需要的数据结果:

@BindingMethods:内部方法三个参数:第一个是作用的类,第二个是作用的哪个属性值,第三个是作用的方法。

