Установить через API привязки данных общеизвестное значение атрибута

У меня есть пользовательский атрибут из пользовательского представления определенной строки это:

<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", Однако, так как я хочу использовать BindingAdapter из API привязки данных, мне нужно использовать его с @ знак, как это: app:order="@{byValue}"К сожалению, это не компилируется.

Затем я попытался использовать константу, которую тоже использую внутри: app:order="@{com.example.views.ExampleView.ORDER_BY_VALUE}", но это тоже не компилируется. Я могу просто использовать app:order="@{0}"Конечно, это работает, потому что это определено так, но это не интуитивно понятно, почему я использую 0 там.

Любая идея, как я могу написать более читаемый код для решения этой проблемы?

1 ответ

Необходимо создать код для значений enum:

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

Импортируйте класс/объект, содержащий эти перечисления, в свой XML:

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

Затем вы можете сослаться на них:

      app:order="@{Order.INSTANCE.BY_KEY}"
Другие вопросы по тегам