web-dev-qa-db-ja.com

Androidデータバインディングでの文字列比較

Android XMLデータバインディングで文字列を比較しようとしていますが、正しい結果が得られません。

コードで式を評価して、_notice.action == "continue"_を試してみましたが、これは誤りです。そしてもちろん、これもデータバインディングでは誤りです。

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

コードでnotice.action.equals("continue")を実行した場合にのみtrueになります。これは意図された動作です。私の問題は、equalsのようなメソッドを実行しないため、データバインディング式ではこれを実現できないことです。比較式を機能する別の式に置き換えるにはどうすればよいですか?

私は このガイド を使用しています。

編集:私は間違っていました、メソッドはXMLで許可されています。このようにしましたか:

_Android:textColor='@{ notice.action.equals("continue") ? @color/enabledPurple : @color/disabledGray}'
_
18
Ricardo Melo

それは2つの方法で行うことができます:-

1。xml内の最初の方法:-

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

2。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));
        }
26
Sagar Chorage

Stringクラスをレイアウトファイルにインポートする必要はありません。

2つの文字列の値が等しいかどうかを確認するには、equals()メソッドを使用する必要があります。

=は、2つの文字列が同じ参照オブジェクトを参照しているかどうかを確認するために使用されます。

解決:

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

Xmlに追加してみてください

_<data> <import type="String"/> </data>_解決に役立つ場合があります.equals()

2
Chickin Nick