Ale*_*hel 5 android android-databinding
TextInputEditText我正在尝试为变量设置两种方式绑定Float。
这是我的 DataBindingAdapters 类的全部内容。
object DataBindingAdapters {
@BindingAdapter("android:text")
@JvmStatic
fun setText(view: TextInputEditText, value: Float) {
if(value != view.text.toString().toFloat()) {
view.setText(value.toString())
}
}
@InverseBindingAdapter(attribute = "android:text")
fun getText(view: TextInputEditText): Float {
return view.text.toString().toFloat()
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
error: <identifier> expected
float callbackArg_0 = mBindingComponent.null.getText(inputFieldSize);
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
您又错过了一个绑定适配器,如InverseBindingAdapter 文档中所述:
@BindingAdapter(value = [ "android:textAttrChanged"], requireAll = false)
fun setTextWatcher( view: TextInputEditText, textAttrChanged: InverseBindingListener?) {
val newValue = object: TextWatcher {
override fun afterTextChanged(s: Editable?) = Unit
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
override fun onTextChanged( s:CharSequence, start:Int, before:Int, count:Int) {
textAttrChanged?.onChange()
}
}
val oldValue = ListenerUtil.trackListener(view, newValue, R.id.textWatcher)
if (oldValue != null) {
view.removeTextChangedListener(oldValue)
}
view.addTextChangedListener(newValue)
}
Run Code Online (Sandbox Code Playgroud)
当您创建时@InverseBindingAdapter(attribute = "android:text"),会创建一个事件android:textAttrChanged,并且您必须为其添加绑定适配器。
调用textAttrChanged?.onChange()将触发InverseBindingAdapter您创建的。
编辑:
此外,您正在使用 Kotlin,因此您不需要将绑定适配器放入object. 一个单独的文件就足够了。只要去掉包装纸object DataBindingAdapters {..}就@JvmStatic可以了。
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |