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

yen*_*rah 8 android android-databinding

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

在项目中使用build.gradle:

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
}
Run Code Online (Sandbox Code Playgroud)

应用

apply plugin: 'com.android.databinding'
apply plugin: 'com.neenbedankt.android-apt'`
Run Code Online (Sandbox Code Playgroud)

在模块中:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    apt 'com.android.databinding:compiler:1.0-rc1+'
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用数据绑定与RecyclerView/Fragment/ViewHolder/Adapter ..我使用Android Studio 1.4.1.使用compileSdkVersion 23和buildToolsVersion"23.0.1".我尝试了没有apt,不同的gradle版本,证明读取我的classes/xml ..我还使用Butterknife(因为我的项目太大而不能一次更改所有内容)和其他(但不相关)库.我同步并重建了我的项目,我关闭/打开了Android Studio,我试图使缓存无效.我从一开始就构建了一个"新鲜"的例子.

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

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

Den*_*nny 11

对于 AndroidX 项目:

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

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

    import androidx.databinding.library.baseAdapters.BR;
    
    Run Code Online (Sandbox Code Playgroud)


Gob*_*ber 6

我有类似于你的DataBinding有不同的问题,例如Android Studio无法找到生成的Binding类,如"MainActivityBinding".重启Android Studio为我解决了这个问题.

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


Khe*_*raj 6

我很长时间以来都在使用数据绑定,并且我提出了一些要点,这也可以对您有所帮助。

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

6 避免卡在绑定中的提示。

(1)您应该build.gradle. 如果没有,则添加此和Sync

android {
...
   dataBinding {
        enabled = true
    }
...
}
Run Code Online (Sandbox Code Playgroud)

(2)现在,如果您想要生成数据绑定类,那么您应该用数据绑定(标签)包装xml layout<layout。像这样的东西。

<?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>
Run Code Online (Sandbox Code Playgroud)

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

如果您的布局名称采用蛇形命名法,则数据绑定类将以 驼峰式命名activity_main.xml法生成,例如.ActivityMainBinding

有时,当您键入时ActivityMai...,它不会显示建议,但这并不意味着没有生成类。在这种情况下,您应该输入预期生成的类的全名。像类型一样ActivityMainBinding,它会显示导入弹出窗口。(这就是我多次遇到的情况。)

(4)如果仍然没有生成你的类。(有时当我们粘贴布局文件时,就会发生这种情况)。然后从中重建项目Build> Rebuild不是构建或创建项目)。它将生成您的数据绑定类。(重建对我来说总是很神奇。

(5)<variable如果您在布局中创建了一个,并且它没有在数据绑定类中显示其 setter 和 getter,则按照第 4 点进行操作

(6)如果您的类没有生成,那么您应该检查构建是否由于布局文件中的错误而失败。成功构建后将生成数据绑定类。

这就是我为解决数据绑定错误所做的全部工作。如果您还有任何问题,可以在这里发表评论。


yen*_*rah 2

Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21当我尝试将 aObservableList与自定义对象一起使用时,几乎每次都会遇到错误。但我发现,几乎每次我都会忘记>我的类型。愚蠢的我。所以,我的解决方案是检查它:

    <data>

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

        <variable
            name="dices"
            type="ObservableArrayList&lt;Dice>" /> //don't forget the '>' after Dice
    </data>
Run Code Online (Sandbox Code Playgroud)