针对API <11的Android invalidateOptionsMenu()

Sni*_*mSD 76 android menu

我使用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;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*hak 232

关于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());
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

someMethod()甚至在几个地方接到电话onCreateOptionsMenu(),所以我必须检查mMenu != null.