Kotlin-android:未解析的引用数据绑定

时间:2015-10-16 07:58:43

标签: java android kotlin android-databinding

我使用新的数据绑定库

编写了以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()
    }
}

但现在步骤:app:compileDebugKotlin输出以下内容:

  

错误:(16,88)未解决的参考:数据绑定
  错误:(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,Build工具版本23.0.1,Android SDK 23,SDK工具24.4.0

19 个答案:

答案 0 :(得分:82)

尝试使用此配置:

主要 build.gradle

AppStore

App 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
    }
}

答案 1 :(得分:59)

我找到了新的解决方案,希望它能帮到你。

首先检查是否应用了插件:

apply plugin: 'kotlin-kapt'

然后

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

您可能在依赖项中出错:

使用

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

而不是

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

谢谢。

答案 2 :(得分:11)

更新2:这是一个非常古老的答案,而是参考lrampazzo的回答。

适用于1.0-rc4,put

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

进入你的依赖

感谢Ghedeon,发表评论中的链接

更新Here's一个非常简单的hello world示例项目

答案 3 :(得分:10)

Data Binding编译器的版本与项目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

答案 4 :(得分:6)

要解决问题,你必须把

apply plugin: 'kotlin-kapt'

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

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

你可以通过菜单

找到android插件版本
File > Project Structure > Project

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

  

第三方Gradle插件可能是原因

答案 5 :(得分:5)

试试这个.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'
    }

答案 6 :(得分:4)

kotlin中的配置数据绑定

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

apply plugin: 'kotlin-kapt'

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

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

享受科特林...

答案 7 :(得分:4)

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

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

buildFeatures {
    dataBinding true
    viewBinding true 
}

答案 8 :(得分: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:gradle

application build.gradle的版本

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

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

答案 9 :(得分:2)

这对我在androidStudio ver3.1.3中起作用

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

show usage sample

答案 10 :(得分:1)

重要更新

您可以在documentation of Android.

中看到
  

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

因此只需更新您的 Android Studio到V3.2 newer。并删除所有不必要的配置。

因此,只需在应用程序级别build.gradle中启用dataBinding。

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 latest version。 使用kotlin latest version

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版本的信息,请参见this answer

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

答案 11 :(得分:0)

就我而言,添加

kapt {
    generateStubs = true
}

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

  

未解决的参考数据绑定

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

答案 12 :(得分:0)

我想分享自己的经验。在android studio中与Kotlin一起使用数据数据绑定足以添加

dataBinding {
    enabled = true
}

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

答案 13 :(得分:0)

在我的情况下,错误是Unresolved reference: RegisterationUserBindingRegisterationUserBinding是我在此处尝试所有解决方案后的片段名称,没有任何用处。我只是使用FragmentRegisterationUserBinding而错误消失了。

答案 14 :(得分:0)

在尝试使用FragmentDetailsBinding之前,必须确保通过将整个布局包装在“”标记父级中并将所有xmlns移至layout标记中,从而将相应的layout(fragment_details.xml)转换为数据绑定布局。就是这样

答案 15 :(得分: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">

....

答案 16 :(得分:0)

尝试将其添加到您的 gradle.propweties

android.databinding.enableV2=true

答案 17 :(得分:0)

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

以下步骤

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

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

- 第二个dataBinding启用了

**dataBinding {
        enabled = true
    }**

所有这一点都在app.build.gradle中添加 在点击“SYNC NOW”之后

让我们举例说,您有编辑配置文件活动,然后如何在kotlin ??

中定义绑定变量
lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

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

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }

答案 18 :(得分:0)

如果您已应用 documentation 中的以下内容:

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

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

如果您通过 Android Studio 的 Fragment Gallery 创建了 ListFragment,情况尤其如此,人们期望 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