通过ViewModelProvider获取ViewModel实例。

问题描述 投票:0回答:1

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的实例?

android android-viewmodel
1个回答
3
投票

这在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的)。

© www.soinside.com 2019 - 2024. All rights reserved.