您的位置:首页 > 移动开发 > Android开发

动态改变ToolBar内菜单选项

2015-10-30 18:29 337 查看
在做项目的时候会从一个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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Toolbar