转载请注明出处,谢谢合作!
http://blog.csdn.net/JeterPong/article/details/52841386
最近,项目有用到Fragment对Menu的操作使用,发现并不能像Activity中那样直接使用。需要在oncreat方法中添加一行代码,才会被调用出来。
为此从网上查了一下资料,整理了一下,以便下次的使用和记忆。
Android4.0之后引入了fragment的概念,它的生命周期函数和activity几乎一样。对菜单的操作也是通过onCreateOptionMenu()实现的。
fragment可以通过实现 onCreateOptionMenu() 提供菜单项给activity的选项菜单。为了使这个方法接收调用,无论如何, 你必须在 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜单(否则, fragment将接收不到对 onCreateOptionsMenu()的调用)。
在Activity中是这样使用的:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
而在Fragment中使用时是这样的:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_main,menu);
}
多了一个形参:MenuInflater inflater
返回值为空
并且之后要在Fragment中的oncreat方法中调用这一行代码:
setHasOptionsMenu(true);//添加这行代码
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_feedback, null);
setHasOptionsMenu(true);//需要添加这行代码
return view;
}
参考资料:http://blog.csdn.net/momo906/article/details/36190099
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0104/777.html