2016-03-01 3 views
20

Согласно http://developer.android.com/tools/data-binding/guide.html#imports, мы можем иметь такие простые выражения в видимости:Android Data Binding: видимость на включает тег

<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 Да. Это сработало. Но включенный макет многоразовый, поэтому я не очень увлекаюсь настройкой видимости в корневом представлении макета. И это, без сомнения, снижает читаемость. Было бы очень приятно получить видимость, работая над тегом include. –

ответ

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> 

Затем в вызывающем макете затруднительных вы г значение

<include 
    android:id="@+id/image_layout" 
    layout="@layout/image_layout" 
    bind:isVisible="@{notification.notifType == 0}"/> 
Смежные вопросы