http://blog.csdn.net/kavensu/article/details/8045041

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. }

在点击选项菜单(OptionsMenu:点击menu弹出的菜单)的菜单项时即调用了 onMenuItemSelected 也调用了onOptionsItemSelected ,于是疑惑他们有什么不一样。然后再看上下文菜单(ContextMenu:长按控件时弹出。例如在长按EditTextView时弹出输入的法选择菜 单),点击上下文菜单的菜单项时即调用了onMenuItemSelected 也调用了onContextItemSelected ,于是问题就明朗了。在父Activity的onMenuItemSelected 方法中判断如果是选项菜单就走onMenuItemSelected ,如果是上下文菜单就走onContextItemSelected 。

除此还有

onPrepareOptionsMenu:在显示选项菜单前调用

onOptionsMenuClosed:在选项菜单关闭时被调用

onContextMenuClosed:在上下文菜单关闭时调用

onContextItemSelected 用法的更多相关文章

  1. ConxtMenu高级用法

    ##背景我们经常在列表的页面中,点击列表中的行,一般进入详情页面,长按列表中一行,会弹出一个菜单,包含了对某一行的操作(编辑.删除等等),也知道通常的用法: 0x01. 在Activity中注册需要上 ...

  2. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  3. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  4. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  5. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  6. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  7. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  8. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  9. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

随机推荐

  1. Crazy Search

    poj1200:http://poj.org/problem?id=1200 题意:给你一个有m种字符串,求长度为n的连续子串由多少种. 题解:网上的代码都是hash,但是本人觉得hash有问题,就是 ...

  2. UIKit的手风琴菜单,单条展开和多条同时展开

    这个也要进来看看哈. 记得加多个属性时的用法就可以了. 因为官网提供太多的SAPMLE啦.. http://www.getuikit.net/docs/accordion.html <div c ...

  3. Java Servlet的request使用的编码引发的思考 以及解决方法

    如果我们用浏览器填写了中文,而在服务器Servlet上没有进行编码设置,那么将会出现乱码. 出现乱码的原因是:浏览器发送的文字是以UTF-8编码发送的,然后调用request.getParameter ...

  4. 【Xamain 跨平台机制原理剖析】

    原文:[Xamain 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址] Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原生 ...

  5. oracle索引再论

    ORACLE中索引的数据结构有B树结构和位图结构. 我们通常用的普通索引.反向键索引.函数索引等都是B树结构的,是树状结构:位图结构则只有叶子节点. B树索引操作有唯一性扫描,范围扫描,快速索引全扫描 ...

  6. poj3233

    这道题其实算是把快速幂的思想用在多项式之中 A+A^2+A^3+…+A^n=(A+A^1…+A^[n/2])+A^[n/2](A+A+A^1…+A^[n/2])+n mod 2*A^n 然后就是打码的 ...

  7. bzoj1576 3694

    两道题目本质是一样的bzoj1576我们先要用dij+heap处理出最短路径树和起点到每个点的最短路径而bzoj3694已经给出了最短路径树,所以直接dfs即可题目要求的是不走起点到每个点最短路径上的 ...

  8. 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错

    原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...

  9. ssh互信自动化脚本(待更新)

    1.建立一个ip,端口,用户,密码列表 [root@localhost shell-key]# cat arg_list.txt 172.16.56.215 172.16.56.215 172.16. ...

  10. php写excel

    $this->loadexcel();        $objPHPExcel = new PHPExcel();        $objPHPExcel->getProperties() ...