实例化AndroidViewModel子类时出现“不是子类型”错误

问题描述 投票:0回答:1

作为一个经验丰富的iOS开发人员制作我的第一个Android应用程序,我试图使用AndroidViewModel来允许我的运行时状态的跨片段/交叉配置更改持久性。我使用的是AndroidViewModel而不是ViewModel,因为我需要访问应用程序上下文来加载一些静态资源。

这是我的AndroidViewModel子类:

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

而我正试图从我的主要活动的onCreate访问它,如下所示:

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

但是我得到了编译器错误:

在操作符fun中输入T的参数绑定get(p0:Class):T不满足:推断类型QuestsViewModel!不是ViewModel的子类型!

我很困惑为什么它认为我的自定义ViewModel类不是子类,当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"
kotlin android-viewmodel
1个回答
0
投票

对于任何发现这个问题的人来说,以后的参考:我的问题是从两个源文件中的两个不同的包中导入AndroidViewModel类 - 一个来自androidx名称空间而一个不是。

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

© www.soinside.com 2019 - 2024. All rights reserved.