动态改变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内的重要的部分代码:
标题比较容易,直接在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); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories