我想在 android 中为 TextView 连接两个字符串,即 Data Binding Api

我使用 DataBindingApi 在 android 布局中设置视图。

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 显示 你好,用户名。如何使用数据绑定 api 实现这一点。

84715 次浏览

严肃的口音(’)连接

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

你可以用多种方式连接它,在这里检查它 Concat-two-string-in-textview-using-databinding

有两种方法。

第一个解决方案

用严肃的口音说话

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

第二个解决方案

strings.xml中声明字符串

就像 "Hello %1$s , (whatever you want to add then add here)"

使用 String.format(stringResource, upsatename);

由于 xml 支持对属性值使用单引号,因此还可以这样做:

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

要在 xml 布局中执行 concat:

<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>

@ GeorgeMount 在对其中一个解决方案的评论中已经回答了这个问题。在我看来,这是目前为止最好的解决办法。

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

在 strings.xml 中

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

如果您想连接 String资源与您的模型中的数据,您可以这样做:

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

我发现最简单的方法是用“(single)”代替“(double)”, 对于伊格,你有两个变量,

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

现在连接,

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

对于静态字符串和其他动态字符串,可以使用

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

对于动态数据,可以使用。

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

可能会迟到: 下面的代码也可以工作

android:text='@{@string/hello.concat(user.firstName)}'

我给你几分钱

如果你想 检查 null 并设置默认值试试这个答案

 android:text='@{(user.first_name ?? "") +" "+ (user.last_name ?? "")}'

与后勾符号连接
例如:

android:text="@{product.price + `USD`}"