2013-08-17 64 views
0

我有位于操作栏中的操作栏和菜单。当我触摸硬菜单按钮时,Android getActionBar()返回null。

当我触摸硬菜单按钮getActionBar()时返回null。

三在底部又是什么意思硬菜单按钮:

hard menu button

我可以防止应用为崩溃:if(getActionBar() != null) { // ... }

但是这不是我想做的事情。我需要修改操作栏项目(添加/删除)。所以我无法做到getActionBar()返回null。

任何人都知道为什么getActionBar()返回null?

UPDATE:

这里是我的代码:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
     if (getActionBar() != null) { // Action bar is null here when I click hard menu button. 
       getActionBar().setDisplayHomeAsUpEnabled(true); 
     } 

     // Some logical operations here. 

    // Get the menu. 
    BaseActivity.menuOnActionBar = menu; 
    return super.onCreateOptionsMenu(menu); 
} 

在我的活动,刷新完成我删除动作视图(动作视图设置为XML后立即刷新,以显示点击后进度条):在BaseActivity

menuOnActionBar.findItem(R.id.menu_refresh).setActionView(null); // This throws an error. 

而且menuOnActionBar变量定义:

public static Menu menuOnActionBar; 

时抛出的错误是:E/AndroidRuntime(4193): java.lang.NullPointerException

+0

“第三个底部是我的意思是硬菜单按钮” - 基于图标,即RECENTS按钮,而不是MENU按钮。 – CommonsWare

+0

@CommonsWare是真的,但我认为HTC允许改变它的行为像菜单按钮(因为用户对旧应用程序的投诉,屏幕上有一个巨大的菜单按钮)。 –

+1

@JustWork可以请你展示一些代码吗?它不清楚你想要什么... –

回答

0

我所需要的操作栏项目修饰(添加/删除)。

首先,你并不需要一个ActionBar实例,如您不能通过ActionBar影响作用物品栏反正。如果您要添加或删除操作栏项目,call invalidateOptionsMenu() on your Activity,这将强制Android再次拨打onCreateOptionsMenu()

更重要的是,您不应该因为MENU按钮而这样做,因为那时已经太晚了。如果应用程序状态发生变化,需要更改操作栏项目的组合,请拨打invalidateOptionsMenu()

如果您需要更改有关操作栏的其他内容(例如,选项卡),那么getActionBar()会变得更相关。两个场景中,我知道getActionBar()将返回null是:

  • 你不必

  • 你是在扩展的ActionBarSherlock类别(例如,SherlockActivity)的动作栏,在这种情况下,你需要请致电getSupportActionBar()