dba*_*nes 20 android kotlin android-viewmodel
ActivityViewModel 和惰性 ViewModelProvider 之间的区别?
我见过两种初始化视图模型的方法:
private val someViewModel: SomeViewModel by activityViewModels()
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
Run Code Online (Sandbox Code Playgroud)
我知道lazy仅在需要时才初始化 ViewModel,这activityViewModels对于在片段之间共享数据很有用,但除此之外还有什么区别?
Android 文档说其activityViewModels范围仅限于 Activity,但这是否意味着如果在同一 Activity 内的多个片段中使用相同的视图模型,activityViewModels并且只创建一个在所有片段之间共享的实例?
Sub*_*Sen 37
当你打电话时ViewModelProvider(this),this指的是ViewModelStoreOwner。
对于每个唯一的 ViewModelStoreOwner,将有一个给定的唯一 ViewModel type。
现在来回答这个问题。
你打电话时
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
Run Code Online (Sandbox Code Playgroud)
您将获得一个范围仅限于当前片段/活动的 ViewModel。Lazy只是推迟初始化。
你打电话时
private val someViewModel: SomeViewModel by activityViewModels()
Run Code Online (Sandbox Code Playgroud)
您将获得一个仅限于 Activity 范围的 ViewModel。当多个片段使用相同的代码时,它们会请求作用域为父 Activity 的 ViewModel。如果所有 Fragments 的父 Activity 相同,则 Fragments 将获得相同的 ViewModel,因为ViewModelStoreOwner与 Activity 的连接保持不变。
| 归档时间: |
|
| 查看次数: |
21365 次 |
| 最近记录: |