巢狀Fragment不執行onCreateOptionsMenu和onPrepareOptionsMenu
阿新 • • 發佈:2021-06-28
修改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(),不然會出現意想不到的介面。
有更好的方法,請留言!