我有3个'顶级'片段的设置,每个片段使用他们自己的子片段管理器来提供向下导航。通过使用主要活动的支持片段管理器替换这些顶级片段。清除工具栏菜单选项时,它被替换为片段
其中一个顶级片段有一个子片段,它使用setHasOptionsMenu()
和onCreateOptionsMenu()
向工具栏/操作栏添加菜单选项,并且工作得很好。
现在我只注意到这个问题是这样的:
当一个新的子片段并用菜单项子片段是隐藏的(并添加到顶级片段的堆栈中的交易),菜单项消失。同样,如果通过撤消事务再次显示片段,菜单项会回来。这是期望的行为,似乎完全由Fragment框架处理。
然而,如果子片段是可见的(因此,它的菜单项存在于工具栏中)并且我切换顶层片段,菜单项仍保留在工具栏中。
我会期望菜单项被清除,因为它所属的子片段不仅被转储,而且甚至它的父片段(在顶层片段上)也被完全替换(甚至不被添加到后台,直接替换掉)。
我想我只需在传入的顶级片段恢复时调用invalidateOptionsMenu()
就可以了,但是我觉得我只是缺少一些东西,像自动处理顶级片段。
谢谢,我已经有这都是服务从活动本身的堆栈中作为独立backstacks真的只是空的片段我的顶级片段类似的设置。这些片段与许多生命周期事件以及后退按钮等事件相关联。我可以通过这种方式轻松使用'invalidateOptionsMenu()',但我非常好奇,为什么当Fragment刚刚隐藏时,菜单似乎自动在Child Fragment Manager中管理,但不在Activity Frag中。经理当片段被完全替换时。我觉得我错过了一些东西。 – RobertoCuba