android - 如果使用通过转换器的 2 路数据绑定,则不会生成 XML 布局的绑定实现
问题描述
我的布局中有一个AppCompatAutoEditTextView。此视图使用 ArrayAdapter从名为FlavorType的枚举类填充。
现在,我想实现 2-way DataBinding,将 text 属性绑定到 MutableLiveData。为此,我实现了以下Converter:
object Converter {
@InverseMethod(value = "flavor_str_to_enum")
fun flavor_enum_to_str(view: AppCompatAutoCompleteTextView, value: FlavorType): String {
return when (value) {
FlavorType.SWEET -> view.context.getString(R.string.label_flavor_sweet)
FlavorType.SAVORY -> view.context.getString(R.string.label_flavor_savory)
FlavorType.NONE -> view.context.getString(R.string.label_none)
else -> view.context.getString(R.string.label_none)
}
}
fun flavor_str_to_enum(view: AppCompatAutoCompleteTextView, value: String): FlavorType {
return when (value) {
view.context.getString(R.string.label_flavor_sweet) -> FlavorType.SWEET
view.context.getString(R.string.label_flavor_savory) -> FlavorType.SAVORY
view.context.getString(R.string.label_none) -> FlavorType.NONE
else -> FlavorType.NONE
}
}
}
在此之后,在我的 XML 中,我添加了以下行:
android:text="@={Converter.INSTANCE.flavor_enum_to_str(viewmodel.flavor)}
其中,flavor 是 MutableLiveData 类型。此外,我在 XML 的顶部为我的 Converter 类添加了导入标签。
现在,由于某种我不知道的原因,只需在我的 xml 中添加上述行,我的构建就开始失败,并出现找不到与我的 XML 关联的BindingImpl的符号错误。我查看了生成的代码文件夹,是的,我的 xml 的Fragment...BindingImpl不存在,而对于它们存在的其他布局。只需删除上面的代码行,一切都会重新开始工作。我已经尝试了一切,无效,重新启动等。但是,这个问题似乎仍然存在。
任何人都可以提供见解,可能发生什么或我可能做错了什么?
编辑:使用--stacktrace 运行 gradle build ,我收到以下错误:
[databinding] {"msg":"cannot find method flavor_enum_to_str(dev.example.myapp.model.FlavorType) in class dev.example.myapp.utils.Converter","file":"app\\src\\main\\res\\layout\\fragment_addrecipe.xml","pos":[{"line0":119,"col0":41,"line1":119,"col1":86}]}
这让我相信它正在尝试查找上述函数签名,但它却发现:
flavor_enum_to_str(AppCompatAutoCompleteTextView, FlavorType)
我遵循文档并按照它描述的方式实现了一些东西。
解决方案
推荐阅读
- swiftui - SwiftUI - 当手指移动一点时让 LongPressGesture 保持不变?
- python - 如何创建一个以点为起点的 pathlib 相对路径?
- redux-form - React-admin:如何实现自动保存/后台保存功能?
- javascript - 如何过滤对象数组并检查特定键是否在数组中具有值
- python-3.x - 尝试在没有成功的情况下用 Python 编写和打开 PDF
- javascript - 无法弄清楚为什么列表过滤器无法正常工作
- python - 如何使用 Python 遍历 JSON 字典
- apache-spark - Spark:如何将 pairRdd 的值转换为 Rdd?
- nginx - 是否可以使用 openresty 和 docker 实时重新加载 lua 脚本?
- c++ - Qt:如何使不兼容的发送方/接收方参数兼容?