我设置了三个“顶级”片段,每个片段使用自己的Child Fragment Manager提供钻取式导航。这些顶级片段通过使用主Activity的Support Fragment Manager进行替换而切换。
其中一个顶级片段有一个子片段,在使用setHasOptionsMenu()
和onCreateOptionsMenu()
添加菜单选项到工具栏/操作栏时运行良好。
现在我刚刚注意到的问题是:
当添加新的子片段并隐藏具有菜单项的子片段(并将事务添加到顶级片段的返回堆栈中)时,菜单项会消失。类似地,当撤销事务使该片段再次可见时,该菜单项会重新出现。这是期望的行为,似乎完全由Fragment框架处理。
然而,如果子片段可见(因此其菜单项出现在工具栏中),我切换至其他顶级片段时,菜单项仍然留在工具栏中。
我原本希望该菜单项被清除,因为不仅属于它的子片段已被删除,甚至其父片段(即顶级片段之一)也已被完全替换(甚至没有添加到返回堆栈中,直接被替换了)。
我想我可以在传入的顶级片段已恢复时,在Activity中调用invalidateOptionsMenu()
,但我觉得自动处理它的方法肯定是有的,只是我可能忽略了什么。
clear()
而不是 OP 建议的invalidateOptionsMenu()
的原因是什么? - lucidbrotActivity.invalidateOptionsMenu
。 - lucidbrot