android - 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?
解决方案
无需在 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")
推荐阅读
- python - 如何在 NLP 中同时进行数据增强和交叉验证?
- python - 在python中增加日期
- facebook - 使用令牌从网页链接到 facebook messenger
- javascript - 如何添加JS“addEventListener”?
- node.js - 从 NodeJs 获取数据到 Angular
- php - 来自主域和子域的 PHP 会话
- javascript - 为什么我最新的 css 文件没有在我的浏览器中更新?
- python - 为什么此代码在 phpadmin/sql 中有效,但在 python 代码中无效?
- python - PlotlyDash:如何更改线条颜色?
- visual-studio-2010 - Visual Studio 2010 的参考程序集/DLL 属性窗口中缺少“嵌入互操作类型”属性