Home » Android » java – Kotlin-android: unresolved reference databinding

java – Kotlin-android: unresolved reference databinding

Posted by: admin March 11, 2020 Leave a comment

Questions:

I have following fragment class written in Java using the 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 the 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

How to&Answers:

Try use this configuration:

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
}

Answer:

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'

You can visit here for new version

Thank you.

Answer:

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

Answer:

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

Answer:

To Solve the problem, you have to put

apply plugin: 'kotlin-kapt'

at the top of build.gradle (Module: app), then put this line in dependencies

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"

You can find android plugin version by go to menu

File > Project Structure > Project

Then Sync Again. If you see this warning, ignore it.

3rd-party Gradle plug-ins may be the cause

Answer:

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

Answer:

this work for me in androidStudio ver3.1.3

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

show usage sample

Answer:

Configuration data binding in kotlin

build.gradle (folder app)

apply plugin: 'kotlin-kapt'

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

dependencies {
   // data binding
   kapt "com.android.databinding:compiler:3.1.3"
}

Enjoy Kotlin…

Answer:

Important Update

You can see in documentation of Android.

The new compiler in version 3.2 is enabled by default.

So Just Update your Android Studio to V3.2 or newer. and remove all unnecessary config.

So just enable dataBinding in app level build.gradle.

android {
    dataBinding {
        enabled = true
    }
}

It will do all things for you automatically.

You can SAFELY REMOVE below lines-

  • Remove databinding.compiler

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

    kapt {
        generateStubs = true
    }
    

My complete config

build.gradle (Project)

kotlin_version = '1.2.71'    
classpath 'com.android.tools.build:gradle:3.2.0'

Use gradle latest version.
Use kotlin latest version.

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 Do not just copy and paste config. See this answer for setting up Kotlin version.

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

Answer:

Add following in you app build.gradle

kapt "com.android.databinding:compiler:$android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

This will do the trick.

$android_plugin_version is version of com.android.tools.build:gradle in application build.gradle

Also, add this to your module build.gradle

android {
/// Existing Code
kapt {
generateStubs = true
}
}

Answer:

In my case, the error was Unresolved reference: RegisterationUserBinding I just used my layout name fragment_registeration_user like this FragmentRegisterationUserBinding and made it in the Databinding layout and the error went away.

Answer:

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 extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }

Answer:

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.

Answer:

I want to share my own expirience. To use data databinding with Kotlin in android studio is enough to add

dataBinding {
    enabled = true
}

After that “sync it” and, it’s very important, to “make Project”. After that all your object will be active to use.

Answer:

Before you try to use FragmentDetailsBinding you have to make sure you converted the corresponding layout( fragment_details.xml ) to data binding layout by wrapping the whole layout in “” tag parent and move all of xmlns to layout tag then build the project and thats it

Answer:

Just get out of all databinding dependencies and use this instead

android {
    dataBinding {
        enabled = true
    }
}