¿Cómo conseguir un asimiento del menú de ActionBar en el tiempo de la disposición de la interfaz de usuario?
Por alguna razón, onCreateOptionsMenu()
se llama AFTER onResume()
en mi aplicación … Por lo tanto, simplemente no puedo obtener un asimiento del menú mientras estoy configurando mi interfaz de usuario (entre onCreate()
y onResume()
) , Lo que resulta en no ser capaz de configurar los elementos de acción correspondiente a mi ActionBar …
El único work-around que he encontrado hasta ahora es llamar manualmente invalidateOptionsMenu()
justo antes onCreate()
devuelve; De esa manera onCreateOptionsMenu()
se llama inmediatamente, consigo un asimiento del menú y entonces puedo finalmente agregar los artículos de la acción deseada.
- Android ActionBar NullPointerException
- ¿Puedo desactivar la navegación de ActionBar Spinner?
- Cambiar el color de fondo de ActionBar dinámicamente
- ¿Cómo puedo abrir el SearchView mediante programación?
- ActionBar y ActionBar.Tab y el cajón de navegación android
¿Alguien ha experimentado este problema? ¿Cómo se supone que programaticamente configurar sus elementos de acción dado onCreateOptionsMenu()
se llama después onResume()
?
Mi aplicación se ejecuta en JellyBean, utiliza la función ActionBar (no ActionBarSherlock), android:minSdkVersion="14"
y android:targetSdkVersion="16"
- ¿Cómo funciona MenuItem.SHOW_AS_ACTION_IF_ROOM?
- Título de barra de acción con más de una línea?
- Manténgase en la pestaña actual después de cambiar la orientación Actionbar Android
- Cómo cambiar el color del título de la barra de acción en el código
- Barra de Acción de Android cambia la posición de los menús
- Mostrar progreso spinner (actualizar) en ActionBar?
- ¿Cómo puedo obtener el atributo ActionBar en mi clase
- GetActionBar () no está definido
Primero considere que tal vez no debería estar haciendo esto. Suena como su idea podría ir en contra de los patrones de diseño típico de Android. Si su menú está cambiando en respuesta a una selección de usuario, por ejemplo, debería usar el modo de acción contextual.
-
En la guía de Action Bar API :
Como regla general, todos los elementos del menú de opciones (y mucho menos los elementos de acción) deberían tener un impacto global en la aplicación, en lugar de afectar sólo a una pequeña parte de la interfaz. […] Por lo tanto, incluso antes de decidir si un elemento de menú debe aparecer como un elemento de acción, asegúrese de que el elemento tiene un ámbito global para la actividad actual.
-
En la guía de API del menú :
Nunca debe cambiar elementos en el menú de opciones basado en la
View
actualmente en foco. Cuando está en modo táctil (cuando el usuario no está utilizando una trackball o d-pad), las vistas no pueden concentrarse, por lo que nunca debe utilizar el enfoque como base para modificar elementos en el menú de opciones. Si desea proporcionar elementos de menú sensibles al contexto a unaView
, utilice un menú contextual .
Salvo que, si desea cambiar los elementos del menú como ha descrito, debe realizar el cambio en onPrepareOptionsMenu()
. Cuando ocurre el evento que requiere cambiar los elementos del menú, coloque la información relevante en un campo y llame a invalidateOptionsMenu()
. onPrepareOptionsMenu()
y compruebe el valor del campo para determinar qué elementos de menú agregar / quitar.
(También funcionaría para llamar a invalidateOptionsMenu()
y reemplazar onCreateOptionsMenu()
para modificar qué elementos de menú deben mostrarse, aunque este enfoque no se recomienda.)
Más de la Guía del menú API :
Debe utilizar
onCreateOptionsMenu()
sólo para crear el estado del menú inicial y no para realizar cambios durante el ciclo de vida de la actividad. Si desea modificar el menú de opciones basado en eventos que se producen durante el ciclo de vida de la actividad, puede hacerlo en el métodoonPrepareOptionsMenu()
.Este método le transmite el objeto
Menu
como existe actualmente para que pueda modificarlo, como agregar, quitar o deshabilitar elementos. (Los fragmentos también proporcionan una devolución de llamadaonPrepareOptionsMenu()
).
En Android 2.3.x e inferior, el sistema llama a
onPrepareOptionsMenu()
cada vez que el usuario abre el menú de opciones (presiona el botón Menú).En Android 3.0 o superior, se considera que el menú de opciones siempre está abierto cuando se presentan elementos de menú en la barra de acción. Cuando se produce un evento y desea realizar una actualización de menú, debe invocar
invalidateOptionsMenu()
para solicitar que el sistema llame aonPrepareOptionsMenu()
.
- Aplicación de Android que trabaja en WIFI y 3G (Sin proxy), pero no funciona en 3G (Si proxy y puerto están asignados)
- Nokiax informes java.lang.RuntimeException: tipo de letra nativo no se puede hacer