Tenho uma atividade que tem 2 fragmentos. Ambos são ListFragments e contribuem com MenuItems para o Menu. Eu tenho um MenuItem que configurei o atributo android: showAsAction para que seja mostrado como um botão na ActionBar. O que funciona bem.
Agora o MenuItem é dependente do estado. É uma opção de menu Pausar / Reiniciar para pausar e retomar uma fila. Meu problema é que não consigo descobrir como definir sua estátua inicial quando o fragmento é criado.
Seu estado depende se a fila está pausada ou não. Portanto, tenho um AsyncTask que obtém a fila e define um booleano (pausado) com base no estado da fila. Estou chamando onPrepareOptionsMenu para definir o texto para o item de menu Pausa com base no último estado conhecido da fila e isso funciona muito bem se eu deixar o MenuItem no menu real. Você toca no ícone do menu e onPrepareOptionsMenu é disparado e o menu é atualizado antes de ser exibido.
O problema é que, se eu colocar esse mesmo MenuItem na ActionBar (showAsAction), como posso forçá-lo a atualizar sem ter que chamar onPrepareOptionsMenu? Preciso ser capaz de fazer isso porque na primeira inicialização do aplicativo, envio uma solicitação para obter a fila, mas a tarefa retorna após a ActionBar ser configurada e exibida. Eu criei um manipulador em meu fragmento que é chamado sempre que recebo uma atualização de fila, mas a partir daí, como posso atualizar o texto do meu MenuItem na ActionBar? Não consigo encontrar uma maneira de fazer com que o Menu definido atualmente para manipulá-lo, exceto em onPrepareOptionMenu.
Rob W.
fonte
supportInvalidateOptionsMenu()
vezsupportInvalidateOptionsMenu()
agora está obsoleto; você pode usar com segurançainvalidateOptionsMenu()
.no meu caso:
invalidateOptionsMenu
apenas restabeleci o texto ao original, mas acessar diretamente o item do menu e reescrever o texto desejado funcionou sem problemas:devido ao comentário abaixo, consegui acessar o item do menu por meio do seguinte código:
fonte
mnuTopMenuActionBar_
?mnuTopMenuActionBar_
não inicializado, certo? Como você resolveria isso?Para atualizar o menu do Fragment, basta chamar:
fonte
Eu usei este código:
E funcionou perfeitamente para mim, você pode encontrar OnPrepareOptionsMenu aqui
fonte
Primeiro, siga as duas linhas de código para atualizar os itens da barra de ação antes de definir uma condição em oncreateOptionMenu (). Por exemplo:
fonte
Para maior clareza, pensei que um exemplo direto de como agarrar um recurso pode ser mostrado a seguir, que acho que contribui para a resposta a esta pergunta com um exemplo direto rápido.
Nesse caso, você mantém uma referência MenuItem no início e, em seguida, altera o estado dela (para alterações de estado do ícone, por exemplo) em um determinado momento posterior.
fonte
No Kotlin 1.2, basta chamar:
e a
onCreateOptionsMenu
função será chamada novamente.fonte