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

时间:2019-03-26 21:41:11

标签: kotlin android-viewmodel

作为经验丰富的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 get(p0:Class):T中绑定到T的类型参数    不满意:推断类型QuestsViewModel!不是ViewModel的子类型!

当ApplicationViewModel(我继承自)直接从ViewModel继承时,为什么我认为我的自定义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"

1 个答案:

答案 0 :(得分:0)

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

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