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; }
来源: