Android 如何在嵌套的导航控制器片段之间传递事件/数据

Android 如何在嵌套的导航控制器片段之间传递事件/数据,android,android-fragments,android-architecture-components,android-architecture-navigation,Android,Android Fragments,Android Architecture Components,Android Architecture Navigation,我计划使用如下视图层次结构: 基本上,主片段将能够触发底部工作表导航控制器内的导航,底部工作表片段也将能够触发底部工作表导航控制器内的导航,并向主片段发送事件/数据 例如,假设主片段有一个项目网格,而底部的工作表片段显示最后单击的项目详细信息。用户可能会单击底部表单片段中详细信息中的按钮,比如说“Order Now”按钮,现在必须对主片段执行此事件。请不要拘泥于这个特定的用例,这只是我正在做的一个例子来说明这个需求 我的问题是如何克服Android Jetpack中导航控制器提供的分离?关于如

我计划使用如下视图层次结构:

基本上,主片段将能够触发底部工作表导航控制器内的导航,底部工作表片段也将能够触发底部工作表导航控制器内的导航,并向主片段发送事件/数据

例如,假设主片段有一个项目网格,而底部的工作表片段显示最后单击的项目详细信息。用户可能会单击底部表单片段中详细信息中的按钮,比如说“Order Now”按钮,现在必须对主片段执行此事件。请不要拘泥于这个特定的用例,这只是我正在做的一个例子来说明这个需求

我的问题是如何克服Android Jetpack中导航控制器提供的分离?关于如何使用常见的
活动
等来管理共享同一屏幕的
片段
之间的通信,有很多文档介绍,但现在有了新的导航控制器,它带来了新的抽象,将
片段
处理解耦,因此我不太确定如何继续


我考虑过可能使用
Singleton
来传递事件/数据,可能里面有
LiveData
,但我认为可能会有一些更优雅的解决方案。

LiveData和ViewModel的解决方案这是一个非常好的解决方案,MainFragment和BottomSheetFragment将附加到同一个ViewModel实例。MainFragment将在ViewModel中观察到一些LiveData对象,当用户单击底部工作表片段中详细信息内的按钮时,ViewModel中的LiveData对象将被更改,MainFragment将收到通知。

这是ViewModel文档中提出的解决方案,我首先考虑使用它,我的问题是我相信这个“全局”视图模型“这将是一门非常复杂的课程。由于底部工作表中有一个导航器,因此底部工作表中将有几个片段被替换,所有这些片段都将使用相同的ViewModel。因此,这个视图模型将具有主片段的逻辑,以及由底部工作表导航的所有片段。它必须有一些排序状态机或条件,以了解它在底部页面导航中的位置。。。。。。。。。我担心它会变得太凌乱、庞大,难以阅读、维护和测试。简言之:文档中提供的使用1个ViewModel的主细节(2个片段)解决方案很好,但在我的情况下,我可以在底部页面中有6个导航目的地(片段)和主片段,这个主ViewModel总共有7个片段需要管理,我担心对于一个ViewModel来说可能太多了,你不这么认为吗?你可以为不同的用例使用多个ViewModel类,其中一些可以是“全局的”,这样它就不会是一个大类而是多个小类。是的,我只是想让内部ViewModel与另一个ViewModel交换信息,而不必在其中一个或另一个之间进行选择