android - 仅在某些片段中显示菜单操作 - NavigationComponents
问题描述
我有一个导航主机活动,它膨胀了 2 个片段,一个是主主机片段和事件片段,我需要在事件片段中显示一个菜单操作,但是这个菜单操作也显示在我不想显示的主片段中
如何仅在事件片段中显示此菜单?
主要活动
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navController = Navigation.findNavController(this, R.id.nav_host_fragment)
setupActionBar(navController)
}
private fun setupActionBar(navController: NavController) {
NavigationUI.setupActionBarWithNavController(this, navController)
}
override fun onSupportNavigateUp(): Boolean {
return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp()
|| super.onSupportNavigateUp()
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
MenuInflater(this).inflate(R.menu.menu, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
NavigationUI.onNavDestinationSelected(item!!, Navigation.findNavController(this, R.id.nav_host_fragment))
return super.onOptionsItemSelected(item)
}
菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/eventsFragment"
app:showAsAction="ifRoom|always"
android:title="¿ Where to buy ?" />
</menu>
我只需要在 eventsFragment 中显示此菜单
事件片段
class EventsFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_event, container, false)
}
但是不仅在 EventFragment 中显示它,它还在 MainActivity 作为主机膨胀的第一个片段中显示它
我怎样才能在我的 EventsFragment 中有这个菜单?
解决方案
在 MainActivity menuItem setVisible(false) 中:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
MenuInflater(this).inflate(R.menu.menu, menu)
val menuItem : MenuItem = menu.findItem(R.id.eventsFragment);
if (menuItem!= null)
menuItem.setVisible(false);
return super.onCreateOptionsMenu(menu)
}
在 EventsFragment 中将 menuitem 的可见性设置为 true 如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onPrepareOptionsMenu(menu: Menu) {
val menuItem = menu.findItem(R.id.eventsFragment)
if (menuItem != null)
menuItem.isVisible = true
}
推荐阅读
- xslt - XSLT 过滤节点多个条件
- python - PyNaCl 是必需的,但它已经安装了,如何解决?
- ruby-on-rails - 设计验证后重定向
- python-3.x - python Pandas过滤列名中具有特定子字符串的列
- c# - Windows 窗体计时器不等待方法返回
- perl - Perl Text::Unidecode 没有产生正确的输出
- python - Python Launcher 没有响应 Pygame
- python - 使用 BackgroundSubtractorMOG2 时制作前景的完整遮罩
- regex - 如何在VScode中使用正则表达式的字符串之前插入$?
- python-3.x - 在 ScrollView 中居中布局。Kivy/KivyMD