2015-07-27 13 views
7

layout_content.xml 'non riesce a trovare variabile simbolo' nei dati Android vincolante includono layout di

<layout> 
    <android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
      /> 
    </android.support.design.widget.AppBarLayout> 
</layout> 

layout_main.xml

<layout> 
    <android.support.v4.widget.DrawerLayout 
    android:id="@+id/dl_main_drawer" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

     <include layout="@layout/layout_content" android:id="@+id/content"/> 

    </android.support.v4.widget.DrawerLayout> 
</layout> 

MainActivity.java

LayoutMainBinding binding = DataBindingUtil.setContentView(this,R.layout.layout_main); 
setSupportActionBar(binding.content.toolbar); 

Studio Android controllo intellisense binding.content è ViewDataBinding obj

ma costruire errore 'non riesce a trovare il simbolo contenuto variabile' Sarà questo avere alcun problema? thx!

+0

È questo con rc1 o rc0? –

+0

Io uso rc1. e gradle è 1.3.0-beta4 – tatsuyuki

+0

Questo succede quando hai rinominato un file di layout e la vecchia classe Binding generata è ancora in agguato. Prova a scegliere "Build-> Clean Project" e quindi ricompila. –

risposta

8

Il layout activity_main.xml:

<layout> 
    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     tools:context=".MainActivity"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <include layout="@layout/layout_content" android:id="@+id/content" /> 

     </LinearLayout> 
    </android.support.v4.widget.DrawerLayout> 
</layout> 

genera ActivityMainBinding.java. Nella tua MainActivity.java, si utilizza il campo generato per content nell'argomento setSupportActionBar:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main); 
    setSupportActionBar(binding.content.toolbar); 
} 

Normalmente un layout genererà campi finali pubblici per ciascuna delle visualizzazioni con android:id s e sottoclassi vincolante per ciascuna delle include con ID. In questo caso, il sistema di associazione dati non ha rilevato che il contenuto incluso @layout/layout_content era un layout vincolante e quindi non ha acquisito la classe Binding per l'inclusione.

Quando una variabile è associata a un inclusione, il sistema di associazione dati lo utilizzerà per determinare che il layout incluso è un layout vincolante. Quindi, se il layout ha avuto questo invece:

<include layout="@layout/layout_content" 
     android:id="@+id/content" 
     app:someVar="@{someVar}" /> 

si avrebbe ottenuto un campo di contenuti con il tipo di LayoutContentBinding. Ciò presuppone che someVar sia dichiarato in entrambi activity_main.xml e layout_content.xml.

L'errore in Android Studio indicava la posizione corretta, ma era difficile da capire. In futuro, è possibile cercare la classe di associazione generata nella directory app/build. Questo può aiutarti a capire cosa significa l'errore.

Ho archiviato un bug per correggere l'errore - dovremmo generare un campo finale pubblico per l'inclusione con l'ID.

+0

Ora è lavoro, ma penso che questa non sia un'ottima soluzione. Spero che il prossimo aggiornamento '' è lavoro. Grazie. – tatsuyuki

+0

Ho segnalato di inviare il tracker qui https://code.google.com/p/android/issues/detail?id=186914. Spero che si risolva nel prossimo futuro e non eliminano il mio problema. – KimKha

+1

È risolto da rc2, che è uscito questa settimana. Godere! –

Problemi correlati