【问题标题】:Android kotlin passing dynamic arguments/parameters to ViewModel with ViewModelFactoryAndroid kotlin 使用 ViewModelFactory 将动态参数/参数传递给 ViewModel
【发布时间】:2020-06-06 22:18:22
【问题描述】:

为了为 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?

【问题讨论】:

    标签: android kotlin viewmodel


    【解决方案1】:

    无需在 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")
    

    【讨论】:

    • 谢谢!很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多