为了转移ViewModel的附加参数parameters,我们使用ViewModelFactory。例如
ExtraParamsViewModelFactory(this.requireActivity().application, "some string value")
但是当ViewModel被创建时,我不能动态地改变argumentsparameters。
val myViewModel = ViewModelProvider(this, ExtraParamsViewModelFactory(this.requireActivity().application, "some string value")).get(SomeViewModel::class.java)
"一些字符串值 "在fragmentactivity类中变成了harcoded。在 "一些字符串值 "中,我需要向ViewModel传递一个总是不同的日期。在片段中,用户选择了一个日期,点击了按钮,这个日期作为argumentsparameters传递给ViewModel。不适合这个ViewModelFactory?
不需要在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`
}
}
然后在你的ActivityFragment中简单地调用它,就像这样。
vm.setNewStringValue("new value")