[转]于Fragment和Activity之间onCreateOptionsMenu的问题
2015-12-08 21:03
120 查看
Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于Fragment是从属于activity的,因此第一次使用onCreateOptionsMenu的时候需要注意以下知识点。
一、在Activity和Fragment中onCreateOptionsMenu的实现是有细微差别的:
在activity中:
在Fragment中:
两者不同的地方在于
(1)一个有返回值(boolean类型),一个没有返回值。
(2)Fragment中onCreateOptionsMenu的参数多了一个
menu中便有了菜单项,而在执行到Fragment的(Menumenu,MenuInflaterinflater)时,activity的menu就传递下来,作为第一个参数。activity和Fragment中的menu其实是一个对象。[/code]
我还可以从上面的分析中得出,Fragment的菜单项会显示在Activity菜单项的后面。
inflate两个不同的菜单(就如上面的例子),Fragment会继承Activity的所有菜单。
四、如果在Fragment和Activity中有相同的菜单元素,并且activity和fragment都对此菜单有响应的话,那么将执行两次响应事件。
除此之外,该菜单元素会显示两次。
举例说明:
activity中的菜单资源:
fragment中:
他们有相同的菜单
这时如果activity中
Fragment中:
那么
一、在Activity和Fragment中onCreateOptionsMenu的实现是有细微差别的:
在activity中:
(1)一个有返回值(boolean类型),一个没有返回值。
(2)Fragment中onCreateOptionsMenu的参数多了一个
MenuInflater
二、想让中的onCreateOptionsMenu生效必须先调用[code]setHasOptionsMenu方法[/code]Fragment
一般我们是在中调用nCreate
三、如果Fragment和Activity都同时了一个menu资源文件,那么[code]menu资源所包含的菜单会出现两次[/code]inflate
为什么呢,因为方法的作用其实就是将第一个参数中包括的菜单项追加到menu中。一开始,在activity中menu是空的,当调用了[code]inflater.inflate(R.menu.pictrue_list,menu)
getMenuInflater().inflate(R.menu.main,menu)
我还可以从上面的分析中得出,Fragment的菜单项会显示在Activity菜单项的后面。
为了解决所包含的菜单会出现两次这个问题,一般我们让Activity和Fragmentmenu资源
multi_select(主要是id相同)。
这时如果activity中
两者的case
R.id.multi_select代码块都会执行。
相关文章推荐
- 运维入门--- -bash: /usr/local/maven/apache-maven-3.2.3/bin/mvn: Permission denied
- 【shell】我的wait为什么不能用
- Linux与windows之间-文件传输工具RZSZ
- Q:图像太大,在opencv上显示不完全
- linux字符截取
- 用Opencv一张张载入连续的图片
- Apache FTPClient操作“卡死”问题的分析和解决
- CentOS下tmux安装与使用
- Linux如何查看JDK的安装路径
- openjudge 二叉树
- 全面解析Linux 内核 3.10.x - 内存管理 - 内存模型
- shell 脚本中将输出内容赋值给一个变量时的换行问题
- OpenJudge_P2229 Sumsets
- 安装Apache后,恢复系统后修复Apache服务问题
- 【转】使用nmon监控suse或linux操作系统
- runLoop和runtime的分析
- mac下安装nginx问题解决
- Linux C学习---递归函数
- 如何在 apache 中开启 gzip 压缩服务
- docker的例子