使用数据绑定连接两个动态字符串
Posted
技术标签:
【中文标题】使用数据绑定连接两个动态字符串【英文标题】:Concat two dynamic strings using Data Binding 【发布时间】:2017-07-18 06:13:45 【问题描述】:是否可以?
我的代码如下:
<TextView
android:id="@+id/text_view_activity_profile_name"
android:layout_
android:layout_
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 + 的两种方式绑定仅支持单个动态表达式。
【问题讨论】:
用 setText 在你的 java 代码中设置你的 textview。 【参考方案1】:试试这样吧
android:text='@userdata.firstName+" "+userdata.lastName'
或者……
android:text='@String.format("%s %s", userdata.firstName, userdata.lastName)'
【讨论】:
这是对的。不能对字符串连接使用双向数据绑定(@=...
而不是@...
)。第三个(更好的)选项是使用资源格式来支持多种语言:android:text="@@string/name(userdata.firstName, userdata.lastName)"
【参考方案2】:
由于您使用的是双向数据绑定,因此无法编译。 Android DataBinding 生成的类将无法将TextView
的值分配回userData
,因为使用了两个变量。您可以改用单向数据绑定:
android:text='@userData.firstName + " " + userData.lastName'
如果您真的想使用双向数据绑定,请为此制作一个自定义转换器。
【讨论】:
【参考方案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.
中查看许多其他方式【讨论】:
【参考方案4】: <TextView
..........
android:text='@String.format("%s %s","+91", userInfo.mobile)'
.............. />
如果你想添加多个字符串试试这个
android:text='@String.format("%s %s","+91", userInfo.mobile)'
输出:+91 0000000000
【讨论】:
以上是关于使用数据绑定连接两个动态字符串的主要内容,如果未能解决你的问题,请参考以下文章
C#datagridview控件绑定数据库,按照控件提示绑定后运行失败?