首页 > 解决方案 > Android kotlin 使用 ViewModelFactory 将动态参数/参数传递给 ViewModel

问题描述

为了为 ViewModel 传输额外的参数/参数,我们使用了 ViewModelFactory。例如

ExtraParamsViewModelFactory(this.requireActivity().application, "some string value")

但是当创建 ViewModel 时,我无法动态更改参数/参数

 val myViewModel = ViewModelProvider(this, ExtraParamsViewModelFactory(this.requireActivity().application, "some string value")).get(SomeViewModel::class.java)

“一些字符串值”在片段/活动类中被硬编码。在“一些字符串值”中,我需要传递一个始终与 ViewModel 不同的日期。在片段中,用户选择了一个日期,点击了按钮,这个日期作为参数/参数传递给 ViewModel。不适合这个 ViewModelFactory?

标签: androidkotlinviewmodel

解决方案


无需在 ViewModel 构造函数中传递参数。您所需要的只是一个 setter 和 warrper 类,具体取决于您的使用。

我猜你的 ViewModel 会有这样的东西


data class CustomWrapper<T>(var value:T)
class  VM : ViewModel(){

    private val stringValue = CustomWrapper<String>("")

    fun setNewStringValue(value:String){
        stringValue.value = value
        //TODO:: update stuff related to `stringValue` 
    }

}

然后在你的 Activity/Fragment 中..只需调用它..像这样

vm.setNewStringValue("new value")

推荐阅读