嵌套Fragment不执行onCreateOptionsMenu和onPrepareOptionsMenu

593 阅读1分钟

修改menu中ImageView样式

无效的方法:

在FragmentB的onCreate中添加

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

在需要刷新的地方调用

requireActivity().invalidateOptionsMenu()

理论上接下来会执行

override fun onPrepareOptionsMenu(menu: Menu) {
        super.onPrepareOptionsMenu(menu)
    }

最终结果:onPrepareOptionsMenu()未执行

最终测试结果:在FragmentB中从开始到结束期间onCreateOptionsMenu()和onPrepareOptionsMenu()均未执行过。

目前在不破坏结构的情况下解决方法是:

private fun refreshMenu(isHas:Int) {
        toolbar.menu.clear()
        toolbar?.run {
            if (1 == isHas){
                inflateMenu(R.menu.menu1)
            }else{
                inflateMenu(R.menu.menu2)
            }

            setOnMenuItemClickListener {
                when (it.itemId) {
                   
                }
                true
            }
        }
    }

通过isHas不同,重新加载不同的menu文件,注意:在重新加载前必须调用toolbar.menu.clear(),不然会出现意想不到的界面。

有更好的方法,请留言!