2012-11-07 16 views
33

aufgerufen Ich habe Probleme, ein Optionsmenü in Android arbeiten. Ich habe vorher Apps erstellt, und alle haben gut funktioniert, aber jetzt taucht das Menü einfach nicht auf.onCreateOptionsMenu wird nie

Der Code:

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

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

das ganze Verfahren wird nicht einmal genannt (durch Setzen eines Breakpoint überprüft). Die Aktivität ist super-einfach, es hat nur eine VideoView drin, mit einem OnTouchListener Set.

Ich benutze Android 4.0.4 auf einem Samsung Galaxy 10.1, API-Ebene 15, MinSDK 15. Fehle ich etwas?

+0

Welches Thema verwenden Sie? Du bekommst kein Menü, wenn du Fullscreen verwendest ... – Warpzit

+1

NoTitleBar: 'android: theme =" @ android: style/Theme.Black.NoTitleBar "', ich habe es erfolgreich mit anderen Apps benutzt. –

+0

Humor mich und versuchen, es zu etwas wie Holo etc. setzen – Warpzit

Antwort

19

Wenn das Telefon ein Menü-Taste testen auf hat onCreateOptionsMenu beim Start mit dem Thema aufgerufen werden wont't:

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

Wenn Sie jedoch auf die Menüschaltfläche klicken, wird onCreateOptionsMenu aufgerufen. Ich weiß nicht, was ohne Hardware-Tasten auf Handys geschieht ...

+3

ohne Hardware-Buttons, das Menü wird einfach nicht gerendert –

+0

@BartFriederichs autsch, aber gut zu wissen. Ich hatte gehofft, dass da etwas ist// – Warpzit

-1

Try This Es funktioniert für mich: ---

@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

Das OP sagt, das onCreateOptionsMenu wird nie aufgerufen. Das Ändern des Inhalts der Methode wird nicht helfen. –

1

Vielleicht haben Sie auch onKeyDown Methode overrode und machte es immer wahr zurückzukehren. Wenn "true" zurückgegeben wird, wird verhindert, dass keyEvent weiter verbreitet wird. Siehe Code unten:

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

Anruf setHasOptionsMenu Funktion von onCreate zuerst. Die onCreateOptionsMenu wird automatisch aufgerufen.

+8

Das ist nur auf Fragmente anwendbar. Für viele andere Tipps und Tricks zum Optionsmenü und Fragmenten siehe hier: http://StackOverflow.com/Questions/6279571/Fragment-Not-Receiving-Menu-Callbacks – RenniePet

+0

das hat bei mir bei Fragmenten nicht funktioniert. - 27.12.2017 – JohannaNoobie

5

Ich hatte das gleiche Problem (Menü nicht angezeigt, onCreateOptionsMenu nicht aufgerufen). Wenn Sie dies innerhalb eines Fragments aufrufen, müssen Sie und nicht public boolean onCreateOptionsMenu(Menu menu) überschreiben. Fragments benutze das letztere nicht, also werden sie es nie nennen.

Activity menu

Fragment menu

45

In den neuesten Versionen von Android, wenn die compat Bibliothek für Symbolleiste, ist sehr üblich, dass dies geschieht, um die Menüpunkte zu bekommen in der Symbolleiste angezeigt werden Sie tun müssen, die folgenden:

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

Danke. setSupportActionBar (mToolbar); hat den Trick gemacht! – Jayasagar

+0

Danke, das hat für mich funktioniert :) – teiiluj

13

Bei dem Verfahren: Fragment#onCreateView(...) sollten Sie setzen:

setHasOptionsMenu(true); 

Dann wird Ihre Methode aufgerufen.

+0

Dies ist keine Methode in meiner Tätigkeit. –

+0

Diese Methode wird in OnCreateView von Fragment Michael Fulton aufgerufen. Es funktioniert gut ... –

+0

Ich habe es vorher in onCreate geschrieben, wie es auch hier vorgeschlagen wird, aber der magische Trick war, es in onCreateView zu verschieben –

2

Ich hatte das gleiche Problem. Mein Problem wurde durch Vererbung einer anderen Aktivitätsklasse gelöst.

So getan, ich hatte:

public class WelcomeActivity erweitert Aktivität

aber änderte sich dies zu:

public class WelcomeActivity erweitert AppCompatActivity

So kann ich, dass eine Aktion sagen, sagte Bar kann zu Ihrer Aktivität hinzugefügt werden.