Сравнение строк в привязке данных Android

Я пытаюсь сравнить строки с привязкой данных Android к XML, но у меня нет правильных результатов.

Оценивая свое выражение в коде, я пытаюсь notice.action == "continue" и это неверно. И в привязке данных это тоже ложь, конечно.

android:textColor='@{ notice.action == "continue" ? @color/enabledPurple : @color/disabledGray}'

Это становится правдой только тогда, когда я делаю notice.action.equals("continue") по коду. Это предполагаемое поведение. Моя проблема в том, что я не могу сделать это с помощью выражений привязки данных, потому что он не будет запускать методы, подобные equals. Что я могу сделать, чтобы заменить выражение сравнения другим, которое работает?

Я использую это руководство.

Изменение: я был не прав, методы разрешены в XML. Сделал это так:

android:textColor='@{ notice.action.equals("continue") ? @color/enabledPurple : @color/disabledGray}'

Ответ 1

Это можно сделать двумя способами:

1. Первый способ внутри XML: -

    android:textColor="@{notice.action.equals('continue') ? @color/enabledPurple : @color/disabledGray }"

2. Второй способ (программно) Внутри XML: -

app:setColor="@{notice.action}" 
inside activity or custom class : -    
    @BindingAdapter("setColor")
        public static void setTextColor(TextView textView, String s) {

             Context context = textView.getContext();

        textView.setTextColor(s.equals("continue") ? context.getResources().getColor(R.color.enabledPurple) : context.getResources().getColor(R.color.disabledGray));
        }

Ответ 2

Попробуйте добавить xml

<data> <import type="String"/> </data> Это может помочь разрешить .equals()

Ответ 3

Нет необходимости импортировать класс String в файл макета.

Чтобы проверить, имеют ли две строки одинаковое значение или нет, следует использовать метод equals().

= используется для проверки того, ссылаются ли две строки на один и тот же ссылочный объект или нет.

Решение:

android:textColor="@{notice.action.equals('continue') ? @color/enabledPurple : @color/disabledGray }"