首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin-android:未解析的引用数据绑定

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

Stack Overflow用户
提问于 2015-10-16 15:58:43
回答 21查看 70K关注 0票数 159

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

代码语言:javascript
复制
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重写它,并提出了以下内容:

代码语言:javascript
复制
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数据绑定库?

我的顶级build.gradle

代码语言:javascript
复制
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 (仅限相关部分):

代码语言:javascript
复制
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

EN

回答 21

Stack Overflow用户

发布于 2016-05-05 15:20:01

尝试使用此配置:

在main build.gradle

代码语言:javascript
复制
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

代码语言:javascript
复制
android {
    dataBinding {
        enabled = true
    }
}

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

kapt {
    generateStubs = true
}
票数 89
EN

Stack Overflow用户

发布于 2017-06-14 18:00:34

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

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

代码语言:javascript
复制
apply plugin: 'kotlin-kapt'

然后

代码语言:javascript
复制
android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

您可能在依赖项中出现错误:

使用的

代码语言:javascript
复制
kapt 'com.android.databinding:compiler:3.1.4'

而不是

代码语言:javascript
复制
compile 'com.android.databinding:compiler:3.1.4'

您可以访问here获取新版本

谢谢。

并且在布局文件中使用布局标签之前使用它的绑定类,你可以很容易地做到这一点:在布局文件中你的根视图(例如- Constraint Layout) ALT+Enter ->转换为数据绑定类

票数 80
EN

Stack Overflow用户

发布于 2015-10-29 13:58:24

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

它适用于1.0-rc4,put

代码语言:javascript
复制
kapt 'com.android.databinding:compiler:1.0-rc4' 

到您的依赖项中

感谢Ghedeon在评论中的链接

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

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33165324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档