Coloquei alguns pontos de interrupção onCreate
(um no início e outro no final do método) e também coloquei um no início de onCreateOptionsMenu
. O onCreate
método é chamado primeiro e antes de terminar onCreateOptionsMenu
é chamado.
Estou tentando separar o Fragment
código de navegação no meu aplicativo, então tenho alguns objetos aos quais delegar, onCreateOptionsMenu
dependendo se o aplicativo está sendo executado no telefone / tablet (estou usando o tamanho da tela para determinar isso, meu arquivo de layout para telas grandes tem uma exibição que eu procuro após o layout ser inflado). O problema que estou tendo é que eu crio esses objetos no onCreate e recebo uma exceção de ponteiro nulo quando faço referência ao objeto onCreateOptionsMenu
.
fonte
NPE
verificar se a entradanav drawer fragment
estava abertaonCreateOptionsMenu
. Eu tive que colocar verificações nulas no onCreateOptionsMenu da atividade, bem como no retorno de chamada que o fragmento estava usando no onCreateOptionsMenu. Realmente estranho, porque só acontecia em algumas telas, mas consistentemente nessas.No meu caso no Android 2.3 e com a
FragmentActivity
partir da biblioteca de suporte da v4, a ordem dos métodos do ciclo de vida é a seguinte:fonte
Descobri que em onResume () eu chamo
depois, onCreateOptionsMenu (menu Menu) é chamado posteriormente - conforme o ciclo de vida da atividade (acho que esse é o termo correto aqui) , conforme indicado por @ tir38
fonte
supportInvalidateOptionsMenu();
invalidateOptionsMenu
, um trabalho para (re) criar o menu de opções será adicionado à fila de mensagens da interface do usuário. O que quer que esteja na fila será executado primeiro.Além da resposta acima, no caso do ICS e do Honeycomb, onCreateOptionsMenu é chamado após onCreate e onPostCreate, enquanto no Gingerbread e em versões anteriores, é chamado após onCreate, mas antes em onPostCreate. Essa é a única diferença que encontrei.
fonte
Na minha experiência
ActionBarActivity
com o suporte v7onCreateOptionsMenu()
chamadosetContentView()
método no meioonCreate()
dele, é apresentado em 4.1.1.Mas no 4.4 outra história foi
onCreateOptionMenu()
chamada depoisonCreate()
. Também não sei se pode ser imediatamente depois, talvez não. Mas é fato depois. Não testei em outras versões, mas o 4.1.1 é o primeiro onde tive um problema com a ordem de inicialização.fonte
supportInvalidateOptionsMenu()
?Sugiro criar uma função de retorno de chamada em seu fragmento para evitar problemas de temporização com onResume () e onCreateOptionsMenu ().
fazendo o seguinte funciona perfeitamente para mim:
exemplo:
fonte