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

时间:2018-08-29 21:43:44

标签: android android-fragments android-architecture-components android-architecture-navigation

我正在计划这样的视图层次结构:

enter image description here

基本上,“主要片段”将能够触发“底页导航控制器”内部的导航,“最下面片段”也将能够触发“底页导航控制器”内部的导航并将事件/数据发送至“主要片段”。

例如,假设“主片段”具有项目网格,而“底片片段”显示了最后单击的项目详细信息。用户可以在“底部工作表片段”中的详细信息内单击一个按钮,比如说“立即订购”按钮,现在必须将此事件执行到“主要片段”中。请不要拘泥于这种特殊的用例,这只是我用来说明此需求的一个示例。

我的问题是我该如何克服Android Jetpack中导航控制器提供的分隔?关于如何使用公用Activity等来管理共享同一屏幕的Fragments之间的通信,有很多文档,但是现在有了新的Navigation Controller,它带来了使{{ 1}}处理,因此我不确定如何继续。

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

1 个答案:

答案 0 :(得分:0)

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