android - 在片段中获取 ViewModel 时,我应该将“viewModelStore”还是“this”作为 ViewModelStore 提供给 ViewModelProvider() 方法
问题描述
在我的片段类中,当我得到我的视图模型时,我可以用两种不同的方式编写我的代码。
- 使用“viewModelStore”
ViewModelProvider(viewModelStore, viewModelFactory).get(FragmentViewModel::class.java)
- 使用“这个”
ViewModelProvider(this, viewModelFactory).get(FragmentViewModel::class.java)
我的问题是,这两种选择之间是否存在任何区别,如果是,哪一种是更可取的方法?
解决方案
如果您提供自己ViewModelProvider.Factory
的this
.
当然,如果你在 Kotlin 中,根本不需要ViewModelProvider
直接使用,而是想使用Fragment KTX并使用
val viewModel: FragmentViewModel by viewModels { viewModelFactory }
请注意,如果您没有使用自己的工厂,则应始终传入 a ViewModelStoreOwner
(ie, )而this
不是仅传入the Javadoc明确提到:ViewModelStore
如果所有者实现,此方法将使用默认工厂
HasDefaultViewModelProviderFactory
。否则,ViewModelProvider.NewInstanceFactory
将使用 a。
构造ViewModelStore
函数无法获得正确的默认工厂。
推荐阅读
- android - 发现无效的 Gradle JDK 配置。打开 Gradle 设置
- .net - .Net Framework 项目是否会成为 .Net 5 的跨平台?
- javascript - 加载 JSON 适用于 XMLHttpRequest 但不适用于 jQuery
- function - java调用存储在集合中的参数的函数
- vba - 系统管理员无法发送 olBCC 邮件
- google-cloud-platform - 如何谷歌oauth到一个api?我的例子不起作用
- c++ - 如何链接 IUnknown_QueryServicePropertyBag
- powershell - Powershell 将嵌套对象数组导出到 CSV
- c# - 此函数只能在单元测试期间从 LINQ to Entities 错误中调用
- postgresql - 使用二进制 COPY 加载 jsonb[] 列