2012-10-14 11 views
9

Ich überschreibe onPrepareOptionsMenu, um Menüeinträge auszublenden und anzuzeigen. Beim Testen mit dem API Level 16 Emulator; onPrepareOptionsMenu wird nicht aufgerufen, wenn das Menü zum ersten Mal geöffnet wird. Aber wenn ich das Menü wieder öffne, funktioniert es. Das Problem ist nur bei der ersten Verwendung. Sie können es einfach damit testen;Jelly Bean ruft onPrepareOptionsMenu() nicht auf, wenn das Menü zum ersten Mal geöffnet wird

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    Toast.makeText(this.getActivity(), "pre", Toast.LENGTH_SHORT).show(); 
    super.onPrepareOptionsMenu(menu); 
} 

Irgendwelche Ideen?

Antwort

17

onPrepareOptionsMenu() wird jedes Mal aufgerufen, wenn der Benutzer das Menü auf Lebkuchen und darunter öffnet. Ab Honeycomb wird das Optionsmenü immer geöffnet, wenn Elemente in der ActionBar vorhanden sind.

Wenn Sie das Optionsmenü während Ihrer Aktivitäten lifecyle und innerhalb des onPrepareOptionsMenu() Callbacks aktualisieren möchten, müssen Sie invalidateOptionsMenu() aufrufen und die onPrepareOptionsMenu() wird aufgerufen.

Konnten Sie den Code für Ihre erste Verwendung nicht im onCreateOptionsMenu() Rückruf implementieren? Es wird jedes Mal aufgerufen, wenn das Optionsmenü erstellt wird und bei der ersten Verwendung erstellt wird.

+0

invalidateOptionsMenu hat funktioniert. thx – syloc

+0

Woher nennst du das? – Skynet

+0

Von Ihrer Aktivität. – IKavanagh

5

Es ist android Fehler: https://code.google.com/p/android/issues/detail?id=24231

Wenn Sie Menü-Taste drücken ersten Mal, rufen invalidateOptionsMenu() oder supportInvalidateOptionsMenu(), wenn Sie Support-Bibliothek verwenden.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch(keyCode) { 
    case KeyEvent.KEYCODE_MENU: 
     if(mIsMenuFirstClick) { 
      mIsMenuFirstClick = false; 
      supportInvalidateOptionsMenu(); 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+2

Funktioniert wunderbar, danke! Beachten Sie, dass es in einigen Fällen 'ActivityCompat.invalidateOptionsMenu (this);'. – zelanix