通过数据绑定 API 设置一个众所周知的属性值

Set via Data-Binding API a well known attribute value

我有一个来自自定义视图的自定义属性定义行:

<declare-styleable name="ExampleView">
    <attr name="order">
        <enum name="byValue" value="0" />
        <enum name="byKey" value="1" />
    </attr>
    <!-- and some more attributes -->
</declare-styleable>

Android Studio 检测到这一点并为我提供了一个自动完成功能,这很棒。所以 xml 属性看起来像 app:order="byValue"。但是,由于我想使用数据绑定 API 中的 BindingAdapter,我需要将它与 @ 符号一起使用,如下所示:app:order="@{byValue}",不幸的是,这无法编译。

然后我尝试使用我在内部使用的常量,如下所示:app:order="@{com.example.views.ExampleView.ORDER_BY_VALUE}",但这也无法编译。我可以只使用 app:order="@{0}",确保它有效,因为它是这样定义的,但是它不直观为什么我在那里使用 0

知道如何编写更具可读性的代码来解决这个问题吗?

需要为枚举值创建代码:

object Order {
    const val BY_VALUE = 0
    const val BY_KEY = 1
}

将包含这些枚举的 class / 对象导入到您的 XML:

<import type="com.example.Order" />

那你就可以参考了:

app:order="@{Order.INSTANCE.BY_KEY}"