menu对象是activity默认提供的,但它只能在oncreateOptionsMenu()中使用,如果我们需要平板开发,希望在fragment中也能创建menu菜单,就需要我们自己手动创建menu对象。
Menu menu = ?// How to create an instance !?
new MenuInflater(context).inflate(R.menu.my_menu, menu)
有两种解决方案:
一:
使用ActionbarSherlock 中的Menu系列api:
Menu menu = new MenuBuilder(context);
或者干脆,自己写一个MenuBuilder。
二:
通过反射机制调用android内核类:
public Menu newMenuInstance(Context context) {
try {
Class<?> menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder");
Constructor<?> constructor = menuBuilderClass.getDeclaredConstructor(Context.class);
return (Menu) constructor.newInstance(context);
} catch (Exception e) {e.printStackTrace();}
return null;
}
来源: