Kotlin-android: unresolved reference databinding

匿名 (未验证) 提交于 2019-12-03 01:58:03

问题:

I have following fragment class written in Java using new databinding library

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();     } }

It compiles and runs fine.
I tried to rewrite it in Kotlin and came up with following:

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

But now step :app:compileDebugKotlin outputs the following:

Error:(16, 38) Unresolved reference: databinding
Error:(37, 27) Unresolved reference: FragmentDataBinding

How can I use android-databinding library with Kotlin?

My top-level 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()     } }

My build.gradle in app dir (only relevant parts):

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

I'm using Android Studio 1.4, Build tools version 23.0.1, Android SDK 23, SDK tools 24.4.0

回答1:

Try use this configuration:

In main build.gradle:

buildscript {     ext.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 }


回答2:

I found new solution, hope it will helps you.

First of all check whether plugin applied:

apply plugin: 'kotlin-kapt'

then

android {     ...     ...     dataBinding {         enabled = true     }     ...     ... }

You might have an error in dependency:

USE

kapt 'com.android.databinding:compiler:3.0.1'

instead of

compile 'com.android.databinding:compiler:3.0.1'

Thank you.



回答3:

The version of Data Binding compiler is same as gradle version in your project build.gradle file:

// at the top of file  apply plugin: 'kotlin-kapt'   android {   dataBinding.enabled = true }  dependencies {   kapt "com.android.databinding:compiler:3.0.0-beta1" }

and the gradle version is

classpath 'com.android.tools.build:gradle:3.0.0-beta1'

Here is an example link to complete using of databinding library in kotlin.

https://proandroiddev.com/modern-android-development-with-kotlin-september-2017-part-1-f976483f7bd6



回答4:

Update 2: This is a really old answer, instead refer to lrampazzo's answer.

It works with 1.0-rc4, put

kapt 'com.android.databinding:compiler:1.0-rc4' 

into your dependencies

Thanks Ghedeon, for the link in comments

Update: Here's a really simple hello world example project



回答5:

Try this.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 my project: buildToolsVersion = "23.0.3"

in top level build.gradle

dependencies {         classpath 'com.android.tools.build:gradle:2.0.0'     }


回答6:

I recommend upgrading kotlin and the Android plugin to the latest stable versions. If that doesn't work, you'll need to raise an issue with Jetbrains /Google.

build.gradle:

   android {         dataBinding {             enabled = true         }    }     dependencies {         kapt "com.android.databinding:compiler: give latest stable version"    }     kapt {         generateStubs = true    }

or

Try with 2.3.1 version

   dependencies {         kapt 'com.android.databinding:compiler:2.3.1'     }


回答7:

Add Databinding in android Project using when you have use kotlin language.

Below steps

--First you need to add the below plugin

**apply plugin: 'kotlin-kapt'**

--Second dataBinding enabled true

**dataBinding {         enabled = true     }**

All this point added in app.build.gradle after hit "SYNC NOW"

Lets For example you have edit profile activity then how to define binding variable in kotlin??

lateinit var buildProfileBinding: ActivityBuildProfileBinding  buildProfileBinding = getBinding()

Here,get binding is method to handle which type of binding object

protected  T getBinding() {                 return (T) binding;             }


回答8:

In my case, adding

kapt {     generateStubs = true }

Solved the problem for me. I ignored it the first time, I thought it's irrelevant to the problem:

Unresolved reference databinding

But now, data-binding is working just fine.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!