通过 ViewModelProvider 获取 ViewModel 实例
Getting ViewModel Instance by ViewModelProvider
ViewModelProviders 已弃用
ViewModelProviders.of(this).get(MyViewModel::Class.java)
正如其他 Whosebug 答案所建议的,未找到此内容:
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 和 return 实例:
class ViewModelFactory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
...
}
}
很长一段时间以来,我一直使用 Koin 注入我的 ViewModel,但不使用它会使获取 ViewModel 的实例变得混乱。
在API 30级有没有什么方法可以轻松获取ViewModel的实例?
This is completely gone from API 30
"API 30"指的是AndroidSDK框架版本。 ViewModelProviders
从未在框架中。 ViewModelProviders
仍然存在 in lifecycle-extensions
and is still documented。你说得对,它已被弃用。
This is also gone
不,不是。可用 in lifecycle-viewmodel
and is still documented.
Is there any way to get an instance of ViewModel easily in API Level 30?
使用ViewModelProvider(this).get(MyViewModel::class.java)
(你的第二个代码片段)。请参阅 this Java example(在 Kotlin 中,我使用 属性 委托,Google 或 Koin's)。
ViewModelProviders 已弃用
ViewModelProviders.of(this).get(MyViewModel::Class.java)
正如其他 Whosebug 答案所建议的,未找到此内容:
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 和 return 实例:
class ViewModelFactory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
...
}
}
很长一段时间以来,我一直使用 Koin 注入我的 ViewModel,但不使用它会使获取 ViewModel 的实例变得混乱。
在API 30级有没有什么方法可以轻松获取ViewModel的实例?
This is completely gone from API 30
"API 30"指的是AndroidSDK框架版本。 ViewModelProviders
从未在框架中。 ViewModelProviders
仍然存在 in lifecycle-extensions
and is still documented。你说得对,它已被弃用。
This is also gone
不,不是。可用 in lifecycle-viewmodel
and is still documented.
Is there any way to get an instance of ViewModel easily in API Level 30?
使用ViewModelProvider(this).get(MyViewModel::class.java)
(你的第二个代码片段)。请参阅 this Java example(在 Kotlin 中,我使用 属性 委托,Google 或 Koin's)。