ActionBarSherlock中的PopupMenu等价物是什么?我似乎找不到它。它的 API 11,为什么没有?
3 回答
类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);
}
}
添加PopupMenu
在ActionBarSherlock中。
造型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 的类出现问题,或者它们为什么会导致此异常(可能是错误)。但我想我会分享我尝试过的东西,所以它可以帮助任何研究这个问题的人。