76

我使用ActivityCompat.invalidateOptionsMenu(MainActivity.this);这样我的菜单项“刷新”可以自动启用/禁用,而无需使用必须触摸“菜单”选项(想象用户让菜单保持打开状态......我需要“刷新”菜单项自动禁用和启用自身)。

ActivityCompat.invalidateOptionsMenu(MainActivity.this)Android 11+ 中运行良好。但是我可以为 android API < 11 使用什么?:S 我已经搜索了很多,但我找不到答案。谁能帮我解决这个问题?

这在 Android API 11+ 中运行良好,使用onPrepareOptionsMenuand ActivityCompat.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;
}
4

3 回答 3

231

关于API < 11使用supportInvalidateOptionsMenu()方法

于 2013-08-31T10:27:37.580 回答
5

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

于 2014-01-19T09:54:31.763 回答
0

This will return true if the API is above or equal to 11 and therefore supported. Before API 11, the menu is drawn when the menu button is pressed so there is no need for this method as it occurs automatically.

于 2012-12-23T04:15:01.307 回答