it-swarm.com.de

Kotlin-Android: Ungelöste Referenzdatenbindung

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

114
Mikhail

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
}
80
lrampazzo

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.

56
Pratik Butani

Update 2: Dies ist eine wirklich alte Antwort, beziehen Sie sich stattdessen auf die Antwort von lrampazzo.

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

11
Jaydeep

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

10
Sijansd

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

6
Sowattana Sigen

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'
    }
5
Garf1eld

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

2
d4h

Wichtiges Update

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.

Aktivieren Sie einfach dataBinding auf App-Ebene build.gradle.

Android {
    dataBinding {
        enabled = true
    }
}

Es wird alles automatisch für Sie erledigen.

Sie können die folgenden Zeilen auf sichere Weise entfernen:

  • Databinding.compiler entfernen

    kapt 'com.Android.databinding:compiler:3.0.1'
    
  • kapt entfernen

    kapt {
        generateStubs = true
    }
    

Meine komplette Konfig

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

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.

0
Mahmoud

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;
            }
0
Shripal Shah

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.

0

diese arbeit für mich in android studio ver 3.1.3

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

Nutzungsbeispiel anzeigen

0
emad pirayesh

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.

0
gloomyad