1. 程式人生 > 其它 >巢狀Fragment不執行onCreateOptionsMenu和onPrepareOptionsMenu

巢狀Fragment不執行onCreateOptionsMenu和onPrepareOptionsMenu

修改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(),不然會出現意想不到的介面。

有更好的方法,請留言!