2016-03-01 15 views
20

Come per http://developer.android.com/tools/data-binding/guide.html#imports, siamo in grado di avere tali espressioni semplici in Visibilità:dati Android Binding: visibilità sul includono tag

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

Ma quando cerco di fare lo stesso in un tag include, in questo modo:

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

Allora Studio non solo mostra l'espressione in rosso, ma sulla costruzione dà il seguente errore nella classe di legame generato automaticamente:

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

Ecco dove si verifica l'errore nella classe di legame auto-generata

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

ho il sospetto che è necessario che 'Android: espressione visibility' di essere sulla vista radice della risorsa' image_layout', passando sopra 'notifica d'o' notification.notifType'. – CommonsWare

+0

@CommonsWare Sì. Ha funzionato. Ma il layout incluso è riutilizzabile, quindi non sono molto interessato a impostare la visibilità nella vista radice di quel layout. E senza dubbio riduce la leggibilità. Sarebbe davvero bello avere visibilità lavorando sul tag include stesso. –

risposta

35

immagino che cosa si sta cercando di fare sarebbe simile a questa:

Nel layout si sta includendo, specificare un variabile booleana e associarlo alla visibilità della vista desiderata

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

Poi, nel tuo chiamando il layout legano voi r valore

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