带有 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
}
这似乎暂时有效。
我正在使用 导航架构组件 和嵌套片段(我的应用和共享工具栏中只有 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
}
这似乎暂时有效。