163

我使用新的数据绑定库用 Java 编写了以下片段类

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

它编译并运行良好。
我尝试在 Kotlin 中重写它并提出以下内容:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

但是现在 step:app:compileDebugKotlin输出以下内容:

错误:(16, 38) 未解决的引用:数据绑定
错误:(37, 27) 未解决的引用:FragmentDataBinding

如何在 Kotlin 中使用 android-databinding 库?

我的顶级build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

build.gradle的应用程序目录(仅相关部分):

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'kotlin-android'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

我正在使用 Android Studio 1.4、构建工具版本 23.0.1、Android SDK 23、SDK 工具 24.4.0

4

21 回答 21

89

尝试使用此配置:

在主build.gradle 中

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
    //... rest of the content
    }
}

应用程序build.gradle

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:$android_plugin_version"
}

kapt {
    generateStubs = true
}
于 2016-05-05T07:20:01.120 回答
82

我找到了新的解决方案,希望对您有所帮助。

首先检查插件是否应用:

apply plugin: 'kotlin-kapt'

然后

android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

您可能在依赖项中有错误:

利用

kapt 'com.android.databinding:compiler:3.1.4'

代替

compile 'com.android.databinding:compiler:3.1.4'

您可以访问此处获取新版本

谢谢你。

并在使用其绑定类之前在布局文件中使用布局标签,您可以轻松做到这一点:在布局文件中,您的根视图(例如约束布局) ALT+Enter -> 转换为数据绑定类

于 2017-06-14T10:00:34.483 回答
14

更新 2:这是一个非常古老的答案,请参阅 lrampazzo 的答案。

它适用于 1.0-rc4,把

kapt 'com.android.databinding:compiler:1.0-rc4' 

进入你的依赖

感谢 Ghedeon,评论中的链接

更新这是一个非常简单的 hello world 示例项目

于 2015-10-29T05:58:23.643 回答
13

数据绑定编译器的版本与项目 build.gradle 文件中的 gradle 版本相同:

// at the top of file 
apply plugin: 'kotlin-kapt'


android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.android.databinding:compiler:3.0.0-beta1"
}

并且gradle版本是

classpath 'com.android.tools.build:gradle:3.0.0-beta1'

这是一个在 kotlin 中完成使用数据绑定库的示例链接。

https://proandroiddev.com/modern-android-development-with-kotlin-september-2017-part-1-f976483f7bd6

于 2017-09-22T06:49:28.063 回答
9

就我而言,这解决了我的问题。

我在应用程序 build.gradle 中添加了这个:

buildFeatures {
    dataBinding true
    viewBinding true 
}
于 2021-02-17T07:16:53.933 回答
7

为了解决这个问题,你必须把

apply plugin: 'kotlin-kapt'

在 build.gradle (Module: app) 的顶部,然后将这一行放在依赖项中

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"

您可以通过转到菜单找到 android 插件版本

File > Project Structure > Project

然后再次同步。如果您看到此警告,请忽略它。

3rd-party Gradle 插件可能是原因

于 2018-06-08T03:56:34.677 回答
6

试试这个。Andrid studio 2.0(2.1)

build.gradle

android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

在我的项目中: buildToolsVersion = "23.0.3"

在顶层 build.gradle

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }
于 2016-04-29T08:02:24.703 回答
6

在 androidStudio ver3.1.3 中为我工作

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

显示使用示例

于 2018-09-19T09:03:14.327 回答
4

就我而言,错误是Unresolved reference: RegisterationUserBinding我只是fragment_registeration_user像这样使用了我的布局名称FragmentRegisterationUserBinding并在数据绑定布局中使用它并且错误消失了。

于 2019-07-27T03:29:59.990 回答
4

kotlin 中的配置数据绑定

build.gradle(文件夹应用程序)

apply plugin: 'kotlin-kapt'

android {
   ...
   dataBinding {
      enabled = true
   }
}

dependencies {
   // data binding
   kapt "com.android.databinding:compiler:3.1.3"
}

享受 Kotlin...

于 2018-06-24T07:09:11.430 回答
4

在 Gradle 模块文件中添加这个

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

要在 Kotlin 中使用数据绑定,您需要将应用程序配置为使用数据绑定,在 .app 模块的 build.gradle 文件中启用 dataBinding 构建选项,您可以将代码替换为:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private lateint var mBinding: FragmentProfileBinding

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)

        return mBinding.getRoot()
    }
}

如需更多帮助,请查看数据绑定文档链接:https ://developer.android.com/topic/libraries/data-binding 。

