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

时间:2016-03-14 06:04:44

标签: android data-binding comparison string-comparison

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

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

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

只有通过代码执行notice.action.equals("continue")时才会生效。这是预期的行为。我的问题是我无法通过数据绑定表达式实现这一点,因为它不会运行像equals这样的方法。如何将比较表达式替换为另一个有效的比较表达式?

我正在使用this guide

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

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

4 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:1)

尝试添加xml

<data> <import type="String"/> </data> 解决.equals()

可能有所帮助

答案 2 :(得分:1)

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

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

= 用于检查两个字符串是否引用相同的引用对象。

解决方案:

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

答案 3 :(得分:0)

“ continue”是char类型,因此应将其更改为String以便与notice.action进行比较。

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