onContextItemSelected 用法

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。
*/

[java] view plaincopy

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

[java] view plaincopy

    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:在上下文菜单关闭时调用

时间: 2024-12-29 07:17:19

onContextItemSelected 用法的相关文章

ContextMenu高级用法

51CT0不支持MarkDown,原文请至:简书 关键字: ContextMenu ##背景 我们经常在列表的页面中,点击列表中的行,一般进入详情页面,长按列表中一行,会弹出一个菜单,包含了对某一行的操作(编辑.删除等等),也知道通常的用法: - 0x01. 在Activity中注册需要上下文菜单的View: `registerForContextMenu(mListView);` - 0x02. 然后在Activity中继承onCreateContextMenu方法,添加菜单项: ``` @O

Android ListView的用法

ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅. 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应. 首先在xml里面定义一个ListView Xml代码   <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01&quo

Menu,SubMenu,popupMenu,contextMenu的xml用法

在android3.0中引入了menu菜单,通过menu的xml文件,我们能迅速新建生成一个菜单文件,接下来一一介绍几种常用的菜单. 1.menu的调用,重写两个方法即可实现 @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub getMenuInflater().inflate(R.menu.main, menu);//填充menu文件夹中的main.xml菜单l

ConxtMenu高级用法

##背景我们经常在列表的页面中,点击列表中的行,一般进入详情页面,长按列表中一行,会弹出一个菜单,包含了对某一行的操作(编辑.删除等等),也知道通常的用法: 0x01. 在Activity中注册需要上下文菜单的View: registerForContextMenu(mListView); 0x02. 然后在Activity中继承onCreateContextMenu方法,添加菜单项: 1 2 3 4 5 6 7 8 @Override public void onCreateContextMe

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell 中seq的用法 echo -n用法

用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 从1循环到100的两种方法(bash 其它的shell没试过)for x in `seq 1 100`;do echo $x;donefor x in {1..100};do echo $x;done echo -n 不换行输出 $echo -n "123" $echo "456" 最终输出 123456 echo -e 处理特殊字符 若字符串中

sudo的用法

su -l user -C 'COMMAND' 是用user这个用户执行命令 我们一般使用sudo 这个命令 sudo [-u] user COMMAND sudo [-k] COMMAND 清除此前用户的密码. sudo的配置文件/etc/sudoers 配置项为 users    hosts=(runas)    commands users:可以是一个用户的名称也可以是一个组,也可以是一个别名 username #UID user_alias 用户别名的用法 User_Alias NETA