带有 Nav 组件的嵌套片段中的 OptionsMenu

OptionsMenu in nested fragments with Nav component

我正在使用 导航架构组件 和嵌套片段(我的应用和共享工具栏中只有 1 activity)。在片段 A 中,我这样做:

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    setHasOptionsMenu(true)
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.scan_menu, menu)
}

然后我用这样的东西展示一个新片段 B:

findNavController().navigate(R.id.action_a_b)

它的导航部分工作正常,但是在片段 A 中创建的菜单在显示片段 b 时仍然存在(实际上,它永远不会被清除)。 nav arch 组件不支持这个吗?我该如何攻击它?我不想通过手动清除所有其他片段中的菜单来执行黑客攻击,因为其中一个片段添加了菜单。

谢谢!

由于似乎没有任何解决方案,我最终保留了对 MenuItem 的引用,并且 hide/show:

private var menuItem: MenuItem? = null

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.scan_menu, menu)
    menuItem = menu.findItem(R.id.scan_menu_manual)
}

override fun onResume() {
    super.onResume()
    menuItem?.isVisible = true
}

override fun onPause() {
    super.onPause()
    menuItem?.isVisible = false
}

这似乎暂时有效。