所遇场景:在FragmentA中嵌套FragmentB,FragmentB中嵌套FragmentC,FragmentC中需要动态修改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(),不然会出现意想不到的界面。
有更好的方法,请留言!