Android 双向数据绑定数据转换器不工作
Android Two-way data binding data converter not working
正在关注 https://developer.android.com/topic/libraries/data-binding/two-way#converters、
我正在尝试为 android.
中的双向数据绑定实现 数据转换器
转换器的功能:
给定一个 10 位数的 phone 号码,将国家/地区代码添加到 phone 号码。
XML代码:
<data>
<import type="<package_name>.PhoneNumberStringConverter" />
<variable
name="model"
type="<package_name>.MyViewModel" />
</data>
<androidx.appcompat.widget.AppCompatEditText
android:text="@={PhoneNumberStringConverter.addExtension(model.storeDetailsEntity.storePhoneNumber)}"
... // Other irrelevant attributes are not shown
/>
转换器:
object PhoneNumberStringConverter {
@InverseMethod("addExtension")
@JvmStatic
fun removeExtension(view: EditText, oldValue: String, value: String): String {
return value.substring(3)
}
@JvmStatic
fun addExtension(view: EditText, oldValue: String, value: String): String {
return "+91$value"
}
}
当我在 XML 中添加转换器时,构建失败。
找不到获取 MyLayoutBindingImpl。绑定 class 生成问题。
注:
1. 双向数据绑定按预期工作,问题仅与转换器有关。
已推荐:
编辑:
感谢@Hasif Seyd 的解决方案。
工作代码:
PhoneNumberStringConverter:
object PhoneNumberStringConverter {
@JvmStatic
fun addExtension(value: String): String {
return "+91$value"
}
@InverseMethod("addExtension")
@JvmStatic
fun removeExtension(value: String): String {
return if (value.length > 3) {
value.substring(3)
} else ""
}
}
XML:
android:text="@={PhoneNumberStringConverter.removeExtension(model.storeDetailsEntity.storePhoneNumber)}"
已将 addExtension
更改为 removeExtension
。
代码中存在一些问题。由于您使用的是两种方式的绑定转换器,
第一个问题是你试图在 xml 中直接调用反向绑定适配器,但是根据我在你的转换器定义中看到的,绑定适配器是 removeExtension,所以你有直接在 xml 中分配。
另一个可能的原因可能是因为有参数 view 和 oldValue,如果您从中删除这两个参数,则这两个参数不是必需的绑定函数,您的代码将成功编译
正在关注 https://developer.android.com/topic/libraries/data-binding/two-way#converters、
我正在尝试为 android.
转换器的功能:
给定一个 10 位数的 phone 号码,将国家/地区代码添加到 phone 号码。
XML代码:
<data>
<import type="<package_name>.PhoneNumberStringConverter" />
<variable
name="model"
type="<package_name>.MyViewModel" />
</data>
<androidx.appcompat.widget.AppCompatEditText
android:text="@={PhoneNumberStringConverter.addExtension(model.storeDetailsEntity.storePhoneNumber)}"
... // Other irrelevant attributes are not shown
/>
转换器:
object PhoneNumberStringConverter {
@InverseMethod("addExtension")
@JvmStatic
fun removeExtension(view: EditText, oldValue: String, value: String): String {
return value.substring(3)
}
@JvmStatic
fun addExtension(view: EditText, oldValue: String, value: String): String {
return "+91$value"
}
}
当我在 XML 中添加转换器时,构建失败。 找不到获取 MyLayoutBindingImpl。绑定 class 生成问题。
注:
1. 双向数据绑定按预期工作,问题仅与转换器有关。
已推荐:
编辑:
感谢@Hasif Seyd 的解决方案。
工作代码:
PhoneNumberStringConverter:
object PhoneNumberStringConverter {
@JvmStatic
fun addExtension(value: String): String {
return "+91$value"
}
@InverseMethod("addExtension")
@JvmStatic
fun removeExtension(value: String): String {
return if (value.length > 3) {
value.substring(3)
} else ""
}
}
XML:
android:text="@={PhoneNumberStringConverter.removeExtension(model.storeDetailsEntity.storePhoneNumber)}"
已将 addExtension
更改为 removeExtension
。
代码中存在一些问题。由于您使用的是两种方式的绑定转换器, 第一个问题是你试图在 xml 中直接调用反向绑定适配器,但是根据我在你的转换器定义中看到的,绑定适配器是 removeExtension,所以你有直接在 xml 中分配。
另一个可能的原因可能是因为有参数 view 和 oldValue,如果您从中删除这两个参数,则这两个参数不是必需的绑定函数,您的代码将成功编译