Ich versuche, den Titel eines Menüelements von außerhalb der onOptionsItemSelected(MenuItem item)
Methode zu ändern .
Ich mache schon folgendes;
public boolean onOptionsItemSelected(MenuItem item) {
try {
switch(item.getItemId()) {
case R.id.bedSwitch:
if(item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
break;
}
} catch(Exception e) {
Log.i("Sleep Recorder", e.toString());
}
return true;
}
Ich möchte jedoch in der Lage sein, den Titel eines bestimmten Menüelements außerhalb dieser Methode zu ändern.
Antworten:
Wie JxDarkAngel vorgeschlagen hat, rufen Sie dies von überall in Ihrer Aktivität auf .
und dann überschreiben:
ist eine viel bessere Wahl. Ich habe die Antwort von https://stackoverflow.com/a/17496503/568197 verwendet
quelle
onPrepareOptionsMenu()
vom Android-Framework ziemlich häufig aufgerufen wird, z. B. beim Anzeigen einer Aktivität und jedes Mal, wenn das Menü angezeigt wird. Dies ist möglicherweise nicht sehr effizient, wenn sich Ihr Menü nicht sehr oft ändert.invalidateOptionsMenu()
wird auch aufgerufenonCreateOptionsMenu()
, so dass Sie die Aktualisierungslogik einfügen könnenonCreateOptionsMenu()
.Ich würde vorschlagen, innerhalb der Aktivität einen Verweis auf das Menüobjekt zu behalten, das Sie in onCreateOptionsMenu erhalten, und dieses dann zu verwenden, um das MenuItem abzurufen, für das die Änderung erforderlich ist, wenn Sie es benötigen. Sie könnten beispielsweise Folgendes tun:
Alternativ können Sie onPrepareOptionsMenu überschreiben , um die Menüelemente jedes Mal zu aktualisieren, wenn das Menü angezeigt wird.
quelle
Sie können dazu ein globales "Menü" -Objekt erstellen und es dann in onCreateOptionMenu zuweisen
dann hier zuweisen
Verwenden Sie später das zugewiesene Menüobjekt, um die erforderlichen Elemente abzurufen
quelle
Erstellen Sie eine setOptionsTitle () -Methode und legen Sie ein Feld in Ihrer Klasse fest. Sowie:
...
Wenn das Menü nun ausgefüllt ist, ändern Sie den Titel in einen beliebigen Status:
quelle
Verwenden Sie besser die Überschreibung onPrepareOptionsMenu
Hier ein Beispiel
quelle
Ich benutze diesen Code, um mein unteres Navigationselement zu kostümieren
quelle
Deklarieren Sie Ihr Menüfeld.
Es folgt die Methode onCreateOptionsMenu ()
Im Folgenden finden Sie Ihre Aktivität als Namensgeber. Entweder durch Klicken auf eine Schaltfläche oder durch bedingten Code
Das hat bei mir funktioniert.
quelle
Es scheint mir, dass Sie den Inhalt des Menüs innerhalb einer lokalen Methode ändern möchten, und diese Methode wird jederzeit aufgerufen, wenn ein Ereignis auftritt oder im Thread der Aktivitäts-Benutzeroberfläche.
Warum nehmen Sie nicht die Instanz von Menu in der globalen Variablen in onPrepareOptionsMenu, wenn diese überschrieben wird, und verwenden Sie sie in Ihrer Methode. Stellen Sie sicher, dass diese Methode aufgerufen wird, wenn ein Ereignis auftritt (z. B. Klicken auf eine Schaltfläche) oder im Thread, Handler oder Async-Task der Aktivität nach der Ausführung.
Sie sollten den Index dieses Menüelements, den Sie ändern möchten, im Voraus kennen. Nach dem Löschen des Menüs müssen Sie das Menü-XML aufblasen und den Namen oder das Symbol Ihres Elements aktualisieren.
quelle
Für Personen, bei denen der Titel statisch festgelegt werden muss. Dies kann in der AndroidManifest.xml erfolgen
quelle
Ich musste das Menüsymbol für das Fragment ändern. Ich habe Charles 'Antwort auf diese Frage für das Fragment ein wenig geändert:
quelle