2012-11-07 193 views
33

我在使用Android的選項菜單時遇到了一些麻煩。我之前構建應用程序,並且它們都運行良好,但現在菜單不會彈出。onCreateOptionsMenu永遠不會被調用

代碼:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    getMenuInflater().inflate(R.menu.activity_video, menu); 
    return true; 
} 

整個方法從來沒有所謂的(通過設置斷點檢查)。該活動非常簡單,它只有一個VideoView,其中一個OnTouchListener集合。

我在Samsung Galaxy 10.1,API level 15,minSDK 15上使用Android 4.0.4。我錯過了什麼嗎?

+0

你使用什麼主題?如果你使用全屏幕,你不會得到一個菜單... – Warpzit

+1

NoTitleBar:'android:theme =「@ android:style/Theme.Black.NoTitleBar」',我用它在其他應用程序上取得了成功。 –

+0

幽默我,並嘗試將其設置爲像holo等 – Warpzit

回答

19

如果測試的手機有一個菜單按鈕onCreateOptionsMenu wont't在開始時調用的主題爲:

android:theme="@android:style/Theme.Black.NoTitleBar"

但是,當你點擊菜單按鈕onCreateOptionsMenu將被調用。我不知道在手機上發生的事情沒有硬件按鈕...

+3

沒有硬件按鈕,菜單只是根本沒有渲染 –

+0

@BartFriederichs哎喲,但很高興知道。我希望有東西=/ – Warpzit

-1

試一試它的工作對我來說:---

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

    switch (item.getItemId()) { 
    case R.id.menu_delete: 
     Toast.makeText(this, "You pressed the Delete!", 
       Toast.LENGTH_LONG).show(); 
     break; 


     case R.id.menu_setting: 
    Intent intent=new Intent(HomePage.this,Setting.class); 
    startActivity(intent); 
    finish(); 
    Toast.makeText(this, "You pressed the Setting!", 
    Toast.LENGTH_LONG).show(); break; 


    } 

    return super.onOptionsItemSelected(item); 
} 
+3

該OP是說onCreateOptionsMenu永遠不會被調用。改變方法的內容將無濟於事。 –

1

也許你也推翻的onkeydown方法,並使其始終返回真正。返回true意味着keyEvent將被阻止進一步傳播。請參閱下面的代碼:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
     /* 
      handling event 
     */ 
     return true; //onCreateOptionsMenu won't be invoked. 
} 
34

請致電setHasOptionsMenu先從onCreate開始功能。 onCreateOptionsMenu將被自動調用。

+8

這隻適用於碎片。有關選項菜單和片段的很多其他提示和技巧,請參閱此處:http://stackoverflow.com/questions/6279571/fragment-not-receiving-menu-callbacks – RenniePet

+0

這對我使用片段時無效。 - 27.12.2017 – JohannaNoobie

5

我遇到了同樣的問題(菜單沒有顯示,onCreateOptionsMenu未被調用)。

如果您在片段內調用此選項,則需要覆蓋public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)而不是public boolean onCreateOptionsMenu(Menu menu)Fragments不使用後者,所以他們永遠不會稱它。

Activity menu

Fragment menu

45

在Android的最新版本的使用工具欄compat的圖書館時,是很常見的,出現這種情況,爲了讓菜單項的工具欄中顯示你必須做以下內容:

mToolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(mToolbar); 
getSupportActionBar().setDisplayShowTitleEnabled(false); 
+6

謝謝。 setSupportActionBar(mToolbar);訣竅! – Jayasagar

+0

謝謝,這對我有用:) – teiiluj

13

在該方法中:Fragment#onCreateView(...)你應該把:

setHasOptionsMenu(true); 

然後您的方法將被調用。

+0

這不是我的活動中的一種方法。 –

+0

此方法在片段Michael Fulton的onCreateView中調用。它工作得很好... –

+0

我以前把它放在像這裏建議的一樣,但是它的魔術就是將它移動到onCreateView –

2

我有同樣的問題。我的問題是通過繼承不同的活動類來解決的。

所以,我一直在做:

公共類WelcomeActivity擴展活動

,但它改爲:

公共類WelcomeActivity擴展AppCompatActivity

這樣,我是說,說一個動作酒吧可以添加到您的活動。

相關問題