2016-06-14 11 views
5

Ich versuche, Datenbindungsbibliothek in meinem Projekt zu verwenden, das in Kotlin geschrieben wird. Ich benutze Kotlin v.1.0.2 & Gradle Plugin v. 2.12 und mit Bindung Compiler. Mein build.gradle wie folgt konfiguriert:Datenbindung Kotlin Android Studio Fehler

android { 
    dataBinding { 
     enabled = true 
    } 
} 
kapt { 
    generateStubs = true 
} 
dependencies { 
    kapt "com.google.dagger:dagger-compiler:2.2" 
    provided "org.glassfish:javax.annotation:10.0-b28" 
    kapt "com.android.databinding:compiler:2.12" 
} 

In meinem Fragment Layout erklärte ich <data> Block mit einigen Variablen:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
     <import type="android.view.View"/> 
     <import type="com.xxx.ui.AuthorizationPresenter"/> 
     <import type="com.xxx.entity.AuthProvider"/> 
     <variable 
      name="model" 
      type="com.xxx.ui.authorization.Model"/> 
     <variable 
      name="presenter" 
      type="com.xxx.ui.authorization.AuthorizationPresenter"/> 

    </data> 
    <FrameLayout 
    ... /> 
</layout> 

Und dann in meiner AuthorizationFragment.kt Klasse Ich stelle diese Variablen:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
    binding = FragmentAuthorizationBinding.inflate(inflater) 
    binding?.presenter = presenter 
    binding?.model = Model() 
    binding?.addOnRebindCallback(object : OnRebindCallback<FragmentAuthorizationBinding>() { 
     override fun onPreBind(binding: FragmentAuthorizationBinding?): Boolean { 
      val sceneRoot = binding?.root as ViewGroup 
      TransitionManager.beginDelayedTransition(sceneRoot) 
      return true 
     } 
    }) 
    return binding?.root 
} 

Und das Problem ist, obwohl dieser Code erfolgreich kompiliert und APK baut, markiert Android Studio diese Zeilen

binding?.presenter = presenter 
binding?.model = Model() 

als ungültig und zeigt den folgenden Fehler: Cannot access class 'com.xxx.ui.authorization.AuthorizationPresenter'. Check your module classpath for missing or conflicting dependencies. Ich habe versucht, kapt 'com.google.guava:guava:19.0' zu meinem build.gradle hinzuzufügen, aber nichts hat sich geändert. Auch erwähnenswert ist, dass dieses Problem nur auftritt, wenn ich mein Fragment in Kotlin schreibe, wenn es in Java geschrieben ist, ist alles in Ordnung.

+2

Es ist ein bekannter Ausgabe https://youtrack.jetbrains.com/issue/KT-12402 –

+0

Ja, danke. Sehr nützlicher Tracker für diejenigen, die Kotlin benutzen. Scheint so etwas wie Kotlin Lint, denke ich –

Antwort

1

Bis die IDE den Fehler anzeigt, können Sie diese verwenden:

binding.setVariable(BR.model, Model()) 

Es ist nicht so präzise wie Kotlin Form, aber die rote Farbe wird nicht verrückt machen mehr;)