如何使用Fragment中的ViewModelProvider将ViewModel附加到活动中?

时间:2019-11-16 15:24:17

标签: android android-fragments android-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)

WeatherViewModelFactory:

//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中缺少了一些内容

0 个答案:

没有答案