Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo crear una instancia de menú mediante programación? Es decir, inflar un menú fuera onCreateOptionsMenu

Quiero inflar un objeto de menú fuera del método onCreateOptionsMenu (que significa crear / mostrar el menú cuando el usuario no presiona el botón), así que necesito crear una instancia de menú para pasarlo al método de inflar.

Aquí hay un ejemplo de lo que estoy tratando de lograr:

 Menu menu = // How to create an instance !? new MenuInflater(context).inflate(R.menu.my_menu, menu) 

Menú es una interfaz, así que necesito saber qué clase lo está implementando. Hice hojear el código de Androide para conseguir cualquier indirecta en cómo un objeto del menú se crea, pero todavía no podría encontrar lo que estoy buscando.

Editar 1

Mi objetivo es disparar un onOptionsItemSelected(MenuItem item) desde una vista personalizada, que será manejada por la actividad, así que necesito tener un objeto MenuItem con itemId específico y el título para pasarlo con el evento.

Si puedo crear con éxito un objeto Menu, será fácil obtener sus menús MenuItems.

Editar 2

No estoy tratando de mostrar un menú en absoluto, lo que quiero es rellenar un ListView con elementos definidos en un menú XML que tienen título, icono y itemId y cada vez que se hace clic en un ListViewItem Quiero disparar un onOptionsItemSelected(MenuItem item) Que se maneja en mi actividad.

Sé que puedo analizar el XML del menú para extraer la información de los artículos, sin embargo no podré lanzar onOptionsItemSelected(MenuItem item) sin crear un objeto estándar de MenuItem para pasarlo como argumento.

Cualquier ayuda será apreciada. ¡Gracias!

  • Android: ¿Cómo activar / desactivar el elemento de menú de opción en el botón de clic?
  • Cómo utilizar los elementos de la barra de herramientas con Viewpager + Fragmentos
  • Tamaño del icono de menú de Android
  • ¿Cómo conseguir la vista de la acción del artículo del menú?
  • Botón de selección de Android MenuItem
  • ¿Qué relleno, margen y tamaño debo utilizar para un diseño personalizado MenuItem?
  • IllegalArgumentException Tipo de elemento de carga útil no válido - Con ActionBarCompat
  • Dos líneas de texto para MenuItem
  • 4 Solutions collect form web for “Cómo crear una instancia de menú mediante programación? Es decir, inflar un menú fuera onCreateOptionsMenu”

    Aquí hay un truco para obtener una instancia de Menú:

     PopupMenu p = new PopupMenu(getContext(), null); Menu menu = p.getMenu(); 

    Encontré dos soluciones para crear una instancia de menú de forma programática e inflarlo:

    • Uso de la biblioteca ActionbarSherlock o de la biblioteca AppCompat v7 Menu menu = new MenuBuilder(context); O puede escribir su propia clase de MenuBuilder

    • Uso del SDK estándar de Android:

    // Creación de una instancia por reflexión

     Menu menu = newMenuInstance(context); protected Menu newMenuInstance(Context context) { try { Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder"); Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class); return (Menu) constructor.newInstance(context); } catch (Exception e) {e.printStackTrace();} return null; } 

    Una vez que tenga una instancia de menú, puede inflarla fácilmente desde un menú de recursos XML en cualquier parte de su programa

    new MenuInflater(context).inflate(menuId, menu);

    He probado ambos métodos y están funcionando perfectamente. Recomendaría usar el segundo método con las clases Standard Menu y MenuItem de android SDK incluso si su actividad extiende SherlockActivity porque todavía recibirá onOptionsItemSelected(MenuItem item) sin importar si se dispara con android.view.MenuItem o com.actionbarsherlock.view.MenuItem

    Usted no necesita hacer nada con inflator para agregar sus propios menús. Simplemente anule onCreateOptionsMenu y comience a agregar sus propios elementos en el objeto de menú . Por ejemplo:

     @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, 1, Menu.NONE, "First"); menu.add(0, 2, Menu.NONE, "Second"); // repeat this to add additional menus return true; } 

    El segundo argumento en el método add es el id . Utilice identificadores únicos para identificar el elemento de menú seleccionado.

    Puede extraer instancia de MenuBuilder (que implementa la interfaz de Menú) almacenada en PhoneWindow que se está utilizando en Actividad. Tengo una solución de trabajo, que utiliza la reflexión de Java.

    He creado un proyecto "InDroid" para exponer algunos métodos ocultos importantes, variables de la plataforma Android: http://code.google.com/p/indroid/

    BR, Prasanta

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.