通过 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)。