Android invalidateOptionsMenu()在API < 11中的使用方法

76

我使用了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;
}

1
我建议您将方法更改为以下内容: @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.getItem(0).setEnabled(menuRefreshEnable); return true; } - Alexander Zhak
3个回答

231

API < 11 版本中,请使用 supportInvalidateOptionsMenu() 方法。


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


0

如果API版本高于或等于11,则此方法将返回true,因此得到支持。在API 11之前,当按下菜单按钮时会绘制菜单,因此不需要此方法,因为它会自动发生。


1
我需要在没有用户与菜单按钮交互的情况下更新菜单项。假设用户在我的异步任务运行时保持菜单打开状态...使用该方法,菜单项会在API 11+中自动更新。如果我将其删除,则无法正常工作。但是我仍然需要在Android API < 11中自动更新菜单项。 - SnitramSD
2
当我的异步任务完成后,我执行以下代码:ActivityCompat.invalidateOptionsMenu(MainActivity.this); 以更新菜单项。但这只在API 11+上有效。 我如何在API < 11中强制更新菜单项,而不需要用户与菜单按钮交互(类似于在API < 11中使用ActivityCompat.invalidateOptionsMenu(MainActivity.this);)? - SnitramSD
在设备<11上,通过编程方式按两次菜单按钮。 - AndroidPenguin

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