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

Posted

技术标签:

【中文标题】Android数据绑定上的字符串比较【英文标题】:String comparison on Android Data Binding 【发布时间】: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'" 【参考方案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()

【讨论】:

以上是关于Android数据绑定上的字符串比较的主要内容,如果未能解决你的问题,请参考以下文章

在 TreeTable 绑定上添加动态过滤器

mariadb 作为 docker 容器 - 主机挂载绑定上的启动损坏

端口绑定上的游戏制作者网络问题

Powershell - 在 https 绑定上设置 SSL 证书

net.tcp 绑定上的线程不足 - TCP 错误代码 10061

在 Rust 项目的 C 绑定上运行 jextract 时出现致命错误“'stdlib.h' 文件未找到”