【发布时间】:2019-08-02 12:50:50
【问题描述】:
我有一个包含片段的活动 (ParentFragment)。
ParentFragment 有一个片段,其导航控制器带有多个片段。
ParentFragment 的 ViewModel 具有标题、副标题和颜色属性。
每次我导航到另一个片段时,ParentFragment 的 ViewModel 数据都应该更新(片段是带有数据的片段),我该如何实现?
我知道如何共享一个viewModel,它不适合项目需要,每个片段都应该有自己的viewModel,ParentFragment也是如此。
class ParentFragment: Fragment() {
private lateinit var parentViewModel: ParentViewModel
}
class ChildFragment: Fragment() {
private lateinit var childViewModel: ChildViewModel
}
class ParentViewModel : ViewModel() {
var title: String? = null
var subtitle: String? = null
var color: Int? = null
}
class ChildViewModel : ViewModel() {
init {
// I need to access ParentViewModel and update title, subtitle and color here.
}
}
【问题讨论】:
-
@a_local_nobody 来源?
-
这并不意味着一个片段不能包含另一个片段
-
@a_local_nobody "两个片段永远不应该直接通信。"与“一个片段不应包含另一个片段”不同,后者是错误的。无论如何,假设您有一个为所有片段共享自定义标题的活动,并且每个片段都具有标题文本的值,该标题的文本将成为活动 ViewModel 的一部分,如果您不想要一个巨大的 ViewModel,您将拥有每个片段一个 ViewModel,片段和活动之间不共享一个。片段不应该知道活动的 ViewModel,这就是为什么嵌套 ViewModel 是一种解决方案,我只是不知道如何。
-
你是说,你有一个活动,有一个片段,所有其他片段都需要知道那个片段的价值?
-
@a_local_nobody 我根本不是这么说的,在假设的情况下,我告诉过你片段更新了活动标题,彼此不知道,他们也不知道活动,但它们具有活动标题的文本(例如,当您在活动中有一个工具栏但片段是具有标题所需信息的片段时)。
标签: android mvvm nested navigation viewmodel