关于android:数据绑定:找不到符号类BR

Data Binding: Cannot find symbol class BR

我尝试在现有项目中使用数据绑定,但是无法构建它。

在项目build.gradle中使用:

1
2
3
4
5
6
7
8
9
10
dependencies {
    classpath 'com.android.tools.build:gradle:1.3.1'
    //Data Binding Beta
    classpath"com.android.databinding:dataBinder:1.0-rc4"

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7+'

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

申请

1
2
apply plugin: 'com.android.databinding'
apply plugin: 'com.neenbedankt.android-apt'`

并在模块中:

1
2
3
4
5
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    apt 'com.android.databinding:compiler:1.0-rc1+'
}

我试图对RecyclerView / Fragment / ViewHolder / Adapter使用数据绑定。
我使用的是Android Studio 1.4.1。
使用compileSdkVersion 23和buildToolsVersion" 23.0.1"。
我试过没有适当的,不同的gradle版本,证明读了我的classs / xml。
我还使用Butterknife(因为我的项目太大,无法一次更改所有内容)和其他(但不相关的)库。
我同步并重建了项目,关闭/打开了Android Studio,并尝试使缓存无效。 我从一开始就构建了一个"新"示例,效果很好。

我在"数据类"中的getter方法是@Bindable。

此外,不会创建数据绑定包。 (错误消息说它不存在)和Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21


我在DataBinding方面遇到了与您类似的不同问题,例如Android Studio无法找到生成的Binding类,例如" MainActivityBinding"。重新启动Android Studio为我解决了它。

关于BR类,我遇到了找不到它们的问题,但这通常是因为我在布局类中犯了一个错误。例如,绑定到不存在的字段。确保其他所有内容均正确无误,然后重新启动Android Studio。


在将Android Studio更新到版本2.3和Gradle 3.3之后,出现此错误,对我来说,解决方案是将其添加到build.gradle(app)文件中

1
apt 'com.android.databinding:compiler:2.3.0'


我长期以来一直在使用数据绑定,并且提出了一些关键点,它们也可以为您提供帮助。

该答案将帮助您在ViewDataBinding类中生成ViewDataBindingBindingResource(BR)类和布局变量。

6个技巧,不要卡在装订中。

(1)您应该在build.gradle中启用了数据绑定。如果没有,则添加它并同步。

1
2
3
4
5
6
7
android {
...
   dataBinding {
        enabled = true
    }
...
}

(2)现在,如果要生成数据绑定类,则应使用数据绑定(标记)包装xml layout。这样的事情。

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.constraint.ConstraintLayout>
</layout>

(3)现在应该生成您的数据绑定类。

If your layout name is in snake case activity_main.xml then data binding class
will be generated in camel case like ActivityMainBinding.

有时,当您键入ActivityMai...时,它不会显示建议,但这并不意味着不会生成类。在这种情况下,您应该键入预期生成的类的全名。类似于ActivityMainBinding类型,它将显示导入弹出窗口。 (那是我多次面对的事情。)

(4)如果仍然没有生成您的类。 (有时,当我们粘贴布局文件时,它会发生)。然后从Build> Rebuild重新生成项目(不是生成或生成项目)。它将生成您的数据绑定类。 (重建一直为我做魔术。)

(5)如果您在布局中创建了,并且在数据绑定类中未显示其setter和getter,请遵循第4点。

(6)即使您的班级未生成,您仍应检查布局文件中的错误是否会导致构建失败。数据绑定类将成功生成。

这就是我为解决我的数据绑定错误所做的所有事情。如果您还有其他问题,可以在这里发表评论。


对于AndroidX项目:

迁移到androidx后,我遇到了这个问题,这就是我解决的方法。

  • 重建项目时,BR类是根据数据绑定自动生成的。
  • 但是,如果错误仍然存??在,请在下面添加以下代码
    您的导入然后重建项目。

    1
    import androidx.databinding.library.baseAdapters.BR;

尝试将ObservableList与自定义对象一起使用时,几乎每次都会出现Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21错误。但是我发现,几乎每次我键入文字后都忘记了>。傻我
因此,我的解决方案是检查它:

1
2
3
4
5
6
7
8
    <data>

        <import type="android.databinding.ObservableArrayList"/>

        <variable
            name="dices"
            type="ObservableArrayList<Dice>" /> //don't forget the '>' after Dice
    </data>

有时DataBinding将显示不相关的错误,但在我的情况下,我忘记添加
应用插件:" kotlin-kapt"
在您的Gradle App文件中


就我而言,我已经从基于Android Studio更高版本构建的项目中更新了代码。然后,我将Android Studio从3.3.2升级到3.5.3,并解决了问题。


将您的项目转换为android x,然后从下面的包中导入BR类
导入androidx.databinding.library.baseAdapters.BR


错误实际上可能不是由于数据绑定引起的。 Javac会截断错误日志,因此可能不会显示实际问题。

查看此链接。
https://movieos.org/2017/android-room-data-binding-compile-time-errors/


缺少" BR"导入文件。

在模型类中添加以下导入文件:

1
import com.yourpackagename.BR;