android - 带有导航组件的嵌套片段中的 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 组件不支持这个吗?我该怎么攻击这个?我不想通过手动清除所有其他片段中的菜单来执行黑客攻击,因为其中一个片段添加了菜单。
谢谢!
解决方案
由于似乎没有任何解决方案,我最终保留了对 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
}
这似乎暂时有效。
推荐阅读
- matrix - 求解病态线性系统的迭代方法
- javascript - 如何使用 JavaScript 在 HTML 页面中查找文本?
- visual-c++ - “.h”头文件如何能够“看到”它们对应的“.cpp”文件的内容?
- node.js - 创建身份验证功能 node.js
- flutter - Flutter:无法让 StreamProvider 故意产生空值
- python - 通过列数据框制作字典,而不是删除相等的键
- python - 过滤数据框中的分钟数据
- python - 有没有办法防止使用openpyxl选择和复制excel表格单元格?
- java - 我正在尝试获取包中所有类的列表,但是 searchResult.getClasses(); 需要论证
- html - 如何去除div css中的黑色背景