Concat使用数据绑定的两个动态字符串

时间:2017-02-27 15:04:35

标签: android data-binding android-databinding

是否可以使用数据绑定来连接两个动态字符串?

我的代码如下:

<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)不能被反转:与operator +的双向绑定仅支持单个动态表达式。

3 个答案:

答案 0 :(得分:16)

尝试这样做

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

或者替代......

android:text='@{String.format("%s %s", userdata.firstName, userdata.lastName)}'

答案 1 :(得分:3)

推荐以下方式。

当您具有本地化/多语言

功能时,该功能也非常有用

使用这样的字符串资源。

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>

您可以在 this answer.

中查看其他多种方式

答案 2 :(得分:2)

由于您使用的是双向数据绑定,因此无法编译。 Android DataBinding生成的类将无法将TextView的值分配回userData,因为使用了两个变量。您可以改为使用单向数据绑定:

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

如果你真的想使用双向数据绑定,那么为它做一个自定义转换器。