ActionBarSherlockのPopupMenuに相当するものは何ですか? 私はそれを見つけることができないようです。その API 11、なぜそれがないのですか?
3 に答える
クラス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);
}
}
ActionBarSherlockに追加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>
私は現在これに取り組んでいます。CommonsWareが提案したバックポートについて行いました。基本的に、PopupMenu.javaソースコードを取得し、パッケージのインポートを同等のactionbarsherlockに置き換えました。私がテストしたジンジャーブレッドとicsデバイスでは問題なく動作するようです。ただし、キャッチはactionbarsherlocks MenuPopupHelperクラスにあり、View_HasStateListenerSupportを参照する行に次のようにコメントする必要がありました。
((View_HasStateListenerSupport)anchor).addOnAttachStateChangeListener(this);
何らかの理由で。そうしなかった場合、ClassCastExceptionが発生します。
E / AndroidRuntime(9197):致命的な例外:メインE / AndroidRuntime(9197):java.lang.ClassCastException:android.widget.Buttonをcom.actionbarsherlock.internal.view.View_HasStateListenerSupportにキャストできませんE / AndroidRuntime(9197):at com.actionbarsherlock.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:121)E / AndroidRuntime(9197):com.actionbarsherlock.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:102)
そのリスナーがMenuPopupHelperを利用する他のクラスに問題を引き起こす可能性があるかどうか、またはそれらがこの例外を引き起こしている理由(おそらくバグ)をコメントアウトするかどうかはわかりません。しかし、私が試したことを共有したいと思ったので、これを調べている人に役立つかもしれません。