Android的invalidateOptionsMenu()API <11是怎样的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我使用的方式是ActivityCompat.invalidateOptionsMenu(MainActivity.this);让我的菜单项“刷新”可以自动启用/禁用,而不必使用必须触摸“菜单”选项(想象用户离开菜单打开...我需要“刷新”菜单项自动禁用和启用它自己)。

ActivityCompat.invalidateOptionsMenu(MainActivity.this)Android中11+精品工程。但是,我可以使用android API <11?:S我搜索了很多,但我找不到答案。任何人都可以帮助我吗?

这在Android API 11+中运行良好,使用onPrepareOptionsMenuActivityCompat.invalidateOptionsMenu(MainActivity.this)。该问题试图在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;
}
提问于
用户回答回答于

你可以在API < 11上使用supportInvalidateOptionsMenu()方法。

用户回答回答于

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

这适用于我:

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

扫码关注云+社区