Хобрук: Ваш путь к мастерству в программировании

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

  • Почему вы говорите, что он не будет запускать такой метод, как .equals()? Методы поддерживаются в выражениях привязки данных. 14.03.2016
  • Перечитав документы, я нашел это. Думаю, я прошел через это. Спасибо, что указали на это, я попробую в своем коде! 14.03.2016
  • Не могли бы вы поделиться кодом для использования equals() в привязке данных 14.07.2016
  • Конечно. Вот так @anoopg87. android:textColor='@{notice.action.equals(продолжить)? @color/enabledPurple : @color/disabledGray}' 14.07.2016

Ответы:


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));
        }
29.08.2017

2

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

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

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

Решение:

android:textColor="@{notice.action.equals(`continue`) ? @color/enabledPurple : @color/disabledGray }"
18.07.2018
  • Это может вызвать java.lang.reflect.InvocationTargetException: String уже определен как java.lang.String, но пытается переопределить как String 04.03.2021

  • 3

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

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

    08.11.2016

    4

    «continue» — это символьный тип, поэтому его следует изменить на String, чтобы сравнить его с уведомлением.

    android:textColor="@{notice.action.equals(String.valueOf(`continue`)) ? @color/enabledPurple : @color/disabledGray }"
    
    16.10.2020
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..