Ich habe die folgende Fragment-Klasse, die in Java geschrieben wurde, unter Verwendung einer neuen Datenbindungsbibliothek
import com.example.app.databinding.FragmentDataBdinding;
public class DataFragment extends Fragment {
@Nullable
private FragmentDataBinding mBinding;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
return mBinding.getRoot();
}
}
Es kompiliert und läuft gut.
Ich habe versucht, es in Kotlin neu zu schreiben, und kam zu folgendem Ergebnis:
import com.example.app.databinding.FragmentDataBdinding
class ProfileFragment : Fragment() {
private var mBinding: FragmentDataBinding? = null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
return mBinding!!.getRoot()
}
}
Aber jetzt gibt Schritt :app:compileDebugKotlin
folgendes aus:
Fehler: (16, 38) Nicht aufgelöster Verweis: Datenbindung
Fehler: (37, 27) Nicht aufgelöster Verweis: FragmentDataBinding
Wie kann ich die Android-Datenbindungsbibliothek mit Kotlin verwenden?
Mein oberster build.gradle
:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
classpath 'com.Android.databinding:dataBinder:1.0-rc4'
}
}
allprojects {
repositories {
jcenter()
}
}
Mein build.gradle
im App-Verzeichnis (nur relevante Teile):
apply plugin: 'com.Android.application'
apply plugin: 'com.Android.databinding'
apply plugin: 'kotlin-Android'
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
buildscript {
ext.kotlin_version = '0.14.451'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-Android-extensions:$kotlin_version"
}
}
repositories {
mavenCentral()
maven {
url 'http://oss.sonatype.org/content/repositories/snapshots'
}
}
Ich verwende Android Studio 1.4, Build-Tools Version 23.0.1, Android SDK 23, SDK-Tools 24.4.0
Versuchen Sie es mit dieser Konfiguration:
In main build.gradle :
buildscript {
ext.kotlin_version = '<kotlin-version>'
ext.Android_plugin_version = '2.2.0-alpha4'
dependencies {
classpath "com.Android.tools.build:gradle:$Android_plugin_version"
//... rest of the content
}
}
App build.gradle :
Android {
dataBinding {
enabled = true
}
}
dependencies {
kapt "com.Android.databinding:compiler:$Android_plugin_version"
}
kapt {
generateStubs = true
}
Ich habe eine neue Lösung gefunden, hoffe es hilft Ihnen.
Prüfen Sie zunächst, ob das Plugin angewendet wurde:
apply plugin: 'kotlin-kapt'
dann
Android {
...
...
dataBinding {
enabled = true
}
...
...
}
Möglicherweise haben Sie einen Fehler in der Abhängigkeit:
BENUTZEN
kapt 'com.Android.databinding:compiler:3.0.1'
anstatt
compile 'com.Android.databinding:compiler:3.0.1'
Vielen Dank.
Es funktioniert mit 1.0-rc4, put
kapt 'com.Android.databinding:compiler:1.0-rc4'
in deine Abhängigkeiten
Danke Ghedeon, für den Link in den Kommentaren
Update: Hier ist ein wirklich einfaches Hallo-Welt-Beispielprojekt
Die Version des Data Binding-Compilers stimmt mit der Gradle-Version in Ihrer Projektdatei build.gradle überein:
// at the top of file
apply plugin: 'kotlin-kapt'
Android {
dataBinding.enabled = true
}
dependencies {
kapt "com.Android.databinding:compiler:3.0.0-beta1"
}
und die gradle Version ist
classpath 'com.Android.tools.build:gradle:3.0.0-beta1'
Hier ein Beispiel, um die Verwendung der Datenbindungsbibliothek in Kotlin zu vervollständigen.
https://proandroiddev.com/modern-Android-entwicklung-mit-kotlin-september-2017-part-1-f976483f7bd6
Um das Problem zu lösen, muss man sich setzen
apply plugin: 'kotlin-kapt'
am oberen Rand von build.gradle (Modul: app), dann fügen Sie diese Zeile in Abhängigkeiten ein
kapt "com.Android.databinding:compiler:[YOUR_Android_PLUGIN_VERSION]"
Sie finden die Android-Plugin-Version über das Menü
File > Project Structure > Project
Dann erneut synchronisieren. Wenn Sie diese Warnung sehen, ignorieren Sie sie.
Gradle-Plug-Ins von Drittanbietern können die Ursache sein
Probieren Sie das aus.Andrid Studio 2.0 (2.1)
In build.gradle
Android{
dataBinding {
enabled = true
}
...
}
dependencies {
kapt 'com.Android.databinding:compiler:2.0.0-rc1'
....
}
kapt {
generateStubs = true
}
In meinem Projekt: buildToolsVersion = "23.0.3"
in der obersten Ebene von build.gradle
dependencies {
classpath 'com.Android.tools.build:gradle:2.0.0'
}
Konfigurationsdatenbindung in kotlin
build.gradle (Ordner-App)
apply plugin: 'kotlin-kapt'
Android {
...
dataBinding {
enabled = true
}
}
dependencies {
// data binding
kapt "com.Android.databinding:compiler:3.1.3"
}
Genießen Sie Kotlin ...
Folgendes hinzufügen in dir app build.gradle
kapt "com.Android.databinding:compiler:$Android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to
Das wird den Trick tun.
$Android_plugin_version
ist Version von com.Android.tools.build:gradle
in application build.gradle
Fügen Sie dies auch zu Ihrem Modul hinzu build.gradle
Android {
/// Existing Code
kapt {
generateStubs = true
}
}
Sie können in Dokumentation von Android sehen.
Der neue Compiler in Version 3.2 ist standardmäßig aktiviert.
Also Aktualisieren Sie Ihr Android Studio auf V3.2 oder neuere . und entfernen Sie alle unnötigen Konfigurationsdateien.
build.gradle
.Android {
dataBinding {
enabled = true
}
}
Es wird alles automatisch für Sie erledigen.
Databinding.compiler entfernen
kapt 'com.Android.databinding:compiler:3.0.1'
kapt
entfernen
kapt {
generateStubs = true
}
build.gradle (Projekt)
kotlin_version = '1.2.71'
classpath 'com.Android.tools.build:gradle:3.2.0'
Verwenden Sie die neueste Version von gradle . Verwenden Sie die neueste Version von kotlin .
build.gradle (App)
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
compileSdkVersion 28
targetSdkVersion 28
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
Important Kopieren und Einfügen von Konfigurationen nicht einfach. Siehe diese Antwort für die Einrichtung der Kotlin-Version.
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.Zip
In meinem Fall hinzufügen
kapt {
generateStubs = true
}
Das Problem für mich gelöst. Ich habe es beim ersten Mal ignoriert, ich dachte, es ist für das Problem irrelevant:
Ungelöste Referenzdatenbindung
Aber jetzt funktioniert die Datenbindung gut.
Fügen Sie Datenbinding in Android Project hinzu, indem Sie Kotlin-Sprache verwenden.
Untere Schritte
- Zuerst müssen Sie das folgende Plugin hinzufügen
**apply plugin: 'kotlin-kapt'**
- Zweite Datenbindung aktiviert true
**dataBinding {
enabled = true
}**
Dieser Punkt wurde in app.build.gradle Nach dem Klicken auf "SYNC NOW" hinzugefügt.
Lets Zum Beispiel haben Sie die Profilaktivität bearbeitet und dann die Bindungsvariable in kotlin definiert?
lateinit var buildProfileBinding: ActivityBuildProfileBinding
buildProfileBinding = getBinding()
Get binding ist hier eine Methode, mit der der Typ des Bindungsobjekts behandelt wird
protected <T extends ViewDataBinding> T getBinding() {
return (T) binding;
}
In meinem Fall war der Fehler Unresolved reference: RegisterationUserBinding
. Ich habe gerade meinen Layoutnamen fragment_registeration_user
wie diesen FragmentRegisterationUserBinding
verwendet und ihn im Datenbindungslayout erstellt. Der Fehler wurde behoben.
diese arbeit für mich in android studio ver 3.1.3
apply plugin: 'kotlin-kapt'
dataBinding {
enabled = true
}
Ich möchte meine eigenen Erfahrungen teilen. Um die Datenbindung mit Kotlin in Android Studio zu verwenden, ist es ausreichend, Daten hinzuzufügen
dataBinding {
enabled = true
}
Danach "synchronisiere es" und, es ist sehr wichtig, "mache ein Projekt". Danach ist Ihr gesamtes Objekt aktiv und kann verwendet werden.