我有一个正在创建的应用程序,该应用程序使用Room for DB和MVVM体系结构。我添加了一个Kotlin对象,该对象的功能可以保存到Room数据库中。
因为没有片段或活动,所以没有视图,所以我想知道我使用的过程是否最有意义?它有效,但是仅仅因为它有效并不意味着它正确。
看到Kotlin对象没有构造函数,我添加了一个设置对象的ViewModel的函数,该函数又使我可以访问存储库,从而可以访问保存到数据库中。
我无法理解的地方是,我在应用程序文件(与设置Kodein的文件相同)中调用此函数,所以我无法调用ViewModelProviders.of函数,因为我不在片段中/活动。相反,我调用了ViewModelFactory.create函数。我忍不住觉得它不会返回其余应用程序调用的相同ViewModel?
Android Gurus,我征求您的意见...
请告知我是否走上正轨或完全外出午餐?
还有,有人可以解释一下结合与结合之间的Kodein区别吗?
应用程序(由Android清单调用)
class SampleIdeaApplication: Application(), KodeinAware {
override fun onCreate() {
val sampleIdeaViewModelFactory:SampleIdeaViewModelFactory by instance()
val sampleIdeaViewModel: SampleIdeaViewModel = sampleIdeaViewModelFactory.create(SampleIdeaViewModel::class.java)
SampleIdea.setSampleIdeaViewModel(sampleIdeaViewModel)
}
}
SimpleIdeaViewModelFactory
class SampleIdeaViewModelFactory(private val sampleIdeaRepository: SampleIdeaRepository) : ViewModelProvider.NewInstanceFactory() {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return SampleIdeaViewModel(sampleIdeaRepository) as T
}
}
SampleIdea(对象)
object SampleIdea {
private lateinit var sampleIdeaViewModel: SampleIdeaViewModel
fun insertIntoSampleIdeaDatabase(sie:SampleIdeaEntity) {
sampleIdeaViewModel.upsert(sie)
}
fun setSampleIdeaViewModel(sivm: SampleIdeaViewModel) {
sampleIdeaViewModel = sivm
}
}
再次记住,这是实际代码的非常简化的版本(实际代码保存了很多信息,插入乐趣是私有的,还有其他一些公开乐趣可以调用。