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
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
}
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.1.4'
instead of
compile 'com.android.databinding:compiler:3.1.4'
You can visit here for new version
Thank you.
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
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
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
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'
}
this work for me in androidStudio ver3.1.3
apply plugin: 'kotlin-kapt'
dataBinding {
enabled = true
}
In my case, this solved my problem.
I added this in the app build.gradle:
buildFeatures {
dataBinding true
viewBinding true
}
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...
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.
build.gradle
.android {
dataBinding {
enabled = true
}
}
It will do all things for you automatically.
Remove databinding.compiler
kapt 'com.android.databinding:compiler:3.0.1'
Remove kapt
kapt { generateStubs = true }
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
在我的例子中,错误是Unresolved reference: RegisterationUserBinding
我只是使用我的布局名称fragment_registeration_user
像这个FragmentRegisterationUserBinding
并在数据绑定布局中使用它,错误消失了。
In the Gradle module file add this
android {
...
buildFeatures {
dataBinding true
}
}
To use databinding in Kotlin you need to configure your app to use data binding, enable the dataBinding build option in your build.gradle file in the .app module and you can replace your code with this:
import com.example.app.databinding.FragmentDataBdinding
class ProfileFragment : Fragment() {
private lateint var mBinding: FragmentProfileBinding
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
return mBinding.getRoot()
}
}
For more help check the databinding documentation link: https://developer.android.com/topic/libraries/data-binding .
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 } }
尝试将此添加到您的gradle.properties
android.databinding.enableV2=true
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;
}
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.
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.
在尝试使用 FragmentDetailsBinding 之前,您必须确保通过将整个布局包装在 "" 标记父项中并将所有 xmlns 移动到布局标记然后构建项目,从而将相应的布局( fragment_details.xml )转换为数据绑定布局
In my case I only forgot to add in layout file the header:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
....
If you have applied the following from the documentation :
android {
...
buildFeatures {
dataBinding true
}
}
In your module's gradle.properties
and still get this error message, it's probably because of missing XML data tags .
This is especially the case if you created a ListFragment
through Android Studio's Fragment Gallery, one expects Android Studio would automatically convert the layout file for a binding adapter to a binding layout but it DOES NOT and it sure looks like a bug, not fixed as of version 4.2.2!
Nevertheless here's the fix:
AlarmItemBinding
missing reference, so the XML would be alarm_item.xml
<LinearLayout...>
select Show Context Actions
Convert to data binding layout
Build -> Clean project
Build -> Rebuild project
In your Gradle module (app) file add
android {
...
buildFeatures {
dataBinding true
}
}
BTW, keep in mind: Generated view binding name is based on name of your layout file, NOT on name of your class!
That means, if you have MainActivity
class with corresponding activity_main.xml
, the binding will be called ActivityMainBinding
.
Also, do not forget to initialize your binding
variable by adding
binding = ActivityMainBinding.inflate(layoutInflater)
into your onCreate()
method.
Do not forget to add this as well:
setContentView(binding.root)
instead of setContentView(R.layout.activity_main)
(that would cause your listeners to not work at all)
Add below build features in your app build.gradle file
android {... buildFeatures { viewBinding true } }
Then in your activity onCreate method
binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.