通过Data-Binding API设置一个众所周知的属性值

时间:2016-05-14 23:41:40

标签: android android-databinding android-attributes android-binding-adapter

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

<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并不直观。

任何想法如何编写更易读的代码来解决这个问题?

1 个答案:

答案 0 :(得分:1)

有必要为枚举值创建代码:

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

将包含这些枚举的类/对象导入XML:

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

然后您可以引用它们:

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