【问题标题】:Concat two dynamic strings using Data Binding使用数据绑定连接两个动态字符串
【发布时间】:2017-07-18 06:13:45
【问题描述】:

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

我的代码如下:

<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 + 的两种方式绑定仅支持单个动态表达式。

【问题讨论】:

  • 用 setText 在你的 java 代码中设置你的 textview。

标签: android data-binding android-databinding


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-12
        • 2013-05-20
        • 2011-01-01
        • 1970-01-01
        • 2012-10-05
        • 2013-11-05
        • 1970-01-01
        相关资源
        最近更新 更多