Android的invalidateOptionsMenu()API <11
我用了ActivityCompat.invalidateOptionsMenu(MainActivity.this);
所以我的菜单项“刷新”可以自动启用/禁用,而不必使用必须触摸“菜单”选项(想象用户离开菜单打开…我需要“刷新”菜单项自动禁用和启用)。
ActivityCompat.invalidateOptionsMenu(MainActivity.this)
在Android 11+中工作正常。 但是,我可以使用android API <11? :S我已经search了很多,但我找不到答案。 任何人都可以帮助我吗?
在Android API 11+中,使用onPrepareOptionsMenu
和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; }
在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被按下时,菜单被绘制,所以不需要这种方法,因为它自动发生。