2016-03-01 38 views
20

http://developer.android.com/tools/data-binding/guide.html#imports,我們可以在能見度如此簡單的表述:Android的數據綁定:能見度包括標籤

<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}"/> 

然後工作室不僅示出了紅色的表達,但在構建它給出了在自動生成的綁定類以下錯誤:

Error:(138, 29) error: cannot find symbol method setVisibility(int)

這裏就是在自動生成綁定類出現錯誤

// batch finished 
if ((dirtyFlags & 0x3L) != 0) { 
    // api target 1 
    this.imageLayout.setVisibility(NotifTypeNotificatio1); 
} 
imageLayout.executePendingBindings(); 
+1

我懷疑你需要一個'安卓visibility'表達要對'image_layout'資源的根本觀點,在經過'notification'或'notification.notifType'。 – CommonsWare

+0

@CommonsWare是的。這工作。但是包含的佈局是可重用的,所以我不太想在該佈局的根視圖中設置可見性。它無疑降低了可讀性。在包含標籤本身上獲得可見性真的很棒。 –

回答

35

我想象你正在嘗試做的會是這個樣子:

在要包括的佈局,指定布爾變量並將其綁定到所需視圖的可視性

<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> 

然後在您的呼叫佈局綁定你r值

<include 
    android:id="@+id/image_layout" 
    layout="@layout/image_layout" 
    bind:isVisible="@{notification.notifType == 0}"/>