2016-03-01 32 views
20

Theo http://developer.android.com/tools/data-binding/guide.html#imports, chúng ta có thể có biểu hiện đơn giản như vậy trong visibility:dữ liệu Android Binding: tầm nhìn trên bao gồm thẻ

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

Nhưng khi tôi cố gắng để làm như vậy trong một thẻ include, như vậy:

<include 
android:id="@+id/image_layout" 
layout="@layout/image_layout" 
android:visibility="@{notification.notifType == 0 ? View.VISIBLE : View.GONE}"/> 

sau đó, Studio không chỉ cho thấy sự biểu hiện màu đỏ, nhưng khi xây dựng nó mang lại cho các lỗi sau trong lớp liên kết tự động tạo ra:

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

Đây là nơi các lỗi xảy ra trong lớp liên kết tự động tạo ra

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

Tôi nghi ngờ rằng bạn cần mà 'android: biểu visibility' để được vào xem gốc của' nguồn image_layout', đi qua 'notification' hoặc 'notification.notifType'. – CommonsWare

+0

@CommonsWare Yep. Điều đó hiệu quả. Nhưng bố cục được bao gồm có thể sử dụng lại được, vì vậy tôi không muốn thiết lập chế độ hiển thị trong chế độ xem gốc của bố cục đó. Và nó không có nghi ngờ làm giảm khả năng đọc. Sẽ thực sự tốt đẹp để có được khả năng hiển thị làm việc trên thẻ bao gồm chính nó. –

Trả lời

35

Tôi tưởng tượng những gì bạn đang cố gắng làm sẽ giống như thế này:

Trong cách bố trí bạn đang kể, chỉ định một biến boolean và ràng buộc nó vào tầm nhìn giao diện bạn muốn của

<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ồi Trong kêu gọi bố trí ràng buộc của bạn, bạn r giá trị

<include 
    android:id="@+id/image_layout" 
    layout="@layout/image_layout" 
    bind:isVisible="@{notification.notifType == 0}"/> 
Các vấn đề liên quan