web-dev-qa-db-ja.com

AndroidのTextViewの2つの文字列、データバインディングAPIを連結したい

Androidレイアウトでビューを設定するためにDataBinding AP​​Iを使用しています。これが私のレイアウトです。

layout.xml

<?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <data>
    <variable name="user" type="testing.sampleapp.com.sampleapp.User"/>
  </data>
<LinearLayout
    Android:orientation="vertical"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <TextView Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@{ "Hello " + user.firstName}"/>
</LinearLayout>

TextViewにHello UserNameを表示させたい。データバインディングAPIを使用してこれを実現する方法。

50

concat int withグレーヴアクセント( `)

Android:text="@{`Hello ` + user.firstName}"/>

複数の方法で連結できます。ここで確認してください concat-two-strings-in-textview-using-databinding

135
Ravi Rupareliya

これは、ソリューションへのコメントで@GeorgeMountによって既に回答されています。私にとって、これはここまでで最高のソリューションのように見えます。彼に+1してください

Android:text="@{@string/location(user.city,user.state)}"

あなたのstrings.xmlで

<string name="location">%1$s, %2$s</string>
37
Prakash

文字列を連結する多くの方法

1.文字列リソースの使用(ローカライズのために最も好ましい

Android:text= "@{@string/generic_name(user.name)}"

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

<string name="generic_name">Hello %s</string>

2.ハードコードされた連結

Android:text="@{`Hello ` + user.name}"/>

3. Stringのc​​oncatメソッドの使用

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

ここで、spacestrings.xml内に配置されるhtmlエンティティです。 XMLはHtmlエンティティまたは特殊文字を直接受け入れないためです。 (Link HTMLエンティティ)

<string name="space">\u0020</string>

4. String.format()の使用

Android:text= "@{String.format(@string/Hello, user.name)}"

このタイプのレイアウトでStringクラスをインポートする必要があります。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <data>
        <import type="String" />
    </data>
    <TextView
        Android:text= "@{String.format(@string/Hello, user.name)}"
        ... >
    </TextView>
</layout>

5.別の方法

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

この場合、strings.xmlに文字列リソースを配置します

<string name="generic_name">%1$s, %2$s</string>

他にも多くの方法がありますが、必要なものを選択してください。

21
Khemraj

Xmlは属性の値の単一引用符をサポートしているため、これも実行できます。

Android:text='@{"Hello "+user.firstName}'
7
ArJ

2つの方法があります。

最初の解決策

graveアクセントと連結( `)

Android:text="@{`Hello ` + user.firstName}"/>

2番目のソリューション

strings.xmlで文字列を宣言します

"Hello %1$s , (whatever you want to add then add here)"など。

AMDはString.format(stringResource, upsatename);を使用します

5
Yogesh Rathi

XMLレイアウトで連結を行うには:

<data>

/*This is used for Android view*/
<import type="Android.view.View" />

/*This is used for Android resources*/
<import type="com.myapp.R" />

/*This is app context*/
<variable
    name="context"
    type="Android.content.Context" />

/*This is used for model data*/
<variable
    name="item"
    type="com.myapp.models.Chapter" />
</data>

Android:text="@{item.serialNo.concat(@string/space).concat(item.title)}"

Strings.xmlに、空白のコードを追加しました:

<string name="space">\u0020</string>
3
Ready Android

Stringリソースをモデルのデータと連結する場合は、次の方法で実行できます。

 Android:text='@{@string/release_date+model.release_date}'
2
Jackky777