Volver a usar el código del menú Opciones
¿Existe una manera conveniente de mostrar las mismas opciones del menú Opciones en múltiples Actividades?
Ejemplo: En mi aplicación, muestro una Guía de TV en una de tres maneras.
- Cómo ocultar OptionsMenu en NavigationDrawer utilizando Fragmentos?
- Cambiar el icono del menú de opciones en la barra de acciones dependiendo de un fragmento abierto
- Hacer clic en icono de hamburguesa en la barra de herramientas no abre Cajón de navegación
- Advertencia al cancelar el menú de desbordamiento de ActionBar en Android 4.1.x
- El menú Opciones no incluye los iconos
- Guía de siete días (TabActivity con 7 pestañas)
- Todos los canales 'Mostrando ahora' (ListActivity)
- Todos los espectáculos de hoy por hora de inicio (Actividad – se podría cambiar fácilmente a ListActivity)
Para el menú Opciones en TabActivity
, el código es bastante simple …
@Override public boolean onPrepareOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); menu.clear(); inflater.inflate(R.menu.gv_options_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.view: ... ... } }
… pero por el momento parece que necesito copiarlo / pegarlo a las otras dos Actividades que no me gusta hacer. Si cambio el código del menú de Opciones para uno, necesitaré hacerlo para los otros dos también.
La única alternativa que se me ocurre es que tengo una clase 'auxiliar' (POJO) a la que podría añadir un método y pasar el context
para permitir el uso del método getMenuInflator()
y otro método que podría pasar el resultado del item.getItemId()
para procesar con el switch-case.
¿Cuál es la forma normal de tener múltiples actividades con el mismo menú de opciones?
- El menú de opciones se bloquea en la galaxia s4
- ¿Cómo implemento el método onCreateOptionsMenu en un SherlockFragment?
- Android: cambia el ancho del menú de desbordamiento
- El icono del menú de opciones de Android no se mostrará
- Ocultar MenuItem en algunos fragmentos
- Usando invalidateOptionsMenu () con el sistema de inicio de sesión (Android)
- No se muestra ningún icono en el elemento de menú Opciones de Android
- OnPrepareOptionsMenu no se llama
Un enfoque es usar la herencia con sus Actividades. Cree una actividad base que implemente los métodos del menú de opciones y cada actividad secundaria ganará esa funcionalidad. Este es el enfoque recomendado en el sitio de desarrolladores de Android:
Sugerencia: Si su aplicación contiene varias actividades y algunas de ellas proporcionan el mismo Menú de opciones, considere crear una actividad que implemente nada excepto los métodos onCreateOptionsMenu () y onOptionsItemSelected (). A continuación, amplíe esta clase para cada actividad que debería compartir el mismo Menú de opciones. De esta manera, sólo tiene que administrar un conjunto de código para manejar las acciones del menú y cada clase descendiente hereda los comportamientos del menú.
Desafortunadamente, esto no funcionará para usted, ya que no hereda de la actividad en sí, pero diferentes subclases de la misma, pero esa es la forma "normal" de hacerlo.
Cree una clase simple separada con estos dos métodos:
public class MyMenuHandler { private Activity mActivity; public MyMenuHandler(Activity activity) { mActivity = activity; } public boolean onPrepareOptionsMenu(Menu menu) { MenuInflater inflater = mActivity.getMenuInflater(); menu.clear(); inflater.inflate(R.menu.gv_options_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.view: ... } } }
En sus actividades, reemplace los métodos de devolución de llamada y redirija la llamada a una instancia de su clase MyMenuHandler:
public class MyActivity1 extends TabActivity { private MyMenuHandler mMenuHandler; @Override public void onCreate(Bundle savedInstanceState) { ... mMenuHandler = new MyMenuHandler(this); } @Override public boolean onPrepareOptionsMenu(Menu menu) { // you may also add here some items which are specific // for one activity, not for the others ... return mMenuHandler.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // handle selection of your specific items here, // if none of them has been selected call mMenuHandler method ... return mMenuHandler.onOptionsItemSelected(item); } }
Esto le permitirá mantener en un lugar el código que responde a la selección de los elementos básicos del menú, por lo que no habrá necesidad de preocuparse por copiar y pegarlo en todas las actividades que deben tener el mismo menú.
Puede encapsular su menú de acción en un fragmento . De esta manera solo necesitas agregar el fragmento en el menú onCreate de tu actividad.
Necesita llamar a setHasOptionsMenu una vez que se crea el fragmento. Para agregar el fragmento de agregar utiliza una etiqueta en lugar de un id de diseño.
- Obtener la duración de la última llamada en android
- Android ExpandableListView – establece cierto grupo para no expandible