Я использую 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 привязки данных.
android
android-layout
data-binding
android-databinding
Сасанк Сункавалли
источник
источник
@{
Hello `+ user.firstName}`На это уже ответил @GeorgeMount в комментариях к одному из решений. Что мне кажется здесь лучшим решением.
android:text="@{@string/location(user.city,user.state)}"
в вашем strings.xml
<string name="location">%1$s, %2$s</string>
источник
Множество способов объединения строк
1. Использование строкового ресурса ( наиболее предпочтительно из-за локализации )
android:text= "@{@string/generic_name(user.name)}"
Просто сделайте такой строковый ресурс.
<string name="generic_name">Hello %s</string>
2. Жестко запрограммированный concat
android:text="@{`Hello ` + user.name}"/>
3. Использование
String
метода concatandroid: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>
Может быть много других способов, выберите тот, который вам нужен.
источник
Поскольку xml поддерживает одинарные кавычки для значений атрибута, вы также можете сделать это:
android:text='@{"Hello "+user.firstName}'
источник
Есть два пути.
Первое решение
concat с серьезным ударением (`)
android:text="@{`Hello ` + user.firstName}"/>
Второе решение
Объявите свою строку в
strings.xml
нравится
"Hello %1$s , (whatever you want to add then add here)"
.и использование
String.format(stringResource, upsatename);
источник
android:text="@{@string/hello(user.firstName)}"
В случае статической строки и других динамических вы можете использовать это
android:text="@{`Hello ` + user.firstName}"/>
В случае динамических данных вы можете использовать это.
android:text='@{user.firstName+" "+user.lastName}'
источник
Чтобы выполнить 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>
источник
если вы хотите объединить
String
ресурс с данными из вашей модели, вы можете сделать это следующим образом:android:text='@{@string/release_date+model.release_date}'
источник
Самый простой способ, который я нашел, - это заменить «» (одинарный) вместо «» (двойной). Например. У вас есть две переменные,
<variable name="a" type="String" /> <variable name="b" type="String" />
Теперь, чтобы объединить,
android:text='a + " " + b}'
источник
Вероятно, опоздал на вечеринку: приведенный ниже код также будет работать
android:text='@{@string/hello.concat(user.firstName)}'
источник