Android 在 Kotlin 中:来自 Google 代码实验室的项目的数据绑定错误

Android in Kotlin: Error in Databinding from the project by Google codelabs

我正在学习 Google、https://codelabs.developers.google.com/codelabs/kotlin-android-training-data-binding-basics/index.html?index=..%2F..android-kotlin-fundamentals#2

提供的这门课程

github中的特定代码:https://github.com/google-developer-training/android-kotlin-fundamentals-apps/tree/master/AboutMeDataBinding

这里我做的是数据绑定,一步一步展示了如何实现它。但最后我遇到了一个错误 ActivityMainBinding

我已经从 github 下载了他们的解决方案代码,在使用 Android-studio 3.4.1 打开时,我遇到了同样的问题。

主要Acctivity.kt

  package com.example.android.aboutme
    import android.content.Context
     import android.os.Bundle
     import android.view.View
   import android.view.inputmethod.InputMethodManager
  import androidx.appcompat.app.AppCompatActivity 
   import androidx.databinding.DataBindingUtil
   import com.example.android.aboutme.databinding.ActivityMainBinding

 class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

private val myName: MyName = MyName("Aleks Haecky")

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, 
R.layout.activity_main)

    binding.myName = myName

    binding.doneButton.setOnClickListener {
        addNickname(it)
    }

}


 private fun addNickname(view: View) {
    binding. apply {
        myName?.nickname = nicknameEdit.text.toString()
        invalidateAll()
        nicknameEdit.visibility = View.GONE
        doneButton.visibility = View.GONE
        nicknameText.visibility = View.VISIBLE
    }

    // Hide the keyboard.
    val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}

Build.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 "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    testImplementation 'junit:junit:4.12'
}

我原以为一切正常,但 ActivityMainBinding 是红色的。错误提示未解决的引用。

IDE Fatal Error:
java.lang.NullPointerException
    at com.intellij.build.MultipleBuildsView.lambda$onEvent(MultipleBuildsView.java:218)
    at com.intellij.build.MultipleBuildsView.lambda$onEvent(MultipleBuildsView.java:310)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
    at java.awt.EventQueue.access0(EventQueue.java:98)
    at java.awt.EventQueue.run(EventQueue.java:715)
    at java.awt.EventQueue.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:755)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:704)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:391)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Unresolved reference: ActivityMainBinding
Unresolved reference: ActivityMainBinding
Unresolved reference: it
Unresolved reference: nicknameEdit
Unresolved reference: invalidateAll
Unresolved reference: nicknameEdit
Unresolved reference: doneButton
Unresolved reference: nicknameText

我通过试用的方法得到了这个答案。我们需要简单地清理项目,然后重建。 为此,我们可以简单地省略(或删除)以灰色描绘的导入(即它们在项目中是不必要的)。然后,Build->Clean Project 然后 Build->Rebuild Project.

包括@Chandramauli Chakraborty 的回答我还认为您的代码或任何 Kotlin 或 XML 文件中的某处可能还有其他错误。请确保你已经正确地修复了所有这些问题,并且他们会尝试按照学院所说的去做。