Привязка данных и ColorStateList Selector - PullRequest
1 голос
/ 24 февраля 2020

У меня есть представление рециркулятора, в котором мне нужно использовать один из селекторов цвета, в зависимости от того, какое значение в привязке данных, чтобы изменить цвет TextView.

У меня есть два селектора:

color / selector_item_text. xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white" android:state_checked="true" />
    <item android:color="@color/white" android:state_pressed="true" />
    <item android:color="@color/white" android:state_activated="true" />
    <item android:color="@color/black" />
</selector>

color / selector_item_textwithspecial. xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/pink" android:state_checked="true" />
    <item android:color="@color/pink" android:state_pressed="true" />
    <item android:color="@color/pink" android:state_activated="true" />
    <item android:color="@color/orange" />
</selector>

И я привязываю его к своему TextView так:

<TextView android:text="@{data.displayPrice}"
    android:textColor="@{data.isSpecial ? @color/selector_item_textwithspecial : @color/selector_item_text}"
    style="@style/ProductPrice"/>

Проблема в том, что цвет TextView всегда оранжевый (если он имеет специальный) или черный. Выбор никогда не меняет цвет. Однако, если я удалю привязку данных, она сработает, как и ожидалось.

Например, следующее сделает TextView розовым (если он выбран) и оранжевым (если не выбран)

<TextView android:text="@{data.displayPrice}"
    android:textColor="@color/selector_item_textwithspecial"
    style="@style/ProductPrice"/>

Любой Идея, как решить эту проблему?

Спасибо ...

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

разобрался, см здесь

использование android:textColor="@{data.isSpecial ? @colorStateList/selector_item_textwithspecial : @colorStateList/selector_item_text}"

1 голос
/ 24 февраля 2020

Я думаю, вам нужно использовать ContextCompat для получения цветов.

<TextView android:text="@{data.displayPrice}"
    android:textColor="@{data.isSpecial ? @{ContextCompat.getColor(context, @color/selector_item_textwithspecial)} : ContextCompat.getColor(context, @color/selector_item_text)}"
    style="@style/ProductPrice"/>

, в то время как контекст необходимо объявить в элементе root в файле xml

tools:context="...."//path to your activity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...