首页 > 解决方案 > 如何使用 Fragment 中的 ViewModelProvider 将 ViewModel 附加到活动?

问题描述

众所周知ViewModelProviders,已弃用我正在尝试删除已弃用的代码移动到ViewModelProvider.

所以基本上我有一个 ViewModel(无参数)附加到活动,并且所有片段都访问应用程序状态的同一个实例。

我想在我的活动/片段中知道如何获取附加到活动的 ViewModel 实例。

活动:

val weatherViewModelFactory = WeatherViewModelFactory()
val viewModel = ViewModelProvider(viewModelStore, weatherViewModelFactory).get(WeatherViewModel::class.java)

分段:

val weatherViewModelFactory = WeatherViewModelFactory()
val viewModel = ViewModelProvider(activity!!.viewModelStore, weatherViewModelFactory).get(WeatherViewModel::class.java)

天气视图模型工厂:

//use less in my case 
class WeatherViewModelFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        return modelClass.getConstructor().newInstance()
    }
}

摇篮依赖:

implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"

您必须注意到的主要问题是我WeatherViewModelFactory每次都被迫创建,即使我必须获取片段的实例。



我注意到的是,androidx.lifecycle:lifecycle-extensions:2.2.0-rc02他们引入了一个构造函数。

public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {

哪个可以解决我的问题,但我不想转到那个版本。我一定是遗漏了一些东西2.1.0

标签: androidandroid-fragmentsandroid-viewmodel

解决方案


推荐阅读