Puse un par de puntos de interrupción onCreate
(uno al principio y uno al final del método), y también puse uno al principio de onCreateOptionsMenu
. El onCreate
método se llama primero, y antes de que termine onCreateOptionsMenu
se llama.
Estoy tratando de separar el Fragment
código de navegación en mi aplicación, así que tengo un par de objetos en los que delego onCreateOptionsMenu
dependiendo de si la aplicación se ejecuta en el teléfono / tableta (estoy usando el tamaño de la pantalla para determinar esto, mi archivo de diseño para las pantallas grandes tienen una Vista que verifico después de que se infla el diseño). El problema que tengo es que creo estos objetos en onCreate y obtengo una excepción de puntero nulo cuando hago referencia al objeto onCreateOptionsMenu
.
fuente
NPE
cuando comprobé sinav drawer fragment
estaba abiertoonCreateOptionsMenu
. Tuve que poner controles nulos tanto en onCreateOptionsMenu de la actividad como en la devolución de llamada que el fragmento estaba usando en su onCreateOptionsMenu. Realmente extraño porque solo estaba sucediendo en un par de pantallas, pero constantemente en esas.En mi caso en Android 2.3 y con la
FragmentActivity
biblioteca v4-support, el orden de invocación de los métodos de ciclo de vida es el siguiente:fuente
Encontré si en onResume () llamo
luego onCreateOptionsMenu (menú Menú) se llama después, según el ciclo de vida de la actividad (creo que ese es el término correcto aquí) , como lo indica @ tir38
fuente
supportInvalidateOptionsMenu();
invalidateOptionsMenu
, un trabajo para (re) crear el menú de opciones se agregará a la cola de mensajes de la interfaz de usuario. Cualquier otra cosa que esté en la cola se ejecutará primero.Además en la respuesta anterior, en el caso de ICS y Honeycomb, onCreateOptionsMenu se llama después de onCreate y onPostCreate mientras que en Gingerbread y versiones anteriores se llama después de onCreate pero antes de onPostCreate. Esa es la única diferencia que encontré.
fuente
En mi experiencia
ActionBarActivity
de soporte v7onCreateOptionsMenu()
llamado en elsetContentView()
método en el medioonCreate()
aparece en 4.1.1.Pero en 4.4 otra historia
onCreateOptionMenu()
llamada despuésonCreate()
. Además, no sé, puede ser inmediatamente después, tal vez no. Pero es un hecho después. No probé en otras versiones, pero 4.1.1 es primero donde tuve problemas con el orden de inicio.fuente
supportInvalidateOptionsMenu()
?sugiero crear una función de devolución de llamada en su fragmento para evitar problemas de tiempo con onResume () y onCreateOptionsMenu ().
hacer lo siguiente funciona perfectamente para mí:
ejemplo:
fuente