我使用新的数据绑定库
编写了以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
答案 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)
适用于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_version
是com.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
}
答案 10 :(得分:1)
默认情况下启用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: RegisterationUserBinding
,RegisterationUserBinding
是我在此处尝试所有解决方案后的片段名称,没有任何用处。我只是使用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 版本开始没有修复!
尽管如此,修复方法如下:
AlarmItemBinding
缺少引用,所以 XML 将是 alarm_item.xml
<LinearLayout...>
选择 Show Context Actions
Convert to data binding layout
Build -> Clean project
Build -> Rebuild project