我正在使用该库并与Drawer菜单兼容。
调用supportInvalidateOptionsMenu()函数后;弹出菜单无法显示,只留下核心流图标。
对此有何解决方案?
在我的ActMain(非常片段的主要活动)中执行此操作
@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);
}
}
注意:只有一个带子菜单的菜单项。在这个子菜单中,全部 项目是可见的,但是当我点击要出现的项目时 ActionBar的其他项目,它们根本不会出现多个项目 时间。这仅发生在Android 2.3版本中。在上层作品中 好。
答案 0 :(得分:1)
supportInvalidateOptionsMenu
仅对android 2.3 and lower
有效,这就是它上面有前缀support
的原因,如果您使用onPrepareOptionsMenu
,则更有可能当您尝试在android 2.3 and above
中运行时调用。
<强>溶液强>
您可以先检查设备是2.3 and lower
还是above
,如果 ,则使用invalidateOptionsMenu()
更新/调用onPrepareOptionsMenu
}
答案 1 :(得分:0)
我做了以下事情:
在onOptionsItemSelected方法中,我检查SDK的版本,如果&lt; 11然后使用v7创建支持PopUpMenu,如果不是,请正常点击选项。
最后,看起来像这样:
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);
}
在onItemSelected中我验证了它点击了哪个选项。
这解决了我的问题。
txtMonth视图位于顶部,因此对用户而言没有任何区别。
我知道这不是最好的解决方案,但我需要快速解决。