2012-08-25 32 views
8

¿Cuál es el equivalente en PopupMenu ActionBarSherlock? Parece que no puedo encontrarlo. Su API 11, ¿por qué está ausente?PopupMenu equivalente en ActionBarSherlock

+4

, 'PopupMenu' no se requiere para una barra de acción. ActionBarSherlock no es un respaldo de * todo *. – CommonsWare

+2

También, ver al menos una (no de propósito general) [backport de 'PopupMenu'] (http://code.google.com/p/openintents/source/browse/trunk/shoppinglist/ShoppingList/src/org /openintents/shopping/ui/widget/backport/PopupMenu.java?r=3810) en la primera página de una búsqueda en Google de 'android popupmenu backport', por lo que puede considerar simplemente tomar la fuente AOSP e intentar respaldarla usted mismo. – CommonsWare

Respuesta

11

La Clase MenuPopupHelper prácticamente hace el trabajo. No he encontrado una manera fácil de escuchar clics artículo sin embargo, por lo que he implementado 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); 
    } 
} 
+0

Esta solución no es perfecta ya que el objeto de vista anchorView debe implementar la interfaz View_OnAttachStateChangeListener requerida por AcctionBarSherlock. –

+1

Es bastante fácil hacer que 'View' implemente la interfaz' View_HasStateListenerSupport'. Puede encontrar un ejemplo de aplicación aquí: https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java –

+0

no puedo hacer este trabajo:/ – Javier

2

estoy trabajando en este momento. Hice lo que fue sugerido por CommonsWare acerca de portarlo. Básicamente tomé el código fuente de PopupMenu.java y reemplacé las importaciones del paquete con los equivalentes de la barra de acciones de acción. Parece funcionar bien en los dispositivos Gingerbread y ics que probé. La captura es sin embargo en actionbarsherlocks clase MenuPopupHelper que tenía que comentar las líneas que hacen referencia a View_HasStateListenerSupport como:

((View_HasStateListenerSupport)anchor).addOnAttachStateChangeListener(this); 

por alguna razón. Si no lo hacía me gustaría obtener una ClassCastException:

E/Android Runtime (9197): excepción fatal: principal E/Android Runtime (9197): java.lang.ClassCastException: android.widget.Button no pueden ser echados para com.actionbarsherlock.internal.view.View_HasStateListenerSupport E/AndroidRuntime (9197): en com.actionbarsherlock.internal.view.menu.MenuPopupHelper.tryShow (MenuPopupHelper.java:121) E/AndroidRuntime (9197): en com. actionbarsherlock.internal.view.menu.MenuPopupHelper.show (MenuPopupHelper.java:102)

estoy seguro si comentando ese oyente podría causar pr Oblems 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 probé, por lo que puede ayudar a cualquiera que investigue esto.

3

Agregado PopupMenu en ActionBarSherlock.

Styling del PopupMenu - yo sepa

<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> 
Cuestiones relacionadas