在做项目的时候会从一个Activity下开启几个不同的fragment,为了少些代码我就将Toolbar直接放在了activity相应的布局下,这样在该activity下启动的fragment都会拥有该Toolbar,但是这里遇到一个问题:开启fragment后需要将Toolbar上的内容改变,标题以及按钮。
标题比较容易,直接在fragment的oncreatview中调用settitle方法就可以了;
菜单就没有头绪了,一开始搜寻网络找到这个:(解决方法代码在最下面)
1.public boolean onCreateOptionsMenu(Menu menu)
此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。
返回true显示,false不显示;
(只会在第一次初始化菜单时调用)
2.public boolean onPrepareOptionsMenu(Menu menu)
在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。
返回true显示,false 则不显示;
(每次显示前都会调用)
3.public void onOptionsMenuClosed(Menu menu)(每次菜单被关闭时调用)
4.public boolean onOptionsItemSelected(MenuItem item)(点击选项时调用,也就是实现点击事件的方法,根据id进行判断)
帮我加深了一下理解,在activity里将onCreateOptionsMenu修改为onPrepareOptionsMenu,发现每次打开菜单都会增加一遍原选项,遂放弃,现在感觉结合最终解决方案用这几个方法也可以解决。
---------------------------------------------------------解决方案--------------------------------------------------------------
再然后就是搜到了这篇帖子http://bbs.csdn.net/topics/390877448,目前在最后的回复就是解决方法了,其实很简单,Menu是一个接口,但为了方便理解可以当做一个集合来看,而当inflate进一个menu的xml文件时相当于add进去的,所以在inflate前对menu进行clean就行了
贴下在fragment内的重要的部分代码:
//在onCreateView方法内
getActivity().setTitle("个人主页");//改变标题
setHasOptionsMenu(true);//保证能调用onCreateOptionsMenu
onCreateOptionsMenu方法:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();//不清空就会变成添加进来而不是替换
inflater.inflate(R.menu.persenol, menu);
}