【发布时间】:2020-03-08 06:23:08
【问题描述】:
假设不同的菜单图标将显示在不同选项卡的选项卡式活动的工具栏上。
一种解决方案是为每个片段/选项卡构建一个不同的菜单,并在相应的onCreateOptionsMenu() 函数处进行扩展。然而,这个解决方案被证明是缓慢和滞后的。菜单图标消失得不够快。
第二种解决方案是膨胀“活动”中的所有菜单图标,然后在必要时隐藏。此选项更快。
我试过pageChangeListener 和tabSelectedListener。但不知何故,菜单图标在第一次点击时并没有消失。在行中单击两个隐藏选项卡后,它们会消失。如果使用invalidateOptionsMenu(),则菜单图标根本不会隐藏。
您知道为什么会发生这种情况吗? 或者您有其他快速隐藏图标的方法吗?
相关代码如下:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
Log.v("MainAct", "MainAct onCreateOptionsMenu")
menuInflater.inflate(R.menu.mainmenu, menu)
viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
when (position) {
0 -> {
menu!!.findItem(R.id.menuicon_contacts).isVisible = false
menu.findItem(R.id.menuicon_add).isVisible = false
invalidateOptionsMenu() // With this line menuicons does not disappear at all
}
1 -> {
menu!!.findItem(R.id.menuicon_contacts).isVisible = false
menu.findItem(R.id.menuicon_add).isVisible = false
invalidateOptionsMenu()
}
2 -> {
menu!!.findItem(R.id.menuicon_contacts).isVisible = true
menu.findItem(R.id.menuicon_add).isVisible = true
invalidateOptionsMenu()
}
}
}
})
return super.onCreateOptionsMenu(menu)
}
【问题讨论】:
-
您可以创建不同的菜单。然后在所选页面上重新创建主菜单。
-
当我在片段的
onCreateOptionsMenu()中这样做时,隐藏起来很慢。您是否建议将侦听器设置在“活动”的onCreateOptionsMenu()内并相应地调用 3 种不同的菜单布局之一? -
监听器应该在 onCreateOptionsMenu() 之外。创建 3 个不同的菜单并定义菜单类型。选择类型 onPageSelected 并调用 invalidateOptionsMenu()。
-
如何到达
menu外的menu参数? -
您可以使用 onOptionsItemSelected(MenuItem item) 方法。创建 3 个不同的菜单时,您无需检查可见性
标签: android kotlin show-hide menuitem android-tabbed-activity