Error using databinding in android
Solution 1
removing apply plugin: 'com.neenbedankt.android-apt'
from my build.gradle solved my problem.
Solution 2
Your bindings in the xml file might be invalid.
Make sure to double check
- Are
type
attributes valid reference to data object?type="my.package.Class"
- Are the binding valid?
name="client"
->"@{client.field}"
- Are data fields accessible?
public
or encapsulated with getters - Are field names in java and the xml file matching, check for typos
- If you have renamed the xml file, make sure you also update the Binding objects.
OldNameBinding -> NewNameBinding
- Clean Project
Solution 3
it’s usually because there is an error in your XML layout file and it can’t generate the binding object. Make sure you write data type correctly, check lower or upper of your writing.
<data>
<variable name="yourObject" type="com.example.simple.YourObject"/>
</data>
And make sure object is right calling:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{yourObject.name}"/>
<TextView
Solution 4
If you are using 'android-apt' plugin for dagger or other libraries, after enabling data binding, you have to remove 'android-apt' plugin and use 'provided' instead of 'apt' in your dependencies. For example if you are using dagger, remove this
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
and this
apply plugin: 'com.neenbedankt.android-apt'
and then replace
apt 'com.google.dagger:dagger-compiler:2.0'
with
provided 'com.google.dagger:dagger-compiler:2.0'
Solution 5
This appears to be an issue in android studio. The editor will flag it as an error however it will still compile.
I had the same issue and so I cloned this example repo to test my system is configured correctly to support the databinding api https://github.com/mgrzechocinski/android-bindings-example
Ignore the error warning on the layout
tag. It is wrong.
Something I noticed is you don't necessarily require the data
tag if are simply using the databinding to get access to the views items through the BindingActivity class that is generated.
Comments
-
axay over 3 years
I am trying to test data binding as given in the guide here. I have included this in my build.gradle file (of module app) :
compileSdkVersion 'android-MNC' buildToolsVersion '23.0.0 rc2'
In the project build.gradle file, I have included this in my dependencies :
classpath "com.android.tools.build:gradle:1.3.0-beta2" classpath "com.android.databinding:dataBinder:1.0-rc0"
The layout file is exactly the same as the one given in the guide.
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.lastName}"/> </LinearLayout> </layout>
Initially it gave an error
Element layout does not have the required attribute layout_width and layout_height
.I tried to fix it by assigning match_parent to both. Then I got the error
Error parsing XML: duplicate attribute
on the lines where i assignedlayout_height
andlayout_width
to the linear layout.Again I tried to fix this by removing these attributes. Now every time I try to compile, I see this-
error: package my.package.name.databinding
does not exist.The code completion is working perfectly in my Fragment where I am trying to use this layout.
So what did I miss ?