Android数据绑定上的字符串比较

Ric*_*elo 17 data-binding comparison android string-comparison

我正在尝试与android XML数据绑定进行字符串比较,但我没有得到正确的结果.

在代码中评估我的表达式,我尝试notice.action == "continue"这是错误的.当然,在数据绑定中,这也是错误的.

android:textColor='@{ notice.action == "continue" ? @color/enabledPurple : @color/disabledGray}'
Run Code Online (Sandbox Code Playgroud)

只有notice.action.equals("continue")通过代码才能实现.这是预期的行为.我的问题是我无法通过数据绑定表达式完成此操作,因为它不会运行类似的方法equals.我该怎么做才能将比较表达式替换为另一个有效的比较表达式?

我正在使用本指南.

编辑:我错了,XML中允许使用方法.这样做了:

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

小智 25

它可以通过两种方式实现: -

    android:textColor="@{notice.action.equals(`continue`) ? @color/enabledPurple : @color/disabledGray }"
Run Code Online (Sandbox Code Playgroud)
  1. 第二种方式(以编程方式): -

    在xml中: -
    app:setColor ="@ {notice.action}"

内部活动或自定义类: -

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));
        }
Run Code Online (Sandbox Code Playgroud)


Bhu*_*shi 6

无需将 String 类导入到布局文件中。

要检查两个字符串是否具有相等的值,equals()应使用方法。

= 用于检查两个字符串是否指向同一个引用对象。

解决方案:

android:textColor="@{notice.action.equals(`continue`) ? @color/enabledPurple : @color/disabledGray }"
Run Code Online (Sandbox Code Playgroud)


Jag*_*paw 5

'Continue' 是 char 类型,所以应该将其更改为 String 以便与 notification.action 进行比较。

android:textColor="@{notice.action.equals(String.valueOf(`continue`)) ? @color/enabledPurple : @color/disabledGray }"
Run Code Online (Sandbox Code Playgroud)