首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >< 11接口的Android invalidateOptionsMenu

< 11接口的Android invalidateOptionsMenu
EN

Stack Overflow用户
提问于 2012-12-23 11:51:34
回答 3查看 20.5K关注 0票数 76

我使用了ActivityCompat.invalidateOptionsMenu(MainActivity.this);,这样我的菜单项“刷新”就可以自动启用/禁用,而不必使用触摸“菜单”选项(假设用户让菜单打开……我需要“刷新”菜单项自动禁用和启用)。

在Android 11+上,ActivityCompat.invalidateOptionsMenu(MainActivity.this)运行得很好。但是我能为android API < 11使用什么呢?:我已经搜索了这么多,但我找不到答案。有人能在这方面帮我一下吗?

这在使用onPrepareOptionsMenuActivityCompat.invalidateOptionsMenu(MainActivity.this)的Android API 11+中工作得很好。这个问题是试图在Android API < 11中完成的。

下面是我的onPrepareOptionsMenu方法:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(menuRefreshEnable){
        menu.getItem(0).setEnabled(true);
    }
    if(!menuRefreshEnable){
        menu.getItem(0).setEnabled(false);
    }       
    return true;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-31 18:27:38

API < 11中使用supportInvalidateOptionsMenu()方法

票数 231
EN

Stack Overflow用户

发布于 2014-01-19 17:54:32

ActivityCompat.invalidateOptionsMenu()不会回调onPrepareOptionsMenu();,它只是直接更新菜单。只需要放一些Log.d(),然后自己检查就可以了。

这对我来说很有效(我使用的是API 8):

private Menu mMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.track_fragment, menu);
    mMenu = menu;
    }
...
private void someMethod() {
...
    if (mMenu != null) {
       MenuItem item = mMenu.findItem(R.id.new_track);
       if (item != null) {
            item.setVisible(false);
            ActivityCompat.invalidateOptionsMenu(this.getActivity());
        }
    }
...
}

我的someMethod()被从多个地方调用,甚至在onCreateOptionsMenu()之前,所以我必须检查mMenu != null

票数 5
EN

Stack Overflow用户

发布于 2012-12-23 12:15:01

如果API大于或等于11,则返回true,因此受支持。在API 11之前,菜单是在按下菜单按钮时绘制的,因此不需要此方法,因为它是自动发生的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14008470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档