2012-08-25 7 views
8

ActionBarSherlock에 해당하는 PopupMenu은 무엇입니까? 나는 그것을 찾을 수없는 것 같습니다. 그것의 API 11은 왜 결석 하나?ActionBarSherlock의 PopupMenu 해당 항목

+4

AFAIK는'PopupMenu'는 작업 표시 줄 필요하지 않습니다. ActionBarSherlock은 * 모든 것의 백 포트가 아닙니다. – CommonsWare

+2

또한 하나 이상의 (범용이 아닌) [PopupMenu']의 백 포트 (http://code.google.com/p/openintents/source/browse/trunk/shoppinglist/ShoppingList/src/org)가 표시됩니다. /openintents/shopping/ui/widget/backport/PopupMenu.java?r=3810) 'android popupmenu backport'에 대한 Google 검색의 첫 번째 페이지에서 AOSP 소스를 가져 와서 직접 backport하려고 시도 할 수 있습니다. – CommonsWare

답변

11

클래스 MenuPopupHelper 꽤 많은 일을합니다. 그래도 항목 클릭을 수신 할 수있는 쉬운 방법을 찾지 못했습니다, 그래서 나는 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

anchorView 뷰 객체가 AcctionBarSherlock에 필요한 View_OnAttachStateChangeListener 인터페이스를 구현해야하므로이 솔루션은 완벽하지 않습니다. –

+1

'View_HasStateListenerSupport' 인터페이스를 구현하는 것은 꽤 쉽습니다. 다음은 구현 예입니다. https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java –

+0

이 작업을 수행 할 수 없습니다./ – Javier

2

나는 현재이 중이 야합니다. CommonsWare가 backporting에 대해 제안한 바를 수행했습니다. 기본적으로 PopupMenu.java 소스 코드를 가져 와서 패키지 반입을 actionbarsherlock에 해당하는 것으로 바 꾸었습니다. 테스트 한 진저 브레드 및 IC 기기에서 제대로 작동하는 것 같습니다. 어떤 이유로

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

: 캐치하지만 내가 좋아하는 View_HasStateListenerSupport를 참조 라인을 언급했다 actionbarsherlocks MenuPopupHelper 클래스입니다.

E/AndroidRuntime (9197) : 내가하지 않았다면 나는 ClassCastException를 얻을 것 치명적인 예외를 : 주요 E/AndroidRuntime (9197) : java.lang.ClassCastException가 : android.widget.Button는 캐스트 할 수없는 com.actionbarsherlock.internal.view.View_HasStateListenerSupport에 E/(9197) AndroidRuntime : com.actionbarsherlock.internal.view.menu.MenuPopupHelper.tryShow (MenuPopupHelper.java:121) E/AndroidRuntime (9197)에서 : COM에서. 그 리스너을 주석하는 원인이 될 수있는 경우 actionbarsherlock.internal.view.menu.MenuPopupHelper.show (MenuPopupHelper.java:102는)

나는 홍보 확실 해요 MenuPopupHelper를 사용하는 다른 클래스에 대한 oblems 또는 왜이 예외를 일으키는 지 (아마도 버그). 그러나 나는 내가 시도한 것을 나눌 것이라고 생각했기 때문에 이것을 조사하는 사람을 도울 수 있습니다.

3

PopupMenu이 추가되었습니다. 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>