prüfen ob OptionsMenu geöffnet / geschlossen ist

  • Hey folks, ich versuche einige Runner zum nichts tun zu verdonnern wenn mein Optionsmenu geöffnet ist und umgekehrt. Mein Optionsmenu erstelle ich im code, und ganz ohne Layout.xml file.


    In der Methode onPrepareOptionsMenu(menu menu)


    Als ich ein bischen nachgeforscht hab, hab ich entdeckt das es eine namentlich passende Methode gibt die zu meiner gewünschten Funktion passen würde -> onOptionsMenuClosed(Menu menu)


    Diese wird aber seltsamerweise nie aufgerufen, weder wenn ich die Optionstaste ein zweites mal drücke damit das OptionsMenu wieder verschwindet, noch wenn ich die "Back"Taste benutze, noch wenn ich ein Item auf dem OptionsMenu auswähle.


    Kann mir vielleicht einer sagen warum ? Ich dachte der Name ist Programm !

  • Zunächst mal scheint Dein Code im onPrepareOptionsMenu falsch eingeordnet zu sein.
    onPrepareOptionsMenu wird jedes Mal ausgeführt, bevor Dein Menu angezeigt wird – du änderst aber nix dynamisch an der Menüstruktur.


    In onCreateOptionsMenu() wären die Einträge besser aufgehoben.


    onOptionsMenuClosed() soll genau das tun, was es sagt und was Du erwartest.
    Wenn es nie aufgerufen wird, nutzt Du es dann vielleicht in einer falschen Klasse?


    Du kannst das nur in einem Dialog oder einer Activity überschreiben (und natürlich in davon abgeleiteten Klassen)
    Auf jeden Fall sollte die Methode aufgerufen werden. Wenn das bei Dir nicht der Fall ist, müsstest Du wohl irgendwas verkehrt machen…

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • In onCreateOptionsMenu() wären die Einträge besser aufgehoben.

    Meine beiden Einträge ...

    Java
    menu.add(0, 1, Menu.NONE, PResText.getString("connections"));
      menu.add(0, 2, Menu.NONE, PResText.getString("Sprachumstellung"));

    werden je nach gesetzter Locale von der Klasse PResText durch einen anderen Text ersetzt. Eigentlich schon dynamisch, nur da ich jedes mal wenn ich meine Sprache ändere, auch eine neue MainActivity erstelle, reicht es aus die mein OptionsMenu in der onCreateOptionsMenu() ersetllen zu lassen, da hast du Recht. Danke ;)

  • Ich habe nur meine MainActivity als einzige Activity mit einem OptionsMenu. dort habe ich nun folgenden Code...


    Ich öffne das OptionsMenu über die Menu-Taste des Emulators. Schliessen durch "Back-" oder "Menu-" oder durch auswählen eines Items.


    Debugger läuft... und ich habe einen Breakpoint auf >> System.out.println("OptionsMenu closed #########################"); <<


    Dort kommt er aber anscheinend nie vorbei :-/ :-/ :-/

  • Hmmm…

    Zitat

    This calls through to onOptionsMenuClosed(Menu) method for the FEATURE_OPTIONS_PANEL panel, so that subclasses of Activity don't need to deal with feature codes.


    Erklärt also immer noch nicht, warum das bei Dir nicht will.
    Außer vielleicht, dass Dein Menü nicht FEATURE_OPTIONS_PANEL als FeatureID hat. Das könntest Du ja mal nachprüfen. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Naja, wenn Du onPanelClosed eh schon überschreibst kannst Du ja für jeden Aufruf die FeatureID ausgeben lassen.


    Da kannst Du dann manuell vergleichen (0) oder maschinell via (featureId == FEATURE_OPTIONS_PANEL)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • 8 ist wohl FEATURE_ACTION_BAR
    Ich weiß ja nicht recht, ob Du da an der richtigen Stelle eingreifst. ;)


    onPanelClosed dürfte ja immer aufgerufen werden, wenn irgendein Panel/Window Deiner App geschlossen wird…

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!