gpt4 book ai didi

android - ActivityViewModels 和惰性 ViewModelProvider 的区别?

转载 作者:行者123 更新时间:2023-12-04 23:37:35 29 4
gpt4 key购买 nike

ActivityViewModels 和惰性 ViewModelProvider 的区别?
我见过两种初始化 View 模型的方法:

private val someViewModel: SomeViewModel by activityViewModels()
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
我知道 lazy仅在需要时初始化 ViewModel 并且 activityViewModels对于在 fragment 之间共享数据很有用,但除此之外有什么区别?
Android 文档说 activityViewModels被限定在 Activity 范围内,但这是否意味着如果使用 activityViewModels 在同一 Activity 内的多个 fragment 中使用相同的 View 模型是否只创建了一个在所有 fragment 之间共享的实例?

最佳答案

当您调用 ViewModelProvider(this) , thisViewModelStoreOwner .
对于每个唯一的 ViewModelStoreOwner,将有一个给定 type 的唯一 ViewModel .
现在来回答这个问题。
你打电话时

private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
您将获得一个范围为当前 Fragment/Activity 的 ViewModel。 Lazy只是推迟初始化。
你打电话时
private val someViewModel: SomeViewModel by activityViewModels()
您将获得一个范围为 Activity 的 ViewModel。当多个 Fragment 使用相同的代码时,它们正在请求范围为父 Activity 的 ViewModel。如果所有 Fragment 的父 Activity 相同,则 Fragments 将获得相同的 ViewModel,因为 ViewModelStoreOwner连接到 Activity 保持不变。

关于android - ActivityViewModels 和惰性 ViewModelProvider 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68058302/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com