Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set via Data-Binding API a well known attribute value

I have an custom attribute from a custom view defined line this:

<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 detects this and offers me a autocompletion, which is great. So the xml attribute will look like app:order="byValue". However since I want to use a BindingAdapter from the data binding API, I need to use it with an @ sign like this: app:order="@{byValue}", unfortunately this does not compile.

Then I tried to use a constant which I use internally too like this: app:order="@{com.example.views.ExampleView.ORDER_BY_VALUE}", but this does not compile too. I can just use app:order="@{0}", sure this works because it is defined like that, however it is not intuitive why I am using 0 there.

Any idea how can I write a more readable code to solve this issue?

like image 887
rekire Avatar asked Nov 08 '22 15:11

rekire


1 Answers

It is necessary to create code for the enum values:

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

Import the class / object holding these enums to your XML:

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

Then you can reference them:

app:order="@{Order.INSTANCE.BY_KEY}"
like image 78
Miloš Černilovský Avatar answered Nov 15 '22 05:11

Miloš Černilovský