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

Mik*_*ail 132 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

它编译并运行良好.
我试图在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()
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在步骤: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()
    }
}
Run Code Online (Sandbox Code Playgroud)

build.gradle在app dir(只有相关部分):

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

我使用的是Android Studio 1.4,Build工具版本23.0.1,Android SDK 23,SDK工具24.4.0

小智 84

尝试使用此配置:

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

App build.gradle:

android {
    dataBinding {
        enabled = true
    }
}

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

kapt {
    generateStubs = true
}
Run Code Online (Sandbox Code Playgroud)

  • 我不得不添加`apply plugin:'kotlin-kapt'.请参见http://stackoverflow.com/a/42974558/1916449 (12认同)

Pra*_*ani 66

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

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

apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)

然后

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

您可能在依赖项中出错:

使用

kapt 'com.android.databinding:compiler:3.0.1'
Run Code Online (Sandbox Code Playgroud)

代替

compile 'com.android.databinding:compiler:3.0.1'
Run Code Online (Sandbox Code Playgroud)

谢谢.

  • 我还有这个问题:( (4认同)

Jay*_*nki 12

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

它适用于1.0-rc4,put

kapt 'com.android.databinding:compiler:1.0-rc4' 
Run Code Online (Sandbox Code Playgroud)

进入你的依赖

感谢Ghedeon,评论中的链接

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


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

和gradle版本是

classpath 'com.android.tools.build:gradle:3.0.0-beta1'
Run Code Online (Sandbox Code Playgroud)

以下是在kotlin中完成数据绑定库使用的示例链接.

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


Sow*_*gen 7

要解决这个问题,你必须把它

apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)

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

kapt "com.android.databinding:compiler:[YOUR_ANDROID_PLUGIN_VERSION]"
Run Code Online (Sandbox Code Playgroud)

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

File > Project Structure > Project
Run Code Online (Sandbox Code Playgroud)

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

第三方Gradle插件可能是原因


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

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

在顶级build.gradle中

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }
Run Code Online (Sandbox Code Playgroud)

  • 你应该为编译器和android构建工具gradle插件使用相同的版本.否则会导致不可预测的构建问题. (2认同)

ema*_*esh 5

在androidStudio ver3.1.3中为我工作

apply plugin: 'kotlin-kapt'

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

显示用法样本


Pan*_*yot 5

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

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

buildFeatures {
    dataBinding true
    viewBinding true 
}
Run Code Online (Sandbox Code Playgroud)


Hit*_*tel 5

在 Gradle 模块文件中添加以下内容

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

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

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