Сравнение строк в привязке данных 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 }"