Android viewModel和Kotlin:与

时间:2018-05-24 18:55:56

标签: android kotlin fragment viewmodel

我研究了viewModel类并做了一个简单的测试来理解这个理论(初学者)。我搜索了其他来源,我不确定与谁共享此viewModel中的数据。使用一个属性创建了一个简单的viewModel类:

class MyViewModel: ViewModel() {
    var result: Int? = null
}

从两个位置将值设置为viewModel:

root活动

val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
model.result = 6

片段A:

val model = ViewModelProviders.of(activity).get(MyViewModel::class.java)
model.result = 9

从活动访问该属性时,我看到6 。当片段B访问它时(两个片段都是相同活动的孩子),我看到9 。那就对了? Activity使用的viewModel仅对另一个Activity可见?或者,如果一个片段使用了viewModel,那么它只对其他片段可见?如果是的话,为了看到彼此,我是否需要使用包,参数,意图或其他东西?我很感激你的帮助。

1 个答案:

答案 0 :(得分:0)

ViewModelProviders.of(activity)检索的视图模型仅共享给该活动及其childeren(片段)。除非您创建自己的ViewModelProvider类,否则不能在多个活动之间共享ViewModel。

如果需要在活动之间共享数据,则应遵循存储库模式,首先将数据存储在存储库中(绑定到应用程序而不是活动),然后从该存储库中检索其他活动中的数据。 / p>