我正在使用此代码将选项菜单作为弹出窗口打开:
@Override
public boolean onPrepareOptionsMenu(Menu menu){
openMenu();
return true;
}
private void openMenu(){
View popUpView = getLayoutInflater().inflate(R.layout.menu, null);
popUpMenu = new PopupWindow(popUpView, LayoutParams.FILL_PARENT
, LayoutParams.WRAP_CONTENT
, true);
popUpMenu.setBackgroundDrawable(new BitmapDrawable());
popUpMenu.setAnimationStyle(android.R.style.Animation_Dialog);
popUpMenu.showAtLocation(popUpView, Gravity.BOTTOM, 0, 0);
makePopUpMenuButtons(popUpView);
}
问题是,在 Android 4.1 上,菜单只打开一次。我读了一些关于 invalidateOptionsMenu() 的东西,但我不知道在哪里实现这个方法。eclipse还说“方法invalidateOptionsMenu()没有定义在......”。
有谁知道该怎么做才能在每次单击菜单按钮时打开选项菜单?
编辑:
我不使用 android 菜单对象,因为我想要自定义设计。这就是我在 onPrepareOptionsMenu 中创建弹出窗口的原因。所以我不使用onOptionsItemSelected。我的问题是 onPrepareOptionMenu 仅在第一次单击时被调用,之后才不规则。
在 Android 3.0 及更高版本上,当菜单项出现在操作栏中时,选项菜单被认为始终处于打开状态。当事件发生并且您想要执行菜单更新时,您必须调用 invalidateOptionsMenu() 来请求系统调用 onPrepareOptionsMenu()。
这一段说当我的 API 为 3.0 或更高版本时,我必须调用 invalidateOptionsMenu。但在我的项目中,API 低于 4.1 时一切正常。在显示我的弹出窗口后,我尝试调用 invalidateOptionsMenu,但 eclipse 给出了一个错误,因为该方法未定义......