可见性不适用于数据绑定android

时间:2016-04-29 12:35:34

标签: android android-layout android-fragments android-databinding

我使用android studio 2.1在android中使用最新的数据绑定。 使用可见性标记,如下面的代码所述,获取错误

  

java.lang.RuntimeException:发现数据绑定错误。   / data binding error **** msg:标识符必须具有XML文件中的用户定义类型。视图缺少它   文件:d:\ HP \ HealthPortal_Android \代码\程序\ SRC \主\水库\布局\ cardview_image_twotextview.xml   当地:68:90 - 68:93   数据绑定错误

   <TextView
                        android:id="@+id/card_sub_title"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/card_title"
                        android:layout_marginLeft="@dimen/carview_margin"
                        android:layout_toRightOf="@+id/card_image"
                        android:text="@{toolsAndTrackersCards.subtitle}"
                        android:textColor="@color/black"
                        android:textSize="20sp"
                        android:visibility="@{toolsAndTrackersCards.subtitle.equals(@string/Empty_String) ?  View.VISIBLE : View.GONE}"
                        />

完成了一些google并没有找到解决方案。 @ string / Empty_String 在string.xml文件中定义为空字符串“”。我做错了。

Android data binding, Radio Button not updating

3 个答案:

答案 0 :(得分:12)

将此添加到您的cardview_image_twotextview.xml

<data>
    <import type="android.view.View" />
    <!--your variables-->
</data>

答案 1 :(得分:3)

  

可以在数据元素内使用零个或多个导入元素。   这些允许您轻松引用布局文件中的类   就像在Java中一样。

您需要导入View类才能使用其属性。

<data>
    <import type="android.view.View"/>
</data>

您也可以推荐官方DataBinding guideline

答案 2 :(得分:2)

要在字符串为时隐藏视图,请在数据绑定中使用以下表达式

<data>
    <import type="android.view.View"/>
    <variable
        name="item"
        type="com.test.model.Item" />
</data>


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{item.title}"
    android:visibility='@{item.title.equals("") ? View.GONE : View.VISIBLE}'/>

注意::需要使用外部单引号字符串才能使用双引号  代表空字符串

如果要检查,请使用以下代码:

<data>
    <import type="android.view.View"/>
    <import type="android.text.TextUtils"/>
    <variable
        name="item"
        type="com.test.model.Item" />
</data>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{item.title}"
    android:visibility="@{TextUtils.isEmpty(item.title) ? View.GONE : View.VISIBLE}"/>