我正在研究this Udacity course on Android/Kotlin/KTX。 “关于我”应用程序引入了数据绑定,而Android团队似乎advise against using KTX binding。所以我想用前者代替后者。
但是,事情并没有按预期进行。这些是我面临的怪异问题:
R.id.viewName
ID。键入R.id.
会给我各种各样的选择,例如R.id.action_bar
,但我的活动却没有。在某种程度上,这种情况已经清除。lateinit var binding: ActivityMainBinding
)。实际上,我认为这花费了不止一个构建,可能是由于我在其他地方乱丢(见下文)而修复的。doneButton
的按钮,只需将其导入即可在代码中将其作为综合doneButton
进行引用。我认为这意味着对象总是在运行时生成,即使我不打算使用它们。如何使这些KTX样式的绑定消失?这是我的构建包:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.31'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这是我的模块gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.android.aboutme"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
在网上搜索获取生成数据绑定类的方法时,我在gradle.properties
中发现了a possible need to include the following line:
android.databinding.enableV2=true
这样做后,我进行了重新构建,瞧,这些类终于建立了。因此,当我决定最好确保自己了解真正解决问题的方式时,我准备将有关丢失位的反馈发送给Udacity。因此,在成功运行程序之后,我删除了上面的gradle.properties
行,清理并重建了项目。令我惊讶的是,它仍然可以运行。
所以我不知道是什么解决了该问题,或者如何在下一个项目中解决这些问题。
我还想防止实例化所有全局KTX绑定类,但我仍然不知道如何做到这一点。
Another SO answer声称针对生成绑定类的问题提供了两种解决方案,但是给出的解决方案适用于2016年和2017年,尽管没有实现这些解决方案,上述gradle文件目前仍在工作(生成绑定类) ,因此显然有一种新的方式。
感谢您提供的任何帮助! (哦,我还应该提到我使用的是完全更新的Android Studio版本3.4。)
更新1 :我正在取得一些进展。似乎只有Android Studio 3.4代码编辑器无法识别生成的数据绑定类。重建时会再次识别这些类,但是在清除时会丢失识别。我不确定这种理解是否能解决我的所有问题...
更新2 :这是(至少部分是)an Android Studio bug,该问题已于3月修复,适用于Canary 7。
答案 0 :(得分:0)
为了禁用 Kotlin Synthetic 访问,从应用级 build.gradle 文件中删除插件 kotlin-android-extensions。此插件生成合成导入。