Ich habe eine Aktivität mit 2 Fragmenten. Beide sind ListFragments und beide tragen MenuItems zum Menü bei. Ich habe ein Menüelement, für das ich das Attribut android festgelegt habe: showAsAction, damit es als Schaltfläche in der Aktionsleiste angezeigt wird. Welches funktioniert gut.
Jetzt ist das MenuItem zustandsabhängig. Dies ist eine Menüoption zum Anhalten / Fortsetzen zum Anhalten und Fortsetzen einer Warteschlange. Mein Problem ist, dass ich nicht herausfinden kann, wie ich die ursprüngliche Statue beim Erstellen des Fragments festlegen soll.
Der Status hängt davon ab, ob die Warteschlange angehalten ist oder nicht. Ich habe also eine AsyncTask, die die Warteschlange abruft und einen Booleschen Wert (pausiert) basierend auf dem Status der Warteschlange festlegt. Ich rufe onPrepareOptionsMenu auf, um den Text für das Menüelement Pause basierend auf dem letzten bekannten Status der Warteschlange festzulegen. Dies funktioniert hervorragend, wenn ich das Menüelement im eigentlichen Menü belasse. Sie tippen auf das Menüsymbol und onPrepareOptionsMenu wird ausgelöst und das Menü wird aktualisiert, bevor es angezeigt wird.
Das Problem ist, wenn ich dasselbe MenuItem in die ActionBar (showAsAction) lege, wie kann ich die Aktualisierung erzwingen, ohne onPrepareOptionsMenu aufrufen zu müssen? Ich muss dazu in der Lage sein, da ich beim ersten Start der App eine Anfrage zum Abrufen der Warteschlange sende, die Aufgabe jedoch zurückkehrt, nachdem die ActionBar eingerichtet und angezeigt wurde. Ich habe in meinem Fragment einen Handler erstellt, der jedes Mal aufgerufen wird, wenn ich ein Warteschlangenupdate erhalte. Wie kann ich von dort aus den Text für mein MenuItem in der ActionBar aktualisieren? Ich kann anscheinend keinen Weg finden, das aktuell eingestellte Menü zu manipulieren, außer in onPrepareOptionMenu.
Rob W.
quelle
supportInvalidateOptionsMenu()
stattdessensupportInvalidateOptionsMenu()
ist jetzt veraltet; Sie können sicher verwendeninvalidateOptionsMenu()
.in meinem Fall:
invalidateOptionsMenu
Der Text wurde einfach auf den ursprünglichen Text zurückgesetzt, aber der direkte Zugriff auf den Menüpunkt und das Umschreiben des gewünschten Textes funktionierten ohne Probleme:Aufgrund des folgenden Kommentars konnte ich über den folgenden Code auf den Menüpunkt zugreifen:
quelle
mnuTopMenuActionBar_
?mnuTopMenuActionBar_
nicht initialisierten Code erreichen können , oder? Wie würden Sie das umgehen?Um das Menü von Fragment zu aktualisieren, rufen Sie einfach an:
quelle
Ich habe diesen Code verwendet:
Und wie ein Zauber für mich gearbeitet, finden Sie OnPrepareOptionsMenu hier
quelle
Befolgen Sie zunächst die beiden Codezeilen, um die Aktionsleistenelemente zu aktualisieren, bevor Sie eine Bedingung in oncreateOptionMenu () festlegen. Beispielsweise:
quelle
Aus Gründen der Klarheit dachte ich, dass ein direktes Beispiel für das Ergreifen einer Ressource aus dem Folgenden gezeigt werden kann, das meiner Meinung nach zur Beantwortung dieser Frage mit einem kurzen direkten Beispiel beiträgt.
In diesem Fall halten Sie zu Beginn an einer MenuItem-Referenz fest und ändern deren Status (z. B. für Änderungen des Symbolstatus) zu einem späteren Zeitpunkt.
quelle
In Kotlin 1.2 rufen Sie einfach an:
und die
onCreateOptionsMenu
Funktion wird erneut aufgerufen.quelle