为了传输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)
“一些字符串值”在片段/activity类中变得硬编码。 在“some string value”中,我需要向ViewModel传递一个总是不同的日期。 在该片段中,用户选择了一个日期,单击按钮,并将该日期作为参数/参数传递给ViewModel。 不适合此ViewModelFactory?
无需在ViewModel构造函数中传递参数。 您所需要的只是一个setter&; 根据你的用途而定。
我猜你的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/片段中。。简单地叫它。。像这样
vm.setNewStringValue("new value")