我正在通过Android/kotlin/ktx上的这个Udacity课程进行工作。"关于我"应用程序引入了数据绑定,而Android团队似乎建议不要使用KTX绑定。所以我想做前者而不是后者。
但是,事情并没有预期。这些是我面临的奇怪问题:
- 在我的第一次通过时,我无法获得Android Studio来识别我的任何
R.id.viewName
ID。键入R.id.
将为我提供各种选择,例如R.id.action_bar
,但没有我的活动。在某个时候,这清除了。 - 编辑者抱怨数据绑定类未解决的引用,直到我构建东西(例如
lateinit var binding: ActivityMainBinding
(。实际上,我认为这花费了多个构建,这可能是由于我在其他地方的烦恼而被修复的(见下文(。 - 每个视图ID仍被生成为包含该ID的视图对象的全局变量。也就是说,如果我有一个带有ID
doneButton
的按钮,则可以通过导入将其引入代码中的合成doneButton
。我认为这意味着这些对象总是在运行时构建,即使我不打算使用它们。如何使这些KTX风格的绑定消失?
这是我的构建Gradle:
// 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
中包括以下行:
android.databinding.enableV2=true
我在这样做后重建了,瞧,课程终于建立了。因此,当我决定最好确保我了解真正解决问题的原因时,我正准备向Udacity发送有关缺少位的反馈。因此,成功运行该程序后,我删除了上述gradle.properties
线,清洁并重建了该项目。令我惊讶的是,它仍然建造并跑了。
所以我不知道是什么解决了问题或如何解决下一个项目中的这些问题。
我也想防止所有全局KTX绑定类实例化,我仍然对如何做到这一点。
另一个这样答案要求提供两种解决绑定类问题的解决方案,但是给出的解决方案是针对2016年和2017年,尽管没有实施这些解决方案,但上述Gradle文件目前正在工作(生成绑定类(,因此显然有一种新的方式。
感谢您提供的任何帮助!(哦,我还应该提到我正在使用完整的Android Studio版本3.4。(
更新1 :我正在取得一些进展。看来Android Studio 3.4代码编辑器是唯一无法识别生成的数据绑定类的东西。重建后,这些课程再次得到认可,但在清洁时却失去了认可。我还不确定这种理解能够解决我的所有问题...
更新2 :这是(至少部分(3月份修复的Android Studio错误,该错误是金丝雀7。
为了禁用kotlin综合访问,从应用程序级别build.gradle文件删除插件 kotlin-android-extensions 。此插件生成合成导入。