Android 调用SupportInvalidateOptions菜单()后,菜单操作活动不起作用;
我正在处理库和抽屉菜单的兼容性 调用SupportInvalidateOptions菜单()函数后;弹出菜单无法显示,只留下堆芯流图标 有什么解决办法吗 在我的ActMain中执行此操作(非常片段的主要活动)Android 调用SupportInvalidateOptions菜单()后,菜单操作活动不起作用;,android,menu,android-support-library,android-actionbaractivity,Android,Menu,Android Support Library,Android Actionbaractivity,我正在处理库和抽屉菜单的兼容性 调用SupportInvalidateOptions菜单()函数后;弹出菜单无法显示,只留下堆芯流图标 有什么解决办法吗 在我的ActMain中执行此操作(非常片段的主要活动) @覆盖 公共布尔值OnPrepareOptions菜单(菜单){ //如果导航抽屉打开,则隐藏与内容视图相关的操作项 boolean-DrawerLayout=mDrawerLayout.isDrawerOpen(mDrawerList); hideMenuItems(菜单,!抽屉); 返
@覆盖
公共布尔值OnPrepareOptions菜单(菜单){
//如果导航抽屉打开,则隐藏与内容视图相关的操作项
boolean-DrawerLayout=mDrawerLayout.isDrawerOpen(mDrawerList);
hideMenuItems(菜单,!抽屉);
返回super.onPrepareOptions菜单(菜单);
}
私有void隐藏项(菜单菜单,布尔可见)
{
对于(int i=0;i
注意:只有一个带有子菜单的菜单项。在此子菜单中,所有
项目是可见的,但当我单击要在中显示的项目时
ActionBar与其他项目一样,它们只显示一个
时间这只发生在Android的2.3版本中。在上层作品中
嗯
supportInvalidateOptionsMenu
仅对android 2.3及更低版本的有效,这就是为什么它上面有一个前缀support
,如果您在android 2.3及更高版本的中尝试运行onPrepareOptionsMenu
时使用该onPrepareOptionsMenu
而不是调用它,则更有可能
解决方案:
您可以先检查设备是否为2.3及以下版本
或以上版本
,如果设备为以上版本,则使用invalidateOptions菜单()
更新/调用OnPrepareOptions菜单
我执行了以下操作:
在onOptionsItemSelected方法中,我检查SDK的版本,如果是,我会检查,问题是调用invalidate子菜单不再出现,你知道吗?这只是主菜单,如果我点击查看更多选项,这些选项不会出现。似乎是库中的一个bug,所以谷歌搜索。@CíceroMoura你确定DrawerLayout
是真的吗???@CíceroMoura确保在关闭和打开mDrawerLayout
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
hideMenuItems(menu, !drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
private void hideMenuItems(Menu menu, boolean visible)
{
for(int i = 0; i < menu.size(); i++) {
menu.getItem(i).setVisible(visible);
}
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
if(Build.VERSION.SDK_INT <= 10)
inflater.inflate(R.menu.gingerbread_core_flow, menu);
else
inflater.inflate(R.menu.finances, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if(Build.VERSION.SDK_INT <= 10)
{
android.support.v7.widget.PopupMenu popupMenu = new android.support.v7.widget.PopupMenu(getActivity(),txtMonth);
popupMenu.inflate(R.menu.finances_gingerbread_items);
popupMenu.getMenu().findItem(R.id.search).setVisible(false);
popupMenu.getMenu().findItem(R.id.ordernar_por).setVisible(false);
popupMenu.setOnMenuItemClickListener(new android.support.v7.widget.PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem)
{
onItemSelected(menuItem);
return false;
}
});
popupMenu.show();
}
else
return onItemSelected(item);
return super.onOptionsItemSelected(item);
}