Я хочу конкатрировать две строки для TextView в android, Data Binding Api

Im использует DataBinding Api для установки представлений в макетах android. Вот мой макет.

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.

Ответ 1

дополнить его серьезным акцентом (')

android:text="@{'Hello ' + user.firstName}"/>

Вы можете объединить его несколькими способами, проверьте здесь concat-two-strings-in-textview-using-databinding

Ответ 2

На это уже ответил @GeorgeMount в комментариях к одному из решений. Что для меня выглядит лучшим решением на данный момент здесь. Пожалуйста, дайте ему +1

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

в вашем strings.xml

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

Ответ 3

Множество способов объединения строк

1. Использование строкового ресурса (наиболее предпочтительно из-за локализации)

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

Просто сделайте строковый ресурс вот так.

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

2. Жесткий код

android:text="@{'Hello ' + user.name}"/>

3. Использование метода String concat

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

Здесь space - это HTML-сущность, которая находится внутри strings.xml. Потому что XML не принимает Html-объекты или специальные символы напрямую. (Ссылка 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>

Там может быть много других способов, выберите тот, который вам нужен.

Ответ 4

Так как xml поддерживает одинарные кавычки для значений атрибута, вы также можете сделать это:

android:text='@{"Hello "+user.firstName}'

Ответ 5

Есть два способа.

Первое решение

Конкат с серьезным акцентом (')

android:text="@{'Hello ' + user.firstName}"/>

Второе решение

Объявите вашу строку в strings.xml

как "Hello %1$s, (whatever you want to add then add here)".

использовать String.format(stringResource, upsatename);

Ответ 6

Сделать concat в макете 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>

Ответ 7

если вы хотите объединить ресурс String с данными из вашей модели, вы можете сделать это следующим образом:

 android:text='@{@string/release_date+model.release_date}'

Ответ 8

Самый простой способ, который я нашел, это заменить '' (одинарный) вместо "" (двойной), Например, У вас есть две переменные,

<variable name="a" type="String" />
<variable name="b" type="String" />

Теперь объединить,

android:text='@{a + " " + b}