用于创建菜单的常用的方法有如下两种:

1.onCreateOptionsMenu(Menu menu)
2.onPrepareOptionsMenu(Menu menu)

MyDiaryActivity中的方法:

 /**
* Initialize the contents of the Activity's standard options menu.
* You should place your menu items in to menu.
*/
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//经代码测试:只有按手机上的菜单键的时候才执行onCreateOptionsMenu()
System.out.println("===onCreateOptionsMenu()方法====");
menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert);
menu.add(0, android.view.Menu.NONE, 1, R.string.menu_insert_2);
return true;
}
 /**
* This is called right before the menu is shown, every time it is shown
*/
public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu);
//在onCreateOptionsMenu(Menu menu)方法之后执行,
System.out.println("public boolean onPrepareOptionsMenu(Menu menu)");
myToast("public boolean onPrepareOptionsMenu(Menu menu) ");
/*
* getListAdapter():Get the ListAdapter associated with this activity's
* ListView. getCount():How many items are in the data set represented
* by this Adapter.
*/ final boolean haveItems = getListAdapter().getCount() > 0;
myToast("getListAdapter().getCount()一共有" + getListAdapter().getCount()
+ "个");
if (haveItems) {
// getListView():Get the activity's list view widget.
if (getListView().getSelectedItemId() > 0) {
menu.removeGroup(1); Uri uri = ContentUris.withAppendedId(getIntent().getData(),
getListView().getSelectedItemId()); Intent intent = new Intent(null, uri);
// TODO 下面这行代码还不知道到底怎么用
menu.add(1, MENU_ITEM_EDIT, 1, "编辑内容").setIntent(intent);
menu.add(1, MENU_ITEM_DELETE, 1, "删除当前日记"); }
} else {
menu.removeGroup(1);
} return true;
}

以上这两个方法都是在用户点击了菜单按钮之后才执行,先执行:

1.onCreateOptionsMenu(Menu menu)

然后执行

2.onPrepareOptionsMenu(Menu menu)

注意点,

这两个方法在整个应用的生命周期里的执行次数一般是不同的,具体区别如下:

onCreateOptionsMenu(Menu menu) 只执行一次,就是安卓应用打开后,用户第一次按菜单键的时候执行这个方法,只要这个Activity不销毁,即只要还没有执行到

onDestroy()方法,那么onCreateOptionsMenu(Menu menu) 就不会再执行了。

而相对的,只要用户点击了菜单键,那么onPrepareOptionsMenu(Menu menu)这个方法就会执行一次点一次就执行一次

这是这两者的很重要的区别。

Activity中Menu相关的几个方法的调用时机的更多相关文章

  1. [JIT_APP]Activity生命周期相关的7个方法

    先发一张安卓官方文档里面的Activity生命周期图解 下面在对这7个生命周期内相关的方法做一些简单的介绍 OnCreate() 当Activity被创建的时候,会自动运行该方法.该方法做一些初始化动 ...

  2. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

    1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...

  3. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机--(转)

    原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法 ...

  4. java中Object相关的几个方法

    protected Object clone()创建并返回此对象的一个副本. String     toString()返回该对象的字符串表示. boolean equals(Object obj)指 ...

  5. 日常运维中的相关日志切割处理方法总结 [Logrotate、python、shell脚本实现 ]

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  6. Spring中 PROPAGATION_REQUIRED 解释 事物是在一个方法里调用其他的方法,一起成功或者一起失败,是方法之间的关系,而不是某一个方法内部的问题。而且要以抛异常的方式来表明方法的失败,以此来导致事物起作用,大家全失败。

    事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 事务传播 ...

  7. Activity的onRestart()方法调用时机

    在项目中看到Activity使用onRestart(),平时对这个方法的调用时机知道的比较少,研究一下它啥时候会被调用. 代码很简单: <span style="font-size:1 ...

  8. Spring中AOP相关源码解析

    前言 在Spring中AOP是我们使用的非常频繁的一个特性.通过AOP我们可以补足一些面向对象编程中不足或难以实现的部分. AOP 前置理论 首先在学习源码之前我们需要了解关于AOP的相关概念如切点切 ...

  9. (转)Android在子线程中更新Activity中UI的方法

    转:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处 ...

随机推荐

  1. Android 开发笔记“Eclipse 调试和快捷键”

    原文地址:http://blog.sina.com.cn/s/blog_5cf876340100aswr.html Eclipse 调试器和 Debug 视图 Eclipse SDK 是针对 Java ...

  2. struts2上传下载

    struts上传下载必须引入两个jar文件: commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件 import java.io.BufferedI ...

  3. chrome extension overview

    目录 什么是扩展............................................................................................ ...

  4. SIGAR - System Information Gatherer And Reporter

    https://support.hyperic.com/display/SIGAR/Home 收藏一篇: http://www.cnitblog.com/houcy/archive/2012/11/2 ...

  5. Protel99se教程五:protel99se的自动布线

    在上一节课的protel99se教程中,我们给大家演示的是,如何快速的将SCH原理PCB,也就是将元件转到PCB中,在这一节课,我们主要给大家讲解的是何在protel99se快速布线,我们在这节课当中 ...

  6. The Longest Straight(二分,离散化)

     Problem 2216 The Longest Straight Accept: 7    Submit: 14 Time Limit: 1000 mSec    Memory Limit : 3 ...

  7. Foundation Sorting: Shellsort

    /* Shell Sorting. * Implemention history:. * 2013-09-15, Mars Fu, first version. */ /* [Shell Sortin ...

  8. C# Webservice

    c#webservice的简单示例   webservice传递的数据只能是序列化的数据,典型的就是xml数据. 下面以一个简单例子为例: (一)新建——-项目---Visual C#---web-- ...

  9. MVC表单提交加JS验证

    做一个普通表单提交,但是要加前端验证,如下: 1. Action public ActionResult Add(ProductModelproductID) {     //operate... } ...

  10. gets scanf以及缓冲区域的问题

    1:scanf scanf会忽略开头所有的空格,并以Space Enter Tab 结束输入, 不会舍弃最后的回车符(即回车符会残存在缓冲区域中) 2:getchar getchar以Enter结束, ...