2016-11-28 37 views
0

當將ObservableArrayMap傳遞給包含的佈局時,會出現編譯錯誤:爲什麼ObservableArrayMap無法通過android綁定傳遞給包含的佈局?

錯誤:執行任務':app:compileDebugJavaWithJavac'失敗。

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:cannot find type element for ObservableArrayMap file:D:....\layout\activity_home.xml loc:35:54 - 35:56 ****\ data binding error ****

<?xml version="1.0" encoding="utf-8"?> 
     <layout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:bind="http://schemas.android.com/apk/res-auto"> 
      <data> 
       <import type="android.databinding.ObservableArrayMap"/> 
       <variable name="map" type="ObservableArrayMap&lt;String, String&gt;"/> 
      </data> 
      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <include layout="@layout/name" 
        bind:map="@{map}"/> 
       <include layout="@layout/contact" 
        bind:map="@{map}"/> 
      </LinearLayout> 
     </layout> 

貌似編譯器無法識別ObservableArrayMap類型。是否有任何其他語法來添加我缺少的類型?

+0

它看起來很適合我。它必須是一個錯誤。您是否嘗試過:''? –

+0

@GeorgeMount還是一樣!我已經在[這裏]報告了它(https://code.google.com/p/android/issues/detail?id=228994) – Jani

+0

我試着用Android Studio 2.3 canary 3試試這個,它工作正常。我還沒有嘗試過舊版本。也許它是固定的? –

回答

0

這爲我工作:

<?xml version="1.0" encoding="utf-8"?> 
<layout> 
    <data> 
     <import type="android.databinding.ObservableArrayMap" /> 
     <variable 
      name="map" 
      type="ObservableArrayMap&lt;String, String&gt;" /> 
    </data> 

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/activity_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{map.text}" 
      app:layout_constraintBottom_toBottomOf="@+id/activity_main" 
      app:layout_constraintLeft_toLeftOf="@+id/activity_main" 
      app:layout_constraintRight_toRightOf="@+id/activity_main" 
      app:layout_constraintTop_toTopOf="@+id/activity_main" /> 

    </android.support.constraint.ConstraintLayout> 
</layout> 

注意,IDE顯示紅色的變量,但它可以編譯和運行反正。

- 編輯 -

有涉及包括ObservableArrayMap爲2.3金絲雀3 Android Studio中的錯誤。您可以通過在包含的佈局中使用非通用變量來解決此問題,直到它在更高版本中得到修復。這裏是我包括的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<layout> 
    <data> 
     <import type="android.databinding.ObservableMap" /> 
     <variable 
      name="map" 
      type="ObservableMap" /> 
    </data> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@{(String)map[`text`]}"/> 
</layout> 

感謝您的發現!

+0

您可以嘗試添加僅當包含佈局並且綁定了變量 – Jani

相關問題