如何在特定选项卡隐藏菜单项,选项卡 activity,Kotlin
How to hide menu item at specific tab, tabbed activity, Kotlin
假设不同的菜单图标要显示在不同选项卡 activity 的工具栏上。
一个解决方案是为每个 fragment/tab 构建一个不同的菜单,并在相应的 onCreateOptionsMenu()
功能处膨胀。然而,这个解决方案被证明是缓慢和滞后的。 Menuicons 消失得不够快。
第二种解决方案是膨胀 "activity" 中的所有菜单图标,然后在必要时隐藏。这个选项更快。
我尝试了 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)
}
var menu1 : Boolean = true
onCreate 方法:
viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
when (position) {
0 -> {
menu1 = true
invalidateOptionsMenu()
}
1 -> {
menu1 = true
invalidateOptionsMenu()
}
2 -> {
menu1 = false
invalidateOptionsMenu()
}
}
}
})
覆盖方法:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
if(menu1){
menuInflater.inflate(R.menu.mainmenu1, menu)
}else{
menuInflater.inflate(R.menu.mainmenu2, menu)
}
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menuicon_contacts -> {
// your code
return true
}
R.id.menuicon_add -> {
// your code
return true
}
}
return super.onOptionsItemSelected(item)
}
假设不同的菜单图标要显示在不同选项卡 activity 的工具栏上。
一个解决方案是为每个 fragment/tab 构建一个不同的菜单,并在相应的 onCreateOptionsMenu()
功能处膨胀。然而,这个解决方案被证明是缓慢和滞后的。 Menuicons 消失得不够快。
第二种解决方案是膨胀 "activity" 中的所有菜单图标,然后在必要时隐藏。这个选项更快。
我尝试了 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)
}
var menu1 : Boolean = true
onCreate 方法:
viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
when (position) {
0 -> {
menu1 = true
invalidateOptionsMenu()
}
1 -> {
menu1 = true
invalidateOptionsMenu()
}
2 -> {
menu1 = false
invalidateOptionsMenu()
}
}
}
})
覆盖方法:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
if(menu1){
menuInflater.inflate(R.menu.mainmenu1, menu)
}else{
menuInflater.inflate(R.menu.mainmenu2, menu)
}
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menuicon_contacts -> {
// your code
return true
}
R.id.menuicon_add -> {
// your code
return true
}
}
return super.onOptionsItemSelected(item)
}