于 2021-08-11T09:00:02.557 回答
4

重要更新

您可以在Android 的文档中看到。

默认情况下启用 3.2 版中的新编译器。

所以只需将您的Android Studio 更新到 V3.2更新版本。并删除所有不必要的配置。

因此,只需在应用级别启用 dataBinding 即可build.gradle

android {
    dataBinding {
        enabled = true
    }
}

它会自动为你做所有事情。

您可以安全删除以下行-

  • 删除databinding.compiler

    kapt 'com.android.databinding:compiler:3.0.1'
    
  • 消除kapt

    kapt {
        generateStubs = true
    }
    

我的完整配置

build.gradle (项目)

kotlin_version = '1.2.71'    
classpath 'com.android.tools.build:gradle:3.2.0'

使用gradle 最新版本。使用kotlin 最新版本

build.gradle(应用程序)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

重要不要只是复制和粘贴配置。请参阅此答案以设置 Kotlin 版本。

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
于 2018-10-03T06:28:04.790 回答
2

在你添加以下内容app build.gradle

kapt "com.android.databinding:compiler:$android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

这会成功的。

$android_plugin_versioncom.android.tools.build:gradlein的版本application build.gradle

另外,将此添加到您的模块中build.gradle

android { /// Existing Code kapt { generateStubs = true } }

于 2018-05-17T05:28:49.070 回答
2

Try adding this to your gradle.properties

android.databinding.enableV2=true
于 2021-02-08T09:03:30.157 回答
0

使用 kotlin 语言时,在 android 项目中添加数据绑定。

以下步骤

--首先你需要添加以下插件

**apply plugin: 'kotlin-kapt'**

--第二个数据绑定启用 true

**dataBinding {
        enabled = true
    }**

点击“SYNC NOW”后,所有这些都添加到 app.build.gradle

例如,您有编辑配置文件活动,那么如何在 kotlin 中定义绑定变量?

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

这里,get binding 是处理哪种类型的绑定对象的方法

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }
于 2018-02-12T09:48:38.527 回答
0

在您的 Gradle 模块(应用程序)文件中添加

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

顺便说一句,请记住:生成的视图绑定名称基于您的布局文件的名称,而不是您的类的名称!

这意味着,如果你有MainActivity对应activity_main.xml的类,绑定将被调用ActivityMainBinding

另外,不要忘记binding通过添加来初始化变量

binding = ActivityMainBinding.inflate(layoutInflater)

进入你的onCreate()方法。

不要忘记添加这个:

setContentView(binding.root)

而不是setContentView(R.layout.activity_main)(这会导致您的听众根本无法工作)

于 2022-02-15T16:02:02.203 回答
0

就我而言,我只忘记在布局文件中添加标题:

<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">

....
于 2020-11-01T13:48:56.577 回答
0

在尝试使用 FragmentDetailsBinding 之前,您必须确保将相应的布局(fragment_details.xml)转换为数据绑定布局,方法是将整个布局包装在“”标签父级中,并将所有 xmlns 移动到布局标签,然后构建项目,仅此而已

于 2020-01-29T19:15:18.500 回答
0

就我而言,添加

kapt {
    generateStubs = true
}

为我解决了这个问题。我第一次忽略它,我认为它与问题无关:

未解决的参考数据绑定

但是现在,数据绑定工作得很好。

于 2018-03-04T14:31:31.180 回答
0

我想分享我自己的经验。在 android studio 中使用 Kotlin 数据绑定就足够了

dataBinding {
    enabled = true
}

之后“同步”,“制作项目”非常重要。之后,您的所有对象都将被激活使用。

于 2019-04-27T14:06:32.817 回答
-1

如果您从文档中应用了以下内容:

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

在您的模块中gradle.properties仍然收到此错误消息,可能是因为缺少 XML 数据标签

如果您ListFragment通过 Android Studio 的 Fragment Gallery 创建了一个尤其是这种情况,人们希望 Android Studio 会自动将绑定适配器的布局文件转换为绑定布局,但它不会,而且它确实看起来像一个错误,从版本开始没有修复4.2.2!

不过这里是修复:

  1. 打开相应的 XML 文件(在我的情况下,编译器一直在抱怨AlarmItemBinding缺少参考,所以 XML 将是alarm_item.xml
  2. 右键单击顶级标签(在我的情况下<LinearLayout...>选择Show Context Actions
  3. 选择Convert to data binding layout
  4. 选择Build -> Clean project
  5. 选择Build -> Rebuild project
于 2021-07-05T17:25:50.183 回答