Intereting Posts
OnAnimationEnd не получает вызов, onAnimationStart работает нормально Преобразование растрового изображения в сепию в android Как определить источник Conscrypt, используемый в коде конфигурации сетевой безопасности Android N? Как добавить оверлейный просмотр по другому виду в Android? Android: EventHub.removeMessages (int what = 107) не поддерживается до того, как WebViewCore настроен Android: компиляция файлов с 9 патчами, которые будут использоваться за пределами выделенной папки? Понимание onTrimMemory (int level) Произошло событие Fire на AsyncTask Поддержка языковых индексов для SDK, но не PhoneGap Как установить Java.util.calendar на определенный период времени в будущем Как обновить предыдущий фрагмент после закрытия активности, которая была запущена внутри адаптера? Android: Создать ListView в XML? Получение событий onTouch и onClick с Android Weinre не работает, пытаясь отладить? Отображение символов в edroidxt android

Android – Как динамически изменять текст пункта меню за пределами onOptionsItemsSelected или onCreateOptionsMenu

Я пытаюсь изменить название элемента меню за пределами метода onOptionsItemSelected(MenuItem item) .

Я уже делаю следующее:

 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; } 

Однако я хотел бы иметь возможность изменять заголовок определенного пункта меню за пределами этого метода.

Заранее спасибо за вашу помощь.

Энди

Solutions Collecting From Web of "Android – Как динамически изменять текст пункта меню за пределами onOptionsItemsSelected или onCreateOptionsMenu"

Я хотел бы предложить сохранить ссылку в рамках объекта в объект Menu, который вы получаете в onCreateOptionsMenu, а затем использовать его для извлечения MenuItem, который требует изменения по мере необходимости. Например, вы можете сделать что-то в следующих строках:

 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); } } } 

Кроме того, вы можете переопределить onPrepareOptionsMenu, чтобы обновлять пункты меню каждый раз, когда отображается меню.

Как предложил JxDarkAngel, называя это из любой точки вашей деятельности ,

 invalidateOptionsMenu(); 

А затем переопределить:

 @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); } 

Это гораздо лучший выбор. Я использовал ответ из https://stackoverflow.com/a/17496503/568197

Создайте метод setOptionsTitle () и установите поле в своем классе. Такие как:

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

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

Теперь, когда меню заселено, измените заголовок на любой ваш статус:

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

Вам лучше использовать переопределение onPrepareOptionsMenu

 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"); } 

Вот пример

Для людей, которым требуется стат. Это можно сделать в AndroidManifest.xml

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

Опции Текст заголовка меню

Вы можете сделать это, создайте глобальный объект «Меню», а затем назначьте его в onCreateOptionMenu

 public class ExampleActivity extends AppCompatActivity Menu Menu; 

Затем назначьте здесь

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

Затем используйте назначенный объект меню для получения требуемых элементов

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

Мне кажется, что вы хотите изменить содержимое меню внутри локального метода, и этот метод вызывается в любое время, всякий раз, когда происходит событие, или в потоке пользовательского интерфейса активности.

Почему бы вам не взять экземпляр меню в глобальной переменной в onPrepareOptionsMenu, если это переопределено и использовать в этом методе. Убедитесь, что этот метод вызывается всякий раз, когда происходит событие (например, нажатие кнопки) или в потоке пользовательского интерфейса активности, обработчике или асинхронной задаче после выполнения.

Вы должны заранее знать индекс этого пункта меню, который хотите изменить. После очистки меню вам необходимо раздуть меню XML и обновить имя или значок вашего элемента.