2012-10-14 20 views
9

Nadpisuję naPrepareOptionsMenu, aby ukryć i wyświetlić elementy menu. Podczas testowania z emulatorem poziomu interfejsu API 16; onPrepareOptionsMenu nie jest wywoływane podczas otwierania menu po raz pierwszy. Ale po ponownym otwarciu menu działa. Problem dotyczy tylko pierwszego użycia. Możesz to w prosty sposób przetestować;Fasola nie jest wywoływanaPrepareOptionsMenu() podczas otwierania menu po raz pierwszy

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

Wszelkie pomysły?

Odpowiedz

17

onPrepareOptionsMenu() jest wywoływana za każdym razem, gdy użytkownik otwiera menu z piernika i poniżej. Od Honeycomb w górę Menu opcji zakłada się, że zawsze będzie otwarte, gdy elementy znajdą się w pasku akcji.

Jeśli chcesz zaktualizować menu opcji podczas wykonywania swoich czynności, a także w ramach połączenia zwrotnego onPrepareOptionsMenu(), musisz zadzwonić pod numer invalidateOptionsMenu(), aby wywołać onPrepareOptionsMenu().

Nie możesz zaimplementować kodu do pierwszego użycia w wywołaniu zwrotnym onCreateOptionsMenu()? Jest wywoływana za każdym razem, gdy tworzone jest menu opcji i jest tworzone przy pierwszym użyciu.

+0

invalidateOptions Menu działa. thx – syloc

+0

Skąd to nazywasz? – Skynet

+0

Z Twojej aktywności. – IKavanagh

5

Jest android bug: https://code.google.com/p/android/issues/detail?id=24231

Kiedy pierwszy raz nacisnąć przycisk menu, zadzwoń invalidateOptionsMenu() lub supportInvalidateOptionsMenu() jeśli używasz biblioteki wsparcia.

@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

Działa pięknie, dzięki! Zauważ, że w niektórych przypadkach powinno to być 'ActivityCompat.invalidateOptionsMenu (this);'. – zelanix

Powiązane problemy