目标:
在xml中自定义属性双向绑定,常用于一些自定义view中的EditText监听数据变化
使用
<EditText app:bindingName='@={binding.name}' ... >
- 自定义属性的 setXXX
@BindingAdapter("bindingName")
@JvmStatic
fun setBindingName(edt : EditText, txt : String){
edt.setText(txt)
}
- 自定义属性的 getXXX
@InverseBindingAdapter(attribute = "bindingName")
@JvmStatic
fun getBindingName(edt : EditText) : String{
return edt.text.toString()
}
// attribute不能少
- .编写属性变化监听器及想要监听的事件,监听器进行关联
@BindingAdapter("bindingNameAttrCbhanged")
@JvmStatic
fun setBindingListener(edit : EditText, listener: InverseBindingListener?) {
var txt = ""
edit.addTextChangedListener(object : TextWatcher{
override fun afterTextChanged(p0: Editable?) {
if (txt != p0.toString()){
// 会通知属性调用InverseBindingAdapter注解方法
listener?.onChange()
txt = p0.toString()
}
edit.setSelection(txt.length)
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
})
}