3

我想添加ActionBar按鈕到FragmentActivity,我無法弄清楚我做錯了什麼。 當運行應用程序的所有我看到的是在動作條,而不是我的按鈕的默認菜單按鈕..FragmentActivity Action Bar選項菜單

的FragmentActivity:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.animalsmenu,menu); 
    return true; 
} 

的xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/dogs" 
    android:title="Dogs" 
    android:orderInCategory="1" 
    app:showAsAction="always"> 
</item> 

+0

看看我的答案在這裏:http://stackoverflow.com/questions/25700575/acessing-the-options-menu-from-a-fragment-android/25700901#25700901 – XDnl 2014-09-06 20:20:56

+0

@XDnl:這個問題(根據到OP)顯示來自'FragmentActivity',而不是'Fragment'的代碼。 – Squonk 2014-09-06 20:26:51

回答

5

FragmentActivity類擴展(派生自)Activity類。 ActivityonCreateOptionsMenu(Menu menu)方法的文檔聲明如下...

缺省實現使用標準系統菜單項填充菜單。它們被放置在CATEGORY_SYSTEM組中,這樣它們將被正確地按照應用程序定義的菜單項排序。 派生類應始終調用基本實現。

換句話說,改變你的代碼...

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.animalsmenu, menu); 
    super.onCreateOptionsMenu(menu); 
    return true; 
} 

這會誇大你的菜單項爲Menu傳遞給您的重寫的方法,然後將它傳遞給父(super )版本的方法。

+0

謝謝你的回答,但它仍然不能正常工作。 – james 2014-09-06 20:24:36

+0

@james:你是直接擴展'FragmentActivity'還是你有一個你自己的擴展'FragmentActivity'的基類,然後你擴展它呢? – Squonk 2014-09-06 20:42:41

+0

我直接擴展FragmentActivity – james 2014-09-06 20:45:30

2

來自Fragment Documents

public void setHasOptionsMenu(boolean hasMenu)通過接收對onCreateOptionsMenu(Menu,MenuInflater)和相關方法的調用,報告此片段想要參與填充選項菜單。

因此,您應該在您的onCreate()中撥打setHasOptionsMenu(true)

或者向後兼容性最好是在onCreate()甚至在任何onCreate()onActivityCreated()使用此以後onActivityCreated()。嘗試結束儘可能晚地撥打這通電話。

希望這會有所幫助。

+3

我不能在我的onCreate()裏面使用setHasOptionsMenu(true)爲什麼?也許是因爲它是一個FragmentActivity而不是一個正常的片段? – james 2014-09-06 20:26:02

13

使您的MainActivity擴展爲ActionBarActivity而不是FragmentActivity

ActionBarActivity本身延伸FragmentActivity所以你應該沒問題。