I'm trying to make a string comparison with android XML data binding, but I'm not having the right results.
Evaluating my expression in code, I try notice.action == "continue"
and this is false. And in data binding, this is false too, of course.
android:textColor='@{ notice.action == "continue" ? @color/enabledPurple : @color/disabledGray}'
It only gets true when I do notice.action.equals("continue")
by code. This is the intended behavior. My problem is that I can't accomplish this with data binding expressions, because it won't run methods like equals
. What can I do to replace the comparison expression with another one that works?
I'm using this guide .
Edit: I was wrong, methods are allowed in XML. Did it this way:
android:textColor='@{ notice.action.equals("continue") ? @color/enabledPurple : @color/disabledGray}'
It can be do in two way :-
1. First way inside xml :-
android:textColor="@{notice.action.equals(`continue`) ? @color/enabledPurple : @color/disabledGray }"
2. Second way (programatically) Inside 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));
}
There is no need to import the String class into your layout file.
To check whether two strings have equal value or not equals()
method should be used.
=
is used to check the whether the two strings refer to the same reference object or not.
Solution:
android:textColor="@{notice.action.equals(`continue`) ? @color/enabledPurple : @color/disabledGray }"
Try to add in xml
<data> <import type="String"/> </data>
It may help to resolve .equals()
'continue' 是 char 类型,因此应该将其更改为 String 以与 notice.action 进行比较。
android:textColor="@{notice.action.equals(String.valueOf(`continue`)) ? @color/enabledPurple : @color/disabledGray }"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.