Android 的activity中onCreateOptionsMenu onMenuItemSelected onOptionsItemSelected onCreateContextMenu onContextItemSelected 五个方法的使用:
onCreateOptionsMenu :此方法为创建菜单方法,这个菜单就是你在点击手机menu键时会看到的菜单。
onCreateContextMenu :此方法为创建菜单方法,你还需要对此菜单进行注册Activity.registerForContextMenu(View view),这个菜单是在你长按前面注册的view时看到的菜单。
onMenuItemSelected :当你选择上面两种菜单任意一种时都会触发这个事件。
onOptionsItemSelected :这个方法只在onCreateOptionsMenu 创建的菜单被选中时才会被触发。
onContextItemSelected :这个方法只在onCreateContextMenu 创建的菜单被选中时才会被触发。

因为在一个Activity中都使用onMenuItemSelected和onContextItemSelected时会冲突,
也就是说,当有长按弹出菜单的时候,点击菜单的选项响应的是onMenuItemSelected(),如果被
点击的Item Id不在 onMenuItemSelected中,事件就不会响应,此时不会再调用onContextItemSelected。
这样的话,我们在onContextItemSelected中定义的事件就不会执行,这就是很多人遇到的“onContextItemSelected失效”的原因.
这个时候,需要在onContextItemSelected做相应的判断,如果执行的事件不在onMenuItemSelected中,就执行onContextItemSelected。

  1. @Override
  2. public boolean onMenuItemSelected(int featureId, MenuItem item) {
  3. switch (item.getItemId()) {
  4. case R.id.about:
  5. Intent intent = new Intent();
  6. intent.setClass(BaseActivity.this, AboutActivity.class);
  7. startActivity(intent);
  8. return true;
  9. case R.id.bgsettings:
  10. Intent changeBgIntent = new Intent();
  11. changeBgIntent.setClass(BaseActivity.this, BgActivity.class);
  12. startActivity(changeBgIntent);
  13. return true;
  14. case R.id.help:
  15. Intent helpIntent = new Intent();
  16. helpIntent.setClass(BaseActivity.this, HelpActivity.class);
  17. startActivity(helpIntent);
  18. return true;
  19. case R.id.exit:
  20. System.exit(0);
  21. return true;
  22. /*因为在一个Activity中都使用onMenuItemSelected和onContextItemSelected时会冲突,
  23. 也就是说,当有长按弹出菜单的时候,点击菜单的选项响应的是onMenuItemSelected(),如果被
  24. 点击的Item Id不在 onMenuItemSelected中,事件就不会响应,此时不会再调用onContextItemSelected。
  25. 这样的话,我们再onContextItemSelected中定义的事件就不会执行,这就是很多人遇到的“onContextItemSelected失效”的原因.
  26. 这个时候,需要在onContextItemSelected做相应的判断,如果执行的事件不在onMenuItemSelected中,就执行onContextItemSelected。
  27. */
  28. default:
  29. onContextItemSelected(item);
  30. }
  31. return false;
  32. }
  1. @Override
  2. public boolean onContextItemSelected(MenuItem item) {
  3. System.out.println("--------onContextItemSelected---------");
  4. switch (item.getItemId()) {
  5. case R.id.collect_book:
  6. doCollect();
  7. return true;
  8. case R.id.detail:
  9. Toast.makeText(this, "书籍详细信息", 3000).show();
  10. return true;
  11. default:
  12. return super.onContextItemSelected(item);
  13. }
  14. }

除此之外,

onPrepareOptionsMenu:在显示选项菜单前调用
onOptionsMenuClosed:在选项菜单关闭时被调用
onContextMenuClosed:在上下文菜单关闭时调用

onContextItemSelected 与 onMenuItemSelected 的那些事的更多相关文章

  1. android onContextItemSelected和onMenuItemSelected厉害关系

    Android 的activity中onCreateOptionsMenu onMenuItemSelected onOptionsItemSelected onCreateContextMenu o ...

  2. onOptionsItemSelected、onMenuItemSelected、onContextItemSelected 区别

         1.在点击选项菜单(OptionsMenu:点击menu弹出的菜单)的菜单项时即调用了onMenuItemSelected 也调用了onOptionsItemSelected ,于是疑惑他们 ...

  3. onContextItemSelected 用法

    http://blog.csdn.net/kavensu/article/details/8045041 onCreateOptionsMenu :此方法为创建菜单方法,这个菜单就是你在点击手机men ...

  4. 【腾讯Bugly干货分享】H5 视频直播那些事

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...

  5. CSharpGL(31)[译]OpenGL渲染管道那些事

    CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...

  6. TODO:字节的那点事Go篇

    TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64) 在Golang中string底层是由byte数组组成的. fmt.Println(len(&quo ...

  7. Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事

    前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...

  8. OpenNLP:驾驭文本,分词那些事

    OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...

  9. HTTPS那些事(一)HTTPS原理

    转载来自:http://www.guokr.com/post/114121/ 谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传 ...

随机推荐

  1. uniGUI之文件下载(29)

    1]SendFile 2]SendStream 3]自定义类型文件下载 1]SendFile UniSession.SendFile('新建文本文档.txt' //服务器端 文件名 ,'anew.tx ...

  2. acm数论之旅--欧拉函数的证明

    随笔 - 20  文章 - 0  评论 - 73 ACM数论之旅7---欧拉函数的证明及代码实现(我会证明都是骗人的╮( ̄▽ ̄)╭) https://blog.csdn.net/chen_ze_hua ...

  3. hybird怎么实现的(核心webview)

    链接:https://blog.csdn.net/gongch0604/article/details/80510005

  4. CSS控制 文字超出部分显示省略号

    实现单行文本的溢出显示省略号, (需要加宽度width属来兼容部分浏览) <p style="width: 100px;overflow: hidden;white-space: no ...

  5. VS2013 Solution Explorer can not open

    Delete content under the path: C:\Users\username\AppData\Local\Microsoft\VisualStudio\12.0\Component ...

  6. redis介绍、单机安装以及java调用

    什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求(非关系型的.分布式的.开源的.水平可扩展 ...

  7. Springboot学习:核心配置文件

    核心配置文件介绍 SpringBoot使用一个全局配置文件,配置文件名是固定的 application.properties application.yml 配置文件的作用:修改SpringBoot自 ...

  8. POJ-1087 A Plug for UNIX (网络流)

    思路 电器数1 ~ 100,附带100种接口,注意题目:You notice that some of the devices use plugs for which there is no rece ...

  9. Shell编程WEB界面展示实践

    操作系统:win7 虚拟机:Virtual box with Ubuntu13.10 WEB服务器: Nginx WEB服务器发布目录:/usr/local/nginx/html/c 测试文件:lis ...

  10. MSE-初始化MSE

    MSE(Mobility Services Engine) Cisco MSE可以配合无线实现很多功能,MSE的功能简单概括有: 1.基本位置服务捕获并聚合关键网络信息,例如设备位置,RF频谱详细信息 ...