我有一个片段,其中有两个带有提示文本的TextView
。当用户点击第一个时,底部表单对话框打开,并显示可能的选项列表。用户选择一个选项,选项信息显示在第一个TextView
中,而不是提示文本。当用户点击第二个TextView
时,底部表单对话框打开,但显示筛选的选项列表(列表是根据第一个选项过滤的)。用户选择一个选项,选项信息显示在第二个TextView
中,而不是提示文本。我已经通过对片段本身只使用一个ViewModel实现了这一点,但似乎不太合适,因为ViewModel做的太多了。因此,我尝试使用两个ViewModel:一个用于片段本身在选项被选择时更新,另一个用于底部工作表对话框加载数据并在列表中显示它们。但问题是我无法将所选选项从底部工作表对话框ViewModel共享到片段ViewModel。有没有办法通过使用两个ViewModel来实现我想要实现的目标?
3条答案
按热度按时间eivgtgni1#
就目前而言,据我所知,Google推荐的方法是为此类情况建立一个共享视图模型。
我不确定你是如何在你的情况下实现它的-但如果它是类似于谷歌推荐的东西-那么它是可以的。
当然,您可以创建通过接口和UI调用连接的多个视图模型的精细架构,但我不知道是否值得。
实现这种情况的一般规则不是使用具有大量抽象和生成的最干净的方法,而是使用仍然试图遵循OOD原则的最优化的方法(就所花费的时间和代码的简单性/可读性而言)。
希望能有所帮助。
nkoocmlb2#
我遇到了这个问题,我用接口解决了。我认为这是最好的做法。例如:我展示了如何将字符串从对话框底部表单发送到片段。
首先我们创建新界面
其次,我们从类构造函数中获取底部表单对话框片段,并编写如何触发此侦听器,例如单击textView。
最后,我们编写片段或活动代码,首先从侦听器继承并创建bottomSheetDialog对象。
k2fxgqgv3#
您可以在一个
Fragment
中包含多个ViewModel
,因此不需要保留一个巨大的共享ViewModel
,其中包含3个较小的共享ViewModel
的所有逻辑。您可以创建一个额外的共享
ViewModel
,它只关心实际的公共数据,并将3个单独的片段特定ViewModel
保持分离。