2013-08-17 154 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()