Android的invalidateOptionsMenu()API <11

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

ActivityCompat.invalidateOptionsMenu(MainActivity.this)在Android 11+中工作正常。 但是,我可以使用android API <11? :S我已经search了很多,但我找不到答案。 任何人都可以帮助我吗?

在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()不callbackonPrepareOptionsMenu(); 它只是直接更新菜单。 只需要放一些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

如果API高于或等于11,则返回true,因此受支持。 在API 11之前,当菜单button被按下时,菜单被绘制,所以不需要这种方法,因为它自动发生。