8

ActionBarSherlock中的PopupMenu等价物是什么?我似乎找不到它。它的 API 11,为什么没有?

4

3 回答 3

11

MenuPopupHelper几乎可以完成这项工作。虽然我没有找到一种简单的方法来监听 Item Clicks,所以我实现了这个派生自 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);
    }
}
于 2012-09-05T14:51:17.647 回答
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>
于 2013-11-05T05:35:57.557 回答
2

我目前正在做这件事。我按照 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 的类出现问题,或者它们为什么会导致此异常(可能是错误)。但我想我会分享我尝试过的东西,所以它可以帮助任何研究这个问题的人。

于 2012-10-26T02:10:00.650 回答