Android - 在不调用invalidateOptionsMenu()的情况下刷新选项菜单

18

你好,安卓开发者们:

我看到了很多关于选项菜单更新的问题。然而,每个答案都说我必须调用 invalidateOptionsMenu() 方法。

我的问题是:有没有其他方法可以更新选项菜单而不必调用 invalidateOptionsMenu() 方法?


7
不使用 invalidateOptionsMenu() 有什么理由吗?这正是它存在的原因... - Kevin Coppock
我创建了一个继承自Activity的ClassA类。创建了一个继承自ClassA的ClassB类。ClassC(调用我的XML活动)继承自ClassC。 - Michael 'Maik' Ardan
实际上,我已经创建了OptionsMenu,我只需要动态更新OptionsMenu。 - Michael 'Maik' Ardan
1
жҲ‘д»Қ然дёҚжҳҺзҷҪдёәд»Җд№Ҳиҝҷдјҡйҳ»жӯўжӮЁдҪҝз”ЁinvalidateOptionsMenu()гҖӮ@Eng.FouadжңүдёҖдёӘзӯ”жЎҲпјҢдҪҶжҲ‘иҝҳжҳҜзңӢдёҚеҲ°й—®йўҳжүҖеңЁгҖӮ - Kevin Coppock
确认。在我的代码中,菜单内容取决于某些模型状态,并且其中一些是通过服务工作结果以延迟方式触发的。 "onResults" 的逻辑可能很快变得难以理解,并且需要大量的同步努力。 onPrepareOptionsMenu 解决方案有助于在单个位置跟踪所有这些内容,而不会产生任何复杂性或流动性影响,只要您的菜单更改仅限于隐藏/显示/添加/删除即可。简单易行。 - halxinate
显示剩余3条评论
1个回答

22
@Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        menu.clear(); // Clear the menu first

            /* Add the menu items */

        return super.onPrepareOptionsMenu(menu);
    }

这解决了更新OptionsMenu且不调用invalidateOptionsMenu()的问题。


invalidateOptionsMenu调用操作栏中Spinner的onItemSelected方法,我得尝试一下! - LOG_TAG
这个可以!我不能使用invalidateOptionsMenu,因为在调用它之后,长按菜单项图标后应该出现的toast不再起作用。 - Bruce
我看不出来我怎么能使用你的解决方案。也许你可以帮我解决一个类似的问题。https://stackoverflow.com/questions/54756799/android-studio-invalidateoptionsmenu-causes-the-always-visible-items-to-stop - Aliton Oliveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接