PopupMenu equivalente en ActionBarSherlock
¿Cuál es el equivalente de PopupMenu en ActionBarSherlock? No puedo encontrarlo. Su API 11, ¿por qué está ausente?
- ¿Cómo establecer la visibilidad de un grupo de menús de la barra de acciones?
- ActionbarSherlock no funciona
- Mostrar ImageView parcialmente detrás de ActionBar transparente
- Cómo cambiar el color de TabIndicater en PagerTabStrip
- Cómo establecer el color del título en ActionBarSherlock?
- ¿Cómo quitar los elementos de menú del fragmento de pila posterior?
- No se puede importar el proyecto de Android en Eclipse - El botón Finalizar no hace nada
- Usar una vista personalizada para elementos de menú de desbordamiento
- Android: agrega el ID de forma programática a un elemento de la barra de acciones
- ¿Cómo importar slidingmenu en Android Studio?
- ActionBarSherlock: OnOptionsItemSelected no reconoce R.id.home
- Ocultar el botón de inicio en ActionBar Sherlock Actionbar extender la actividad de navegación
- ActionBarSherlock - Muestra los elementos de acción desbordados como icono + texto
La clase MenuPopupHelper prácticamente hace el trabajo. No encontré una manera fácil de escuchar los clics del artículo, así que implementé esta clase que deriva de MenuPopupHelper:
public class MenuPopup extends MenuPopupHelper { OnMenuItemClickListener onMenuItemClickListener; public MenuPopup(Context context, MenuBuilder menu, View anchorView) { super(context, menu, anchorView); } public void setOnMenuItemClickListener( OnMenuItemClickListener onMenuItemClickListener) { this.onMenuItemClickListener = onMenuItemClickListener; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { super.onItemClick(parent, view, position, id); if (onMenuItemClickListener != null) onMenuItemClickListener.onMenuItemClick(position); } public interface OnMenuItemClickListener{ public void onMenuItemClick(int itemID); } }
Añadido PopupMenu
en ActionBarSherlock .
Estilo del PopupMenu
–
<item name="popupMenuStyle">@style/PopupMenu.MyAppTheme</item> <style name="PopupMenu.MyAppTheme" parent="@style/Widget.Sherlock.ListPopupWindow"> <item name="android:popupBackground">@android:color/white</item> </style>
Estoy trabajando en esto actualmente. Hice lo que fue sugerido por CommonsWare acerca de backporting. Básicamente tomé el código fuente de PopupMenu.java y reemplazé las importaciones de paquetes con los equivalentes de actionbarsherlock. Parece que funciona bien en los dispositivos de jengibre y ics que probé. La captura, aunque está en actionbarsherlocks MenuPopupHelper clase Tenía que hacer comentarios referencias de las líneas View_HasStateListenerSupport como:
((View_HasStateListenerSupport)anchor).addOnAttachStateChangeListener(this);
por alguna razón. Si no lo hice, obtendría una ClassCastException:
E / AndroidRuntime (9197): EXCEPCIÓN FATAL: main E / AndroidRuntime (9197): java.lang.ClassCastException: android.widget.Button no se puede convertir en com.actionbarsherlock.internal.view.View_HasStateListenerSupport E / AndroidRuntime (9197): at Com.actionbarsherlock.internal.view.menu.MenuPopupHelper.tryShow (MenuPopupHelper.java:121) E / AndroidRuntime (9197): en com.actionbarsherlock.internal.view.menu.MenuPopupHelper.show (MenuPopupHelper.java:102)
No estoy seguro si comentar que el oyente podría causar problemas para otras clases que utilizan MenuPopupHelper o por qué están causando esta excepción (tal vez un error). Pero pensé que compartiría lo que intenté, por lo que puede ayudar a cualquiera que esté estudiando esto.