2012-08-25 14 views
8

ActionBarSherlockに相当するPopupMenuとは何ですか?私はそれを見つけるように見えない。そのAPI 11、それはなぜ不在ですか?ActionBarSherlockに相当するPopupMenu

+4

私の知る限りでは、 'PopupMenu'は、アクションバーのために必要とされていません。 ActionBarSherlockは* everything *のバックポートではありません。 – CommonsWare

+2

また、少なくとも1つの(汎用ではない)[PopupMenu']のバックポートがあります(http://code.google.com/p/openintents/source/browse/trunk/shoppinglist/ShoppingList/src/org /openintents/shopping/ui/widget/backport/PopupMenu.java?r=3810)、アンドロイドポップアップメニューバックポートのGoogle検索の最初のページにあるので、AOSPソースを取得してバックポートしようと考えるかもしれません。 – 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'を' View_HasStateListenerSupport'インターフェースを実装するのはかなり簡単です。実装の例はここにあります:https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java –

+0

私はこの仕事をすることができません: – Javier

2

私は現在、これに取り組んでいます。 CommonsWareがバックポートすることについて私が提案したことをしました。私は基本的にPopupMenu.javaソースコードを取り出し、パッケージのインポートをactionbarsherlockに置き換えました。私がテストしたジンジャーブレッドとicsのデバイスでうまく動作しているようです。何らかの理由で

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

:キャッチは、しかし、私は同じようView_HasStateListenerSupportを参照する行をコメントしていたactionbarsherlocks MenuPopupHelperクラスです。

E/AndroidRuntime(9197):致命的な例外:メイン はE/AndroidRuntime(9197):java.lang.ClassCastExceptionが:android.widget.Buttonをキャストすることができない私はしなかった場合、私はClassCastExceptionがなるだろう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)

そのリスナーをコメントアウトすると、PR引き起こす可能性がある場合、私はわかりませんよMenuPopupHelperを利用する他のクラスのoblems、またはなぜこの例外を引き起こしているのか(おそらくバグ)。しかし、私が試したことを分かち合うと思ったので、これを調べている人を助けるかもしれません。

3

PopupMenuActionBarSherlockに追加しました。 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>