作为经验丰富的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"
答案 0 :(得分:0)
供以后发现它的任何人参考:我的问题是从两个源文件中的两个不同的包中导入AndroidViewModel
类-一个来自androidx命名空间,另一个没有。
将我的所有gradle软件包迁移到androidx版本(如果可能)并更新所有import
语句即可解决此问题。