Hola estoy desarrollando una aplicación Android. En mi aplicación que estoy utilizando Sherlock acción. He definido algunos elementos de menú en la acción de la barra como en la siguiente manera

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/card_menu"
        android:actionLayout="@layout/action_button"
        android:showAsAction="always"
        android:title="cards">
        <menu>
            <item
                android:id="@+id/C1"
                android:title="C1"/>
            <item
                android:id="@+id/C2"
                android:title="c2"/>
            <item
                android:id="@+id/C3"
                android:title="C3"/>
        </menu>
    </item>
    <item
        android:id="@+id/notification"
        android:actionLayout="@layout/notification_icon"
        android:icon="@drawable/notification"
        android:showAsAction="always"
        android:title="Notifications"/>

    <item
        android:id="@+id/filter"
        android:icon="@drawable/filter"
        android:showAsAction="always"
        android:title="Filter"/>
</menu>

y Mi action_button parece :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/menu_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/spinner_ab_focused_maroon"/>
    <TextView
        android:id="@+id/menu_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/imageView0"
        android:text="C1"/>
</RelativeLayout>

Ahora todo se muestra, pero mi problema es que cuando hago clic en card_menu item donde puedo definir sub-menús y también definir la acción de diseño. Aún no muestra los sub-menús. Mis otros elementos de menú están funcionando correctamente. Sólo cuando tenía que definir la acción de diseño para mi elemento que contiene submenús que no soy capaz de mostrar sub-menú. Si puedo eliminar la acción de diseño funciona bien.

Sé si definimos la acción de diseño para el elemento, entonces tenemos que manejar manualmente haga clic en el oyente.
Lo hice de la siguiente manera

final MenuItem item = menu.findItem(R.id.card_menu);
        item.getActionView().setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onOptionsItemSelected(item);
                Toast.makeText(getActivity(), "click on menu", Toast.LENGTH_SHORT).show();
            }
        });

Soy capaz de manejar evento click para el elemento, pero no es capaz de mostrar desplegable sub elementos de menú.

¿Cómo puedo resolver este problema?

InformationsquelleAutor nilkash | 2013-02-16

4 Comentarios

  1. 52

    Prueba este código en tu actividad.

    Asegúrese de configurar correctamente su

    R. menú.menuidentifier

    R. id.menuitemidentifier

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.actionbarhelpmenu, menu);
            final Menu m = menu;
            final MenuItem item = menu.findItem(R.id.ActionConnection);
            item.getActionView().setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {   
                    m.performIdentifierAction(item.getItemId(), 0);
                }
            });
            return true;
        }
    • Hola Ericharlow gracias por su valiosa ayuda.. se agradece un montón. la solución que funciona para mí. Yo estaba buscando esta solución desde hace mucho tiempo.. Ahora el único problema es que mi submenú de la lista viene en la mano derecha de la esquina superior. no viene como regular.. yo quería mostrarlo por debajo de mi barra de acción.. ¿Cómo moverse en la ubicación correcta .. thankx de nuevo por la ayuda ..
    • otro problema es que no funciona en la versión anterior de dispositivos android de ejecución que haga clic en el oyente, pero no mostrando mi sub menús. Cómo resolver esto. Si Sherlock de la biblioteca apoyo a esto o no. gracias …
    • ¿tener éxito con el actionBarSherlock con un diseño personalizado para el elemento de acción, incluso en la edad android Api? la cosa extraña que me llega de ella es que es no se puede hacer clic, y cuando voy a otro punto de vista, se podría controlar el evento click que ocurrió antes.
    • No trabajo para mí, menu.performIdentifierAction(menuFil.getItemId(),0) siempre devuelve false, y en el submenú que no se ve, cualquier ayuda
    • ¿Alguien tiene alguna idea?
    • ver mi solución en la siguiente respuesta.
    • Para la API 10: MenuItemCompat.getActionView(menuItem).setOnClickListener(…)
    • gracias a esta solución funcionó para mí.
    • Me estoy enfrentando el mismo problema. esta respuesta no está funcionando.

  2. 8

    Aceptado la respuesta no funcionó para mí.
    Mi submenú se comportaron de manera diferente en los distintos dispositivos.
    En el Motorola Moto X fue de esta manera:
    Android barra de acción del elemento de menú con actionLayout no funciona correctamente

    Se puede ver que el sub-menú está en posición incorrecta (hice clic en la burbuja icono de la derecha de la ActionBar).

    Así que al final se me ocurrió otra solución: el uso de PopupMenu lugar.
    El código se parece a esto:

    @Override
    public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_fragment_chat, menu);
        final MenuItem item = menu.findItem(R.id.menu_item_actionbar_avatar);
        MenuItemCompat.getActionView(item).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showProfileMenuPopup(v);
            }
        });
    }
    
    public void showProfileMenuPopup(View v) {
        PopupMenu popup = new PopupMenu(getActivity(), v);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.menu_avatar_actions, popup.getMenu());
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                return false;
            }
        });
        popup.show();
    }

    Y funcionó 🙂

    • Este es un error en el marco consulte github.com/android/platform_frameworks_base/blob/kitkat-release/… Te darás cuenta de que intenta encontrar la Vista del elemento por su elemento de datos sólo mediante una interfaz interna. Si no se encuentra, se usará el Botón de Desbordamiento que si no existe emergente predeterminado es 0,0. Añadir un Desbordamiento del texto único elemento y vas a ver que funcione ok. Debe predeterminado para el MenuItem ActionView de la ventana emergente Vista de Anclaje, si es que existe. Ah, bueno. Mi sugerencia, cambia a la Barra de herramientas.
    • no estaba la barra de herramientas en abril del 2014 🙂
  3. 2

    Completo código de trabajo

     <item
        android:title="search"
        android:id="@+id/mSearch"
        app:actionLayout="@layout/my_custom_menu_item"
        android:orderInCategory="100"
        app:showAsAction="always"/>

    Código:

    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu); MenuItem item = menu.findItem(R.id.mSearch);
        ImageView iv= (ImageView) item.getActionView().findViewById(R.id.search_1);
        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show();
            }
        });
        return true;
    }
  4. 0

    Se refieren a la respuesta

    Si hay un botón en la acción de diseño,
    con el fin de obtener la devolución de llamada de elemento de menú, no olvides poner el botón

    android:clickable="false"

Dejar respuesta

Please enter your comment!
Please enter your name here