Android 带有导航组件的嵌套片段中的选项菜单

Android 带有导航组件的嵌套片段中的选项菜单,android,android-fragments,android-architecture-navigation,Android,Android Fragments,Android Architecture Navigation,我正在使用和嵌套片段(在我的应用程序和共享工具栏中只有一个活动)。在片段A中,我会: override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) setHasOptionsMenu(true) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflate

我正在使用和嵌套片段(在我的应用程序和共享工具栏中只有一个活动)。在片段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)
它的导航部分工作得很好,但是当显示片段b时,片段A中创建的菜单会粘住(实际上,它从未被清除)。导航拱门组件不支持这一点吗?我该怎么攻击这个?我不想因为其中一个添加了一个菜单而手动清除所有其他片段中的菜单来执行黑客攻击


谢谢

由于似乎没有任何解决方案,我最终保留了对MenuItem的引用,并隐藏/显示:

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
}

这似乎暂时有效。

由于似乎没有任何解决方案,我最终保留了对MenuItem的引用,并隐藏/显示:

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
}

这似乎暂时有效。

添加菜单。清除();在OnCreateOptionsMenuth上膨胀之前是黑客吗?我不想通过手动清除所有其他片段中的菜单来执行黑客攻击,因为其中一个片段添加了一个菜单。是否适合执行该菜单。onDestroyOptionsMenu()上的clear()改为调用单个片段?onDestroyOptionsMenu()从未在片段中调用,我想这是问题的一部分。添加menu.clear();在OnCreateOptionsMenuth上膨胀之前是黑客吗?我不想通过手动清除所有其他片段中的菜单来执行黑客攻击,因为其中一个片段添加了一个菜单。是否适合执行该菜单。onDestroyOptionsMenu()上的clear()改为调用单个片段?onDestroyOptionsMenu()从未在片段中调用,我想这是问题的一部分。