动态改变ToolBar内菜单选项

在做项目的时候会从一个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);
}


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值