首页 > 解决方案 > 带有导航组件的嵌套片段中的 OptionsMenu

问题描述

我正在使用导航架构组件 和嵌套片段(我的应用程序和共享工具栏中只有 1 个活动)。在片段 AI 中:

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 中创建的菜单仍然存在(实际上,它从未被清除)。nav arch 组件不支持这个吗?我该怎么攻击这个?我不想通过手动清除所有其他片段中的菜单来执行黑客攻击,因为其中一个片段添加了菜单。

谢谢!

标签: androidandroid-fragmentsandroid-architecture-navigation

解决方案


由于似乎没有任何解决方案,我最终保留了对 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
}

这似乎暂时有效。


推荐阅读