根据http://developer.android.com/tools/data-binding/guide.html#imports,我们可以在可见性中使用以下简单表达式:

<TextView
..
android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>

但是,当我尝试在include标记中执行相同操作时,如下所示:
<include
android:id="@+id/image_layout"
layout="@layout/image_layout"
android:visibility="@{notification.notifType == 0 ? View.VISIBLE : View.GONE}"/>

然后Studio不仅以红色显示该表达式,而且在构建时会在自动生成的绑定(bind)类中产生以下错误:



这是自动生成的绑定(bind)类中发生错误的地方
// batch finished
if ((dirtyFlags & 0x3L) != 0) {
    // api target 1
    this.imageLayout.setVisibility(NotifTypeNotificatio1);
}
imageLayout.executePendingBindings();

最佳答案

我想您正在尝试做的事情看起来像这样:

在您要包括的布局中,指定一个 bool 变量并将其绑定(bind)到所需 View 的可见性

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

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

        <variable
            name="isVisible"
            type="boolean"/>

    </data>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="@{isVisible ? View.VISIBLE : View.GONE}"/>

</layout>

然后在您的调用布局中绑定(bind)您的值
<include
    android:id="@+id/image_layout"
    layout="@layout/image_layout"
    bind:isVisible="@{notification.notifType == 0}"/>

10-04 23:09
查看更多