Estou tentando alterar o título de um item de menu de fora do onOptionsItemSelected(MenuItem item)
método.
Eu já faço o seguinte;
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;
}
no entanto, eu gostaria de poder modificar o título de um item de menu específico fora deste método.
Respostas:
Como o JxDarkAngel sugeriu, chamando isso de qualquer lugar da sua Atividade ,
e então substituindo:
é uma escolha muito melhor. Eu usei a resposta de https://stackoverflow.com/a/17496503/568197
fonte
onPrepareOptionsMenu()
é chamado com bastante frequência pela estrutura do Android, por exemplo, ao exibir uma Atividade e toda vez que o menu é exibido. Portanto, isso pode não ser muito eficiente, se o menu não mudar com muita frequência.invalidateOptionsMenu()
também chamaráonCreateOptionsMenu()
, para que você possa inserir a lógica de atualizaçãoonCreateOptionsMenu()
.Sugiro que você mantenha uma referência dentro da atividade ao objeto Menu recebido no onCreateOptionsMenu e, em seguida, use-o para recuperar o MenuItem que requer a alteração quando necessário. Por exemplo, você pode fazer algo como:
Como alternativa, você pode substituir o menu Preferências de opções para atualizar os itens de menu sempre que o menu for exibido.
fonte
você pode criar um objeto global "Menu" e atribuí-lo no onCreateOptionMenu
então atribua aqui
Depois, use o objeto de menu atribuído para obter os itens necessários
fonte
Crie um método setOptionsTitle () e defina um campo na sua classe. Tal como:
...
Agora, quando o menu for preenchido, altere o título para qualquer que seja seu status:
fonte
É melhor usar a substituição no menuPrepareOptions
Aqui um exemplo
fonte
Eu uso esse código para costurar meu item de navegação inferior
fonte
Declare o seu campo de menu.
A seguir está o método onCreateOptionsMenu ()
A seguir, apresentamos sua atividade de criação de nomes. Através de um clique no botão ou de um código condicional
Isso funcionou para mim.
fonte
Parece-me que você deseja alterar o conteúdo do menu dentro de um método local, e esse método é chamado a qualquer momento, sempre que um evento ocorre ou no segmento da interface do usuário da atividade.
Por que você não pega a instância de Menu na variável global no onPrepareOptionsMenu quando isso é substituído e o usa nesse método. Certifique-se de que esse método seja chamado sempre que um evento ocorrer (como clique no botão) ou no segmento da interface do usuário da atividade, manipulador ou pós-execução de tarefa assíncrona.
Você deve conhecer antecipadamente o índice deste item de menu que deseja alterar. Após limpar o menu, você precisa aumentar o XML do menu e atualizar o nome ou o ícone do item.
fonte
Para pessoas que precisam do título definido estaticamente. Isso pode ser feito no AndroidManifest.xml
fonte
Eu precisava mudar o ícone do menu para o fragmento. Alterei um pouco a resposta de Charles para essa pergunta no fragmento:
fonte