如何在特定选项卡,选项卡式活动,Kotlin中隐藏菜单项

问题描述 投票:0回答:1

假定要在不同选项卡的选项卡式活动的工具栏上显示不同的菜单图标。

一种解决方案是为每个片段/选项卡构建一个独特的菜单,并在相应的onCreateOptionsMenu()函数处进行充气。但是,该解决方案被证明是缓慢且滞后的。 Menuicons消失得不够快。

第二种解决方案是在“活动”中添加所有菜单图标,然后在必要时隐藏。此选项更快。

我尝试过pageChangeListenertabSelectedListener。但是以某种方式,菜单图标在第一次单击时并没有消失。在行中单击两个隐藏选项卡后,它们消失。如果使用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)
}
android kotlin show-hide menuitem android-tabbed-activity
1个回答
0
投票
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)
}
© www.soinside.com 2019 - 2024. All rights reserved.