s3r*_*ius 6 java android kotlin android-viewmodel
我有一个包含许多片段的活动。每个片段都有一个其生命周期范围内的视图模型,其中包含一些逻辑。宿主活动也有一个 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
}
}
Run Code Online (Sandbox Code Playgroud)
我无法轻松调用,ViewModelProvider因为我不想在视图模型中保留对 Activity 的引用。我看到的唯一直接选项是通过构造函数或方法将 Activity-viewModel 传递给fragment-viewModel init()。这应该是安全的,因为父 viewModel 的生命周期应该超过片段 viewModel 的生命周期。我认为。
尽管如此,这个解决方案还是让我很恼火。
还有其他选择吗?或者也许对这个问题采取完全不同的方法?
小智 0
这是新手的想法:
你不能告诉 Activity 你的片段想要使用它的方法吗?
如果你
这不应该起作用吗?或者这违背了你的“不保留参考资料”?正如我所说:我对这一切都是新手,所以我可能完全错了。
我可以看到媒体上有一篇可能相关的帖子:How to Communicate Between Fragment and Activity
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |