0

我在操作栏中有操作栏和菜单。

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

底部的第三个是我所说的硬菜单按钮:

硬菜单按钮

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

但这不是我想做的。我需要修改操作栏项目(添加/删除)。所以我不能在getActionBar()返回null时做。

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

更新:

这是我的代码:

@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 以显示进度条):

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

menuOnActionBar变量定义BaseActivity

public static Menu menuOnActionBar;

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

4

1 回答 1

0

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

首先,您不需要ActionBar实例,因为ActionBar无论如何您都无法影响操作栏项目。如果您要添加或删除操作栏项目,请调用invalidateOptionsMenu()您的Activity,这将强制 AndroidonCreateOptionsMenu()再次调用。

更重要的是,您不应该因为按下 MENU 就这样做,因为那时为时已晚。相反,invalidateOptionsMenu()当您的应用程序的状态发生变化而需要更改操作栏项目的组合时调用。

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

  • 您没有操作栏

  • 您正在扩展一个 ActionBarSherlock 类(例如,SherlockActivity),在这种情况下,您需要调用getSupportActionBar()

于 2013-08-17T14:35:45.700 回答