Android kotlin 使用 ViewModelFactory 将动态 arguments/parameters 传递给 ViewModel

Android kotlin passing dynamic arguments/parameters to ViewModel with ViewModelFactory

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

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

但是在创建 ViewModel 时,我无法动态更改 arguments/parameters

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

"some string value" 在 fragment/activity class 中被硬编码。在 "some string value" 中,我需要传递一个始终与 ViewModel 不同的日期。在该片段中,用户选择了一个日期,单击了按钮并将该日期作为 arguments/parameters 传递给 ViewModel。不适合这个 ViewModelFactory?

无需在 ViewModel 构造函数中传递参数。您所需要的只是 setter & warrper class 取决于您的用途。

我猜你的 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")