"Not a subtype" 实例化 AndroidViewModel 子类时出错

"Not a subtype" error when instantiating AndroidViewModel subclass

作为经验丰富的 iOS 开发人员制作我的第一个 Android 应用程序,我正在尝试使用 AndroidViewModel 允许 cross-fragment/cross-configuration-change 持久化我的运行时状态。我使用 AndroidViewModel 而不是 ViewModel 因为我需要访问应用程序上下文来加载一些静态资源。

这是我的 AndroidViewModel 子class:

class QuestsViewModel(application: Application) : AndroidViewModel(application) {
  // Some member state variables
}

我正在尝试从我的主 activity 的 onCreate 访问它,如下所示:

val viewModel = ViewModelProviders.of(this,
  ViewModelProvider.AndroidViewModelFactory(this.application))
    .get(QuestsViewModel::class.java)

但是我得到编译器错误:

Type parameter bound for T in operator fun get(p0: Class): T is not satisfied: inferred type QuestsViewModel! is not a subtype of ViewModel!

我很困惑为什么它认为我的自定义 ViewModel class 不是子 class,当 ApplicationViewModel(我继承自)直接继承自 ViewModel 时?

为了清楚起见,我试图完全用 Kotlin 编写这个项目(如果可能的话)。为了以防万一,我的 gradle 依赖项是:

    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.google.android.gms:play-services-maps:16.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-v4:28.0.0'
    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'

    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.volley:volley:1.1.1'

    def lifecycle_version = "2.0.0"
    implementation "android.arch.lifecycle:extensions:1.1.1"
    implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
    kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

供发现此问题的任何人日后参考:我的问题是从两个源文件中的两个不同包导入 AndroidViewModel class - 一个来自 androidx 命名空间,一个不。

将我所有的 gradle 包迁移到 androidx 版本(如果可能)并更新所有 import 语句解决了问题。