web-dev-qa-db-ja.com

データバインディングを使用して2つの動的文字列を連結する

データバインディングを使用して2つの動的文字列を連結することは可能ですか?

私のコードは次のようになります:

<TextView
                    Android:id="@+id/text_view_activity_profile_name"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_below="@id/image_view_activity_profile_small_photo"
                    Android:layout_centerHorizontal="true"
                    Android:layout_marginTop="15dp"
                    Android:text="@={userdata.firstName+' '+userdata.lastName}"
                    Android:textColor="@color/white"
                    Android:textSize="24sp" />

、ただし正しい方法ではありません:エラー:(52、42)式(firstNameUserdataCha)+(lastNameUserdata)を反転できません:演算子+を使用した双方向バインディングは単一の動的式のみをサポートします。

8
Igor Mańka

代わりにこのようにしてみてください

Android:text='@{userdata.firstName+" "+userdata.lastName}' 

または代わりに...

Android:text='@{String.format("%s %s", userdata.firstName, userdata.lastName)}'
17
Carl Poole

以下が推奨される方法です。

ローカリゼーション/多言語がある場合にも役立ちます

このような文字列リソースを使用します。

Android:text="@{@string/generic_name(user.firstName,user.lastName)}"

strings.xmlに文字列リソースを作成します

<string name="generic_name">first name : %1$s and last name : %2$s</string>

この回答。で他の多くの方法を確認できます

5
Khemraj

双方向のデータバインディングを使用しているため、コンパイルされません。 Android DataBindingで生成されたクラスは、2つの変数が使用されているため、TextViewの値をuserDataに割り当てることができません。1つを使用できます-代わりにデータバインディングの方法:

Android:text='@{userData.firstName + " " + userData.lastName}'

本当に双方向のデータバインディングを使用したい場合は、そのためのカスタムコンバーターを作成してください。

2
Ahmad Fadli