Android – Wie kann ich den Menüpunkt Text außerhalb von onOptionsItemsSelected oder onCreateOptionsMenu dynamisch ändern

Ich versuche, den Titel eines Menüpunktes von außerhalb der onOptionsItemSelected(MenuItem item) Methode zu ändern.

Ich mache schon folgendes;

  • App, die sich nicht auf dem androiden Marktplatz befindet
  • Android-Emulator-Bildschirm füllt nur einige Bruchteil der tatsächlichen Android-Emulator-Bildschirm
  • Wie bekomme ich den Datenbankwert zu einem String-Array in Android (sqlite Database)
  • Navigationsschublade, Umgang mit dem Rückknopf, um zu vorherigen Fragmenten zu gehen?
  • Autogenerated XAML.g.cs Dateien sind im Xamarin Forms PCL Projekt nicht kompilierbar
  • Android recyclerView findViewHolderForAdapterPosition gibt null zurück
  •  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; } 

    Allerdings möchte ich in der Lage sein, den Titel eines bestimmten Menüpunktes außerhalb dieser Methode zu ändern.

    Vielen Dank im Voraus für Ihre Hilfe.

    Andy

  • Exif Daten TAG_ORIENTATION immer 0
  • Wie zu verschlüsseln und entschlüsseln Datei in Android?
  • JetBrain Idea android xml Element ist hier nicht erlaubt
  • AlarmManager schaltet Alarme zur falschen Zeit aus
  • Wie man Margin zu einem Button zur Laufzeit hinzufügen?
  • Wie greife ich auf Resource Strings von enum's ToString in Android zu?
  • 7 Solutions collect form web for “Android – Wie kann ich den Menüpunkt Text außerhalb von onOptionsItemsSelected oder onCreateOptionsMenu dynamisch ändern”

    Ich würde vorschlagen, eine Referenz innerhalb der Aktivität auf das Menü-Objekt, das Sie erhalten in onCreateOptionsMenu und dann mit dem, um das MenuItem, das die Änderung erfordert, wie und wann Sie es brauchen, zu halten. Zum Beispiel könnten Sie etwas im Sinne der folgenden:

     public class YourActivity extends Activity { private Menu menu; private String inBedMenuTitle = "Set to 'In bed'"; private String outOfBedMenuTitle = "Set to 'Out of bed'"; private boolean inBed = false; @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Create your menu... this.menu = menu; return true; } private void updateMenuTitles() { MenuItem bedMenuItem = menu.findItem(R.id.bedSwitch); if (inBed) { bedMenuItem.setTitle(outOfBedMenuTitle); } else { bedMenuItem.setTitle(inBedMenuTitle); } } } 

    Alternativ können Sie onPrepareOptionsMenu überschreiben, um die Menüpunkte jedes Mal zu aktualisieren, wenn das Menü angezeigt wird.

    Wie JxDarkAngel vorschlug, rief dies von überall in deiner Aktivität ,

     invalidateOptionsMenu(); 

    Und dann überschreiten:

     @Override public boolean onPrepareOptionsMenu(Menu menu) { int savedRoute = mPrefs.getInt(getString(R.string.saved_route), 0); if (savedRoute > 0) { menu.findItem(R.id.action_route).setTitle("Route " + savedRoute); } return super.onPrepareOptionsMenu(menu); } 

    Ist eine viel bessere Wahl. Ich habe die Antwort von https://stackoverflow.com/a/17496503/568197 benutzt

    Erstellen Sie eine setOptionsTitle () – Methode und legen Sie ein Feld in Ihrer Klasse fest. Sowie:

     String bedStatus = "Set to 'Out of Bed'"; 

     public void setOptionsTitle(String status) { bedStatus = status; } 

    Jetzt, wenn das Menü gefüllt wird, ändern Sie den Titel, was auch immer Ihr Status ist:

     @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(bedStatus); // Return true so that the menu gets displayed. return true; } 

    Sie verwenden die Override onPrepareOptionsMenu besser

     menu.Clear (); if (TabActual == TabSelec.Anuncio) { menu.Add(10, 11, 0, "Crear anuncio"); menu.Add(10, 12, 1, "Modificar anuncio"); menu.Add(10, 13, 2, "Eliminar anuncio"); menu.Add(10, 14, 3, "Actualizar"); } if (TabActual == TabSelec.Fotos) { menu.Add(20, 21, 0, "Subir foto"); menu.Add(20, 22, 1, "Actualizar"); } if (TabActual == TabSelec.Comentarios) { menu.Add(30, 31, 0, "Actualizar"); } 

    Hier ein Beispiel

    Für Leute, die den Titelsatz statisch benötigen. Dies kann in der AndroidManifest.xml erfolgen

     <activity android:name=".ActivityName" android:label="Title Text" > </activity> 

    Optionen Menü Titel Text

    Sie können dies schaffen ein globales "Menü" Objekt dann zuordnen es in onCreateOptionMenu

     public class ExampleActivity extends AppCompatActivity Menu Menu; 

    Dann hier zuordnen

     @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); this.menu = menu; return true; } 

    Dann später benutze Menü Objekt, um benötigte Elemente zu erhalten

     menu.findItem(R.id.bedSwitch).setTitle("Your Text"); 

    Es scheint mir, dass Sie den Inhalt des Menüs innerhalb einer lokalen Methode ändern möchten, und diese Methode wird zu jeder Zeit aufgerufen, wann immer ein Ereignis aufgetreten ist, oder im Aktivitäts-UI-Thread.

    Warum nimmst du nicht die Instanz des Menüs in der globalen Variable in onPrepareOptionsMenu, wenn dies überschrieben wird und in dieser Methode von dir verwendet wird. Seien Sie sicher, dass diese Methode aufgerufen wird, wenn ein Ereignis aufgetreten ist (wie Button-Klick) oder in der Aktivität UI Thread, Handler oder async-Task nach der Ausführung.

    Sie sollten im Voraus den Index dieses Menüpunktes kennen, den Sie ändern möchten. Nach dem Löschen des Menüs müssen Sie das Menü XML aufblasen und den Namen oder das Symbol Ihres Elements aktualisieren.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.