Android 通过ViewModelProvider获取ViewModel实例

Android 通过ViewModelProvider获取ViewModel实例,android,android-viewmodel,Android,Android Viewmodel,不推荐使用ViewModelProviders ViewModelProviders.of(this).get(MyViewModel::Class.java) 如其他StackOverflow答案所示,未找到: ViewModelProvider(this).get(MyViewModel::class.java) 未被调用的onCleared()似乎有问题: ViewModelProvider.NewInstanceFactory().create(MainViewModel::clas

不推荐使用ViewModelProviders

ViewModelProviders.of(this).get(MyViewModel::Class.java)
如其他StackOverflow答案所示,未找到:

ViewModelProvider(this).get(MyViewModel::class.java)
未被调用的
onCleared()
似乎有问题:

ViewModelProvider.NewInstanceFactory().create(MainViewModel::class.java)
另外,我不想通过viewmodel()使用KTX扩展名

最后一个选择是:

ViewModelProvider(this, myViewModelFactory).get(MyViewModel::class.java)
它需要一个ViewModelFactory,我还没有想到如何实现和返回实例:

class ViewModelFactory : ViewModelProvider.Factory {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        ...
    }

}
类ViewModelFactory:ViewModelProvider.Factory{
重写趣味创建(modelClass:Class):T{
...
}
}
很长一段时间以来,我一直在使用Koin注入我的ViewModels,不使用它会使获取ViewModel实例变得混乱

有没有办法在API级别30中轻松获取ViewModel的实例?

这已经完全脱离了API 30

“API 30”指的是Android SDK框架版本
ViewModelProviders
从未在框架中
ViewModelProviders
仍然存在,并且仍然存在。您认为它已被弃用是正确的

这也不见了

不,不是。它是可用的,并且是可用的

有没有办法在API级别30中轻松获取ViewModel的实例


使用
ViewModelProvider(this).get(MyViewModel::class.java)
(您的第二个代码片段)。请参见(在Kotlin中,我使用属性委托,可以是Google的,也可以是Koin的)。

是的,您是对的。ViewModelProvider位于
ViewModelProvider(this.get)(MyViewModel::class.java)
依赖项中。