首页 > 解决方案 > 如果使用通过转换器的 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)

我遵循文档并按照它描述的方式实现了一些东西。

标签: androidxmlandroid-layoutandroid-databindingtwo-way-binding

解决方案


推荐阅读