56

我正在使用 Android Studio 2.0 Preview 4。我正在使用 Android SDK 工具 25 rc1。无论我清理/重建项目多少次,此错误都会持续存在。File-> Invalidate Caches and restart 也不起作用。我无法运行最基本的数据绑定示例。

build.gradle 文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.chiragshenoy.myapplication"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dataBinding {
        enabled = true
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

MainActivity.java

package com.example.chiragshenoy.myapplication;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MainActivity binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        User user = new User("Test", "User");
        binding.setUser(user);
    }

    @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;
    }

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.chiragshenoy.myapplication.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>

这是我的顶级 build.gradle 文件

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
4

17 回答 17

235

如果你的 gradle 版本没问题(1.5+)那么你应该试试这个:

  1. 转到您的“some_layout.xml”
  2. 单击右键 -> 重构 -> 重命名(或 SHIFT + F6)
  3. 例如,将您的布局重命名为“some_layout2.xml”
  4. 将此文件重命名为原始的“some_layout.xml”

这可能会解决问题。让我们知道。

于 2016-05-21T15:10:09.393 回答
41

该解决方案对我有用“文件->使缓存无效/重新启动” https://stackoverflow.com/a/32191257/2205809

于 2017-03-16T03:18:40.670 回答
6

有一个简单的解决方案。

  1. 单击android studio工具栏上的“文件”
  2. 单击“使缓存无效并重新启动”,然后它就可以工作了。

希望这个答案对您有所帮助。

于 2019-10-21T07:00:42.117 回答
5

你应该使用:

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

在 onCreate

MainActivity 不是生成的 Binding 类。

于 2015-12-22T05:31:57.740 回答
4

我只是根据Felipe Gualberto 的 回答想,我得到了解决方案的不同方式。

如果您在不同的XML中编写了具有相同id的多个视图,则使其唯一。

谢谢你。

于 2017-01-20T09:41:18.683 回答
3

我使用的最快的 hack 之一是重命名 xml 文件。

例如

重命名abc_layout.xmlabc_layout2.xml. 一旦绑定导入显示错误,将其重命名为abc_layout.xml.

重命名的捷径是shift + F6. 整个项目重建速度更快。但这只会从一个文件中删除错误。

于 2016-05-04T10:58:36.370 回答
3

默认情况下,Binding将根据布局文件的名称生成一个类,将其转换为 Pascal 大小写,并为其添加“Binding”后缀。上面的布局文件是main_activity.xml,所以生成的类是MainActivityBinding。问题是您正在尝试手动创建绑定类。

这个类拥有从布局属性(例如用户变量)到布局的所有绑定,Views并且知道如何为绑定表达式赋值。创建绑定的最简单方法是在充气时进行。无需重启 Android Studio。

于 2016-06-28T04:37:55.443 回答
2

在顶级 Build.Gradle 文件中使用 gradle 1.5.0 或更高版本

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

如果它低于 1.5.0,那么在顶级 gradle 文件中也使用这个

        classpath "com.android.databinding:dataBinder:1.0-rc4"
于 2015-12-19T07:53:25.483 回答
2

只需尝试使缓存无效/从文件重新启动。这对我有用。

于 2019-06-18T12:26:30.443 回答
2

将现有项目迁移到 AndroidX后,我也遇到了同样的问题,我通过执行以下操作来解决它

Build -> Clean Project
Build -> Rebuild Project

之后

File -> Invalidate Caches/Restart...

于 2019-06-30T03:41:29.453 回答
2

<layout>我通过用标签包围我的 xml 布局文件来修复此错误

your_layout.xml文件应该看起来像

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

<androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/view_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</layout>

这对我有用。

于 2020-12-16T16:22:17.030 回答
0

做这个

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

代替

MainActivity binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
于 2018-09-14T11:37:53.753 回答
0

查看绑定类的名称,这里ActivityMainInitBinding是根据 xml 文件activity_mail_init.xml生成的。如果您使用错误的类,则会弹出错误。

  val binding : ActivityMainInitBinding=
        DataBindingUtil.setContentView(this, R.layout.activity_main_init)
于 2019-08-03T07:16:48.323 回答
0

迁移到 AndoridX 后,您需要从 XMl 中删除旧的 v4 或 v7 小部件。例如 - 如果您使用一些 AppCompat 小部件,例如

<android.support.v7.widget.AppCompatTextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="11sp"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:tag="showMore"/>

将其替换为 andoridx 小部件

  <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/txt_summary_desc_more"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="11sp"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:text="Read More"/>

对我来说效果很好。

于 2019-09-09T16:23:24.800 回答
0

如果它继续给出错误,刷新是没有用的。当出现这些错误时,很可能在您的 xml 文件中存在编译器在创建布局时未向您显示的问题。实际上,可能会发生此错误仅在其“调试”文件夹中可见。如果出现这种类型的错误,只需按照调试文件夹中的错误并从原始文件中进行更正即可。在我的情况下,错误是两个重复

 

xmlns: app = " http://schemas.android.com/apk/res-auto "

我看不见

于 2019-09-20T15:30:07.130 回答
0

删除模块级build文件夹并重新打开您的项目。

于 2020-01-16T09:50:17.323 回答
0

我收到此错误是因为我错过了视图 xml 中的标签,这里不是这种情况。

于 2020-04-13T10:51:28.333 回答