I have tried to use the beta features(data binding) in the android studio. After following the guides from the android studio, I can find the related class DataBindingInfo in the android studio. But the databinding class does not generate after I create the project. Can someone help?
build.gradle for the app module
apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.example.pigfamily.myapplication"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}
build.gradle for the project
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
dependencies {
classpath "com.android.tools.build:gradle:1.3.0"
classpath "com.android.databinding:dataBinder:1.0-rc1"
}
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.pigfamily.myapplication.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
</LinearLayout>
</layout>
MainActivity.java
package com.example.pigfamily.myapplication;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityMainBinding //cannot resolve the symbol here
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
enable dataBinding in your App Level build.gradle file
android {
...
dataBinding{
enabled=true
}
}
I had this same problem. I was digging through gradle settings, cleaning, rebuilding... nothing worked. Finally all I had to do was restart Android Studio
https://www.bignerdranch.com/blog/descent-into-databinding/
As of this writing, this integration needs a little jump-start to get going. To make ListItemCrimeBinding available after adding the tag, you must restart Android Studio, then rebuild the project.
to implement binding, make sure that:
in the app.gradle
, enable dataBinding
:
apply plugin: 'com.android.application' ... android { ... dataBinding { enabled = true } ... } dependencies { ... }
wrap the existing XML layout in a <layout>
element:
<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"> <!-- note: xmlns above only needed if used in original XML --> <!-- original XML here --> </layout>
in Activity
/ Fragment
, use the Binding
val binding = XmlLayoutNameBinding.inflate(context.layoutInflater) // use the layout
if is unable to resolve the XxxBinding
class (even though it can resolve XxxBindingImpl
)
Android Studio
, sync & rebuild projectAdd on build.gradle(:app) viewBinding true
android {
buildFeatures {
viewBinding true
}
}
如果弹出对话框,请单击同步,单击保存旁边的同步按钮,或重新启动 Android Studio。
If clear Project
and Rebuild Project
don't work for you try the simple solution. It sometimes doesn't work when you clone a project from remote git branches
.You need to just close your project and delete the .gradle
and .idea
folder of your android project. Then reopen the project.
For me I had to add:
buildFeatures {
viewBinding true
}
to my build.gradle
file, then run File->Sync Project With Gradle Files
In my case, my layout file had some errors and therefore AS was not creating the binding class. I could find it by expecting the XML file and seeing the error messages.
be sure you add data binding in your build.gradle
and after that sync project after that Restart and clear caches from the file in android studio
. this way solve my problem
For my case I added :
dataBinding {
enabled=true
}
Then went to File > Settings > Gradle > Untick offline work> Apply> Ok Then cleaned my project.
I've seen this answer nowhere so I suggest: if you added some activity from context menu by clicking on some package like 'data' or 'ui', Android Studio saved path to binding like so: import com.damian.yourappname.ui.databinding.ActivitySearchBinding;
I tested it a few times with my previous projects and it occurs only when sample activity like ScrollingActivity is added to a package other package for all classes. import com.damian.yourappname.databinding.ActivitySearchBinding;
So best way is just creating sample activity in root folder and after gradle sync moving to some package
I found a way without restart or invalidate cache. I thing this because binding need to restart or something, so I re-write private ActivityMainBinding binding;
and viewBinding work again.
I don't know why this work but this save my time than restart/invalidate cache
In my case i deleted build, build-cache folders in project scope, then build folder in app module. Afterwards restarted PC and it started working
1.Add Below in app gradle
dataBinding {
enabled = true
}
2.In xml layout write below code
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data></data>
</layout>
UPDATED: CLEAN AND REBUILD THE PROJECT
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.