Я пытаюсь изменить заголовок пункта меню вне 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;
}
однако я хотел бы иметь возможность изменять заголовок определенного пункта меню вне этого метода.
Ответы:
Как предложил JxDarkAngel, вызывая это из любой точки вашей активности ,
а затем переопределить:
это гораздо лучший выбор. Я использовал ответ от https://stackoverflow.com/a/17496503/568197
источник
onPrepareOptionsMenu()
Android-платформа вызывается довольно часто, например, при отображении действия и каждый раз, когда отображается меню. Так что это может быть не очень эффективно, если ваше меню меняется не очень часто.invalidateOptionsMenu()
также будет вызыватьonCreateOptionsMenu()
, чтобы вы могли вставить логику обновленияonCreateOptionsMenu()
.Я бы предложил сохранить ссылку в действии на объект Menu, который вы получаете в onCreateOptionsMenu, а затем использовать его для извлечения элемента MenuItem, который требует изменения по мере необходимости. Например, вы можете сделать что-то вроде следующего:
Кроме того, вы можете переопределить onPrepareOptionsMenu, чтобы обновлять пункты меню каждый раз, когда оно отображается.
источник
Вы можете сделать это, создать глобальный объект «Меню», а затем назначить его в onCreateOptionMenu
затем назначьте здесь
Затем используйте назначенный объект Меню для получения необходимых предметов.
источник
Создайте метод setOptionsTitle () и установите поле в своем классе. Такие как:
...
Теперь, когда меню заполнено, измените заголовок на ваш статус:
источник
Вам лучше использовать переопределение onPrepareOptionsMenu
Вот пример
источник
Я использую этот код для оценки моего нижнего элемента навигации
источник
Объявите свое поле меню.
Ниже приведен метод onCreateOptionsMenu ()
Следующим будет ваше имя сеттер деятельности. Либо нажатием кнопки, либо условным кодом
Это сработало для меня.
источник
Мне кажется, что вы хотите изменить содержимое меню внутри локального метода, и этот метод вызывается в любое время, когда происходит событие или в потоке пользовательского интерфейса активности.
Почему бы вам не взять экземпляр Menu в глобальной переменной в onPrepareOptionsMenu, когда это переопределено, и использовать в этом вашем методе. Убедитесь, что этот метод вызывается всякий раз, когда происходит событие (например, нажатие кнопки), или в потоке пользовательского интерфейса, обработчике или асинхронной задаче после выполнения.
Вы должны заранее знать индекс этого пункта меню, который вы хотите изменить. После очистки меню вам нужно накачать меню XML и обновить имя или значок вашего элемента.
источник
Для людей, которым нужен заголовок установлен статически. Это можно сделать в AndroidManifest.xml
источник
Мне нужно было изменить значок меню для фрагмента. Я немного изменил ответ Чарльза на этот вопрос для фрагмента:
источник