我使用ActionBarSherlock-4.1.0-0,我想ActionBar中打开我的子菜单与硬件菜单按钮。 我刨的更新和我的老版本,我用了“正常”的菜单。 我想帮助用户习惯了新的设计。 我得到了子菜单和主菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater i = getSupportMenuInflater();
i.inflate(R.menu.main_menu, menu);
SubMenu subMenu = (SubMenu) menu.findItem(R.id.actionbar_submenu);
Menu mainMenu = menu;
return super.onCreateOptionsMenu(menu);
}
我得到了一个听者硬件菜单按钮:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode) {
case KeyEvent.KEYCODE_MENU:
// TODO: expand submenu from actionbar
return true;
}
}
return super.onKeyDown(keyCode, event);
}
我无法找到一个方法或其他任何来电。 我希望你能帮助我,欢呼声,保罗
我试着从弗雷德里克这个解决方案与Android动作条,我碰上的子菜单打开,并立即关闭问题。 更改为解决的onkeyup这个问题。
这里是我的代码:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_MENU){
if (event.getAction() == KeyEvent.ACTION_DOWN && optionsMenu != null && optionsMenu.findItem(R.id.sub_menu) != null)
{
Log.i(TAG, "performIdentifierAction");
optionsMenu.performIdentifierAction(R.id.sub_menu, 0);
return true;
}
}
return super.onKeyUp(keyCode, event);
}
我检查optionsMenu != null && optionsMenu.findItem(R.id.sub_menu) != null
,因为与旧的Android版本没有动作条的兼容性问题。 如果你使用ActionBarSherlock所有版本这不是所必要的。
这是我如何解决这个问题
mainMenu.performIdentifierAction(id_of_menu_item, 0);
所以你的情况我会想象它会是这样
private Menu mainMenu; // local variable for menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater i = getSupportMenuInflater();
i.inflate(R.menu.main_menu, menu);
SubMenu subMenu = (SubMenu) menu.findItem(R.id.actionbar_submenu);
mainMenu = menu; // store the menu in an local variable
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode) {
case KeyEvent.KEYCODE_MENU:
SubMenu subMenu = (SubMenu) mainMenu.findItem(R.id.actionbar_submenu);
mainMenu.performIdentifierAction(subMenu.getItem().getItemId(), 0);
return true;
}
}
return super.onKeyDown(keyCode, event);
}
简而言之:
- 存储菜单中的局部变量
- 使用该变量来寻找子菜单
- 使用该变量调用
performIdentifierAction
方法
希望这会工作。
我总是得到与弗雷德里克Sundmyhr的解决方案NullPointerException异常,后来我改变了一些东西,它的工作。 这里是我的解决方案:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_UP){
switch(keyCode)
{
case KeyEvent.KEYCODE_MENU:
SubMenu subMenu = mainMenu.getItem(2).getSubMenu();
mainMenu.performIdentifierAction(subMenu.getItem().getItemId(), 0);
return true;
}
}
return super.onKeyUp(keyCode, event);
}
欢呼声中,保罗