我有一个自定义视图定义的自定义属性:
<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
并不直观。
任何想法如何编写更易读的代码来解决这个问题?
答案 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}"