适用于 API < 11 的 Android invalidateOptionsMenu()
Posted
技术标签:
【中文标题】适用于 API < 11 的 Android invalidateOptionsMenu()【英文标题】:Android invalidateOptionsMenu() for API < 11 【发布时间】:2012-12-10 02:46:45 【问题描述】:我使用了ActivityCompat.invalidateOptionsMenu(MainActivity.this);
,这样我的菜单项“刷新”就可以自动启用/禁用,而无需触摸“菜单”选项(想象用户让菜单保持打开状态......我需要“刷新”菜单项自动禁用和启用自身)。
ActivityCompat.invalidateOptionsMenu(MainActivity.this)
在 android 11+ 中运行良好。但是我可以为 android API
这在 Android API 11+ 中运行良好,使用 onPrepareOptionsMenu
和 ActivityCompat.invalidateOptionsMenu(MainActivity.this)
。
问题是试图在 Android API
这是我的onPrepareOptionsMenu
方法:
@Override
public boolean onPrepareOptionsMenu(Menu menu)
if(menuRefreshEnable)
menu.getItem(0).setEnabled(true);
if(!menuRefreshEnable)
menu.getItem(0).setEnabled(false);
return true;
【问题讨论】:
我建议您将方法更改为类似 @Override public boolean onPrepareOptionsMenu(Menu menu) menu.getItem(0).setEnabled(menuRefreshEnable);返回真; How to make a conditional invalidateOptionsMenu() call depending on the API level in Android?的可能重复 【参考方案1】:如果 API 高于或等于 11 并因此受支持,这将返回 true。在 API 11 之前,菜单是在按下菜单按钮时绘制的,因此不需要此方法,因为它会自动发生。
【讨论】:
我需要在没有用户与菜单按钮交互的情况下更新菜单项。想象一下,当我的异步任务正在运行时,用户让菜单保持打开状态......使用该方法,菜单项会在 api 11+ 中自动更新。如果我删除它,它就不起作用。但我仍然需要在 android api 中自动更新菜单项 当我的异步任务完成时,我执行 ActivityCompat.invalidateOptionsMenu(MainActivity.this);为了更新菜单itens。但它只适用于 api 11+。如何在没有用户与菜单按钮交互的情况下强制在 api 几乎可以通过编程方式在设备上按两次菜单按钮 【参考方案2】:在API < 11
上使用supportInvalidateOptionsMenu()
方法
【讨论】:
【参考方案3】: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
。
【讨论】:
以上是关于适用于 API < 11 的 Android invalidateOptionsMenu()的主要内容,如果未能解决你的问题,请参考以下文章
适用于 Android 的 Google Places API 未显示
android.hardware.Camera 是不是仍然适用于所有 API 级别?
适用于 Android 的 Google API 缺少 Games.getGamesAuthToken