ViewModelProviders已被废弃。
ViewModelProviders.of(this).get(MyViewModel::Class.java)
正如其他StackOverflow答案和This is not being found所建议的那样。
ViewModelProvider(this).get(MyViewModel::class.java)
似乎有一个问题 onCleared()
不被调用。
ViewModelProvider.NewInstanceFactory().create(MainViewModel::class.java)
还有,我也不想用KTX-Extensions的方式。by viewmodel()
最后一个选项是
ViewModelProvider(this, myViewModelFactory).get(MyViewModel::class.java)
它需要一个ViewModelFactory 我还没弄明白如何实现并返回实例。
class ViewModelFactory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
...
}
}
我已经很久没有使用ViewModel来注入我的ViewModel了。科因 而不使用它,就会对获取ViewModel的实例感到困惑。
在API Level 30中,有没有什么方法可以轻松获得ViewModel的实例?
这在API 30中完全消失了
"API 30 "指的是Android SDK框架版本。ViewModelProviders
从未在框架中出现过。ViewModelProviders
仍然存在 在 lifecycle-extensions
和 尚有记载. 你是对的,它已经被废弃了。
这一点也已经消失了。
不,它不是。它是可用的 在 lifecycle-viewmodel
和 尚有记载.
有什么方法可以在API Level 30中轻松获得ViewModel的实例?
使用 ViewModelProvider(this).get(MyViewModel::class.java)
(你的第二个代码片段)。请看 这个Java例子 在Kotlin中,我使用了一个属性委托,无论是Google的还是Koin的)。