我有一个包含许多片段的活动。每个片段都有一个viewModel,它的作用范围是它的生命周期,里面有一些逻辑。主活动也有一个viewModel,包括一些显示弹出式消息的代码。
我希望我的片段viewModel能够向这个弹出式消息发布消息。然而,我如何能从我的一个fragment-viewModel内部访问activity-viewModel呢?
我会写一些Kotlin的示例代码,但这个问题并不针对Kotlin,因为它更多的是一个架构问题。
class MyActivityViewModel {
...
popupMessage = MutableLiveData<String>("") // is observed by my activity
fun postMessage(text: String) {
popupMessage.value = text
}
}
class MyFragmentAViewModel {
...
fun someFunctionA() {
// want to call ActivityViewModel's postMessage from here
}
}
class MyFragmentBViewModel {
...
fun someFunctionB() {
// want to call ActivityViewModel's postMessage from here too
}
}
我不能轻松地调用 ViewModelProvider
因为我不想在我的viewModel中保留一个对Activity的引用。我看到的唯一直接的选择是通过构造函数或一个 init()
方法。该 应 是安全的,因为父视图模型的寿命应该超过片段视图模型的寿命。我想是这样的。
不过,这个解决方案还是让我觉得不妥。
有其他的选择吗?或者是完全不同的方法来解决这个问题?
这是一个菜鸟的想法。
你不能告诉活动你的片段想使用它的方法吗?
如果你
这应该不行吗?还是说这违反了你的 "不留参考资料"?"正如我所说。我是新来的,所以我可能完全错了 I'm new to all of this, so I might be completely wrong.
我可以看到媒介上有一个帖子可能是相关的。"如何在片段和活动之间进行交流