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

问题描述 投票:118回答:13

我使用新的数据绑定库在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,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()
    }
}

我在app dir中的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

java android kotlin android-databinding
13个回答
83
投票

尝试使用此配置:

在main 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
    }
}

App build.gradle:

android {
    dataBinding {
        enabled = true
    }
}

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

kapt {
    generateStubs = true
}

2
投票

Important Update

你可以在documentation of Android.看到

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

所以只需将您的Android Studio更新为V3.2或newer即可。并删除所有不必要的配置。

因此,只需在应用级别qazxsw poi中启用数据绑定。

build.gradle

它会自动为您完成所有事情。

You can SAFELY REMOVE below lines-

  • 删除databinding.compiler android { dataBinding { enabled = true } }
  • 删除kapt 'com.android.databinding:compiler:3.0.1' kapt

我的完整配置

build.gradle(项目)

kapt {
    generateStubs = true
}

使用kotlin_version = '1.2.71' classpath 'com.android.tools.build:gradle:3.2.0' 。使用gradle latest version

build.gradle(App)

kotlin latest version

重要事项不要只复制和粘贴配置。请参阅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版本。

grad了-wrapper.properties

this answer

0
投票

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

下面的步骤

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

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

- 启用了第二个dataBinding

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

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

让我们举例来说你有编辑配置文件活动然后如何在kotlin中定义绑定变量?

**dataBinding {
        enabled = true
    }**

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

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

0
投票

在我的情况下,添加

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

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

未解决的参考数据绑定

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


0
投票

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

kapt {
    generateStubs = true
}

之后“同步”,“制作项目”非常重要。之后,您的所有对象都将处于活动状态以供使用。


61
投票

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

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

apply plugin: 'kotlin-kapt'

然后

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

您可能在依赖项中出错:

使用

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

代替

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

谢谢。


12
投票

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


11
投票

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

它适用于1.0-rc4,put

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

进入你的依赖

感谢Ghedeon,评论中的链接

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


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
投票

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

4
投票

配置数据绑定在kotlin中

build.gradle(文件夹应用)

apply plugin: 'kotlin-kapt'

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

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

享受Kotlin ......


3
投票

这对我在android Studio ver 3.1.3中工作

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}


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:gradleapplication build.gradle的版本

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

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

© www.soinside.com 2019 - 2024. All rights reserved.