【问题标题】:String comparison on Android Data BindingAndroid数据绑定上的字符串比较
【发布时间】:2016-06-29 01:51:25
【问题描述】:

我正在尝试与 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}'

【问题讨论】:

  • 为什么说它不会运行.equals()之类的方法呢?数据绑定表达式支持方法。
  • 重新阅读文档,我找到了。我想我过去了。感谢您指出这一点,我会在我的代码中尝试!
  • 能否分享在数据绑定中使用equals()的代码
  • 当然。就像@anoopg87 一样。 "android:textColor='@{ notice.action.equals("continue") ?@color/enabledPurple : @color/disabledGray}'"

标签: android data-binding comparison string-comparison


【解决方案1】:

'continue'为char类型,需改为String与notice.action比较。

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

【讨论】:

    【解决方案2】:

    有两种方式:-

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

    【讨论】:

      【解决方案3】:

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

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

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

      解决方案:

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

      【讨论】:

      • 这可能会抛出 java.lang.reflect.InvocationTargetException: "String has been defined as java.lang.String but trying to re-define as String"
      【解决方案4】:

      尝试在xml中添加

      <data> <import type="String"/> </data> 可能有助于解决.equals()

      【讨论】:

        猜你喜欢
        • 2017-02-24
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        相关资源
        最近更新 更多