Activity中Menu相关的几个方法的调用时机

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

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

MyDiaryActivity中的方法:

 1 /**
 2      * Initialize the contents of the Activity‘s standard options menu.
 3      * You should place your menu items in to menu.
 4      */
 5     public boolean onCreateOptionsMenu(Menu menu) {
 6         super.onCreateOptionsMenu(menu);
 7         //经代码测试:只有按手机上的菜单键的时候才执行onCreateOptionsMenu()
 8         System.out.println("===onCreateOptionsMenu()方法====");
 9         menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert);
10         menu.add(0, android.view.Menu.NONE, 1, R.string.menu_insert_2);
11         return true;
12     }
 1 /**
 2      * This is called right before the menu is shown, every time it is shown
 3      */
 4     public boolean onPrepareOptionsMenu(Menu menu) {
 5
 6         super.onPrepareOptionsMenu(menu);
 7         //在onCreateOptionsMenu(Menu menu)方法之后执行,
 8         System.out.println("public boolean onPrepareOptionsMenu(Menu menu)");
 9         myToast("public boolean onPrepareOptionsMenu(Menu menu) ");
10         /*
11          * getListAdapter():Get the ListAdapter associated with this activity‘s
12          * ListView. getCount():How many items are in the data set represented
13          * by this Adapter.
14          */
15
16         final boolean haveItems = getListAdapter().getCount() > 0;
17         myToast("getListAdapter().getCount()一共有" + getListAdapter().getCount()
18                 + "个");
19         if (haveItems) {
20             // getListView():Get the activity‘s list view widget.
21             if (getListView().getSelectedItemId() > 0) {
22                 menu.removeGroup(1);
23
24                 Uri uri = ContentUris.withAppendedId(getIntent().getData(),
25                         getListView().getSelectedItemId());
26
27                 Intent intent = new Intent(null, uri);
28                 // TODO 下面这行代码还不知道到底怎么用
29                 menu.add(1, MENU_ITEM_EDIT, 1, "编辑内容").setIntent(intent);
30                 menu.add(1, MENU_ITEM_DELETE, 1, "删除当前日记");
31
32             }
33         } else {
34             menu.removeGroup(1);
35         }
36
37         return true;
38     }

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

1.onCreateOptionsMenu(Menu menu)

然后执行

2.onPrepareOptionsMenu(Menu menu)

注意点,

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

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

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

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

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

时间: 2024-10-13 11:30:21

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

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

今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,所以写代码的时候出现了很多的问题,所以没办法就去扒源代码看了.不过在此之前我讲解过一篇关于数据库升级的文章,但是那里没有详细的讲解一下这两个方法的执行时机,所以这里就在单独说一下 关于数据库升级的文章:http://blog.csdn.net/jiangwei0910410003/article/details/39670813 不多说,下面直接进

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

原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,所以写代码的时候出现了很多的问题,所以没办法就去扒源代码看了.不过在此之前我讲解过一篇关于数据库升级的文章,但是那里没有详细的讲解一下这两个方法的执行时机,所以这里就在单独说一下 关于数据库升级的文章:http:/

自定义View 中一些方法的调用时机

onFinishInflate()函数的调用时机: onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 onSizeChanged(int, int, int, int) 当view的大小发生变化时触发 onDraw(Canvas) view渲染内容的细节 onKeyDown(int

Javascript中字符串相关常用的使用方法总结

JavaScript的内置功能之一就是字符串连接,如果用'+'连接两个数字,表示两数相加.但是如果用于字符串,就表示第二个字符加在第一个字符之后. var num=1+2; console.log(num); var msg='hello'+'world'; console.log(msg); 对于字符串来说,除了有length属性,还有很多其他有用的属性,如: var str='hello,world'; console.log(str.length); console.log(str.cha

AppDelegate中几个常用的回调调用时机

本篇文章主要介绍一些UIApplicationDelegate中几个常用的回调方法的调用时机.以帮助你判断哪些方法倒底放到哪个回调中去实现. 1. – (void)applicationDidFinishLaunching:(UIApplication *)application;此方法基本已经弃用,改用第2个方法代替.2. – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDict

在Activity中响应ListView内部按钮的点击事件的两种方法

转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在Activity中实现该接口,从而实现对点击事件的响应. 下班后思考了一下,觉得有两种方式都能比较好的实现:使用接口回调和使用抽象类回调. 正好可以复习一下接口和抽象类的区别,于是写了两个Demo: 1.

Android中Activity与Task相关的属性解析

与Task相关的属性解析 android:allowTaskReparenting 用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)--"true",表示能移动,"false",表示它必须呆在启动时呆在的那个Task里.    如果这个特性没有被设定,设定到<application>元素上的allowTaskReparenting特性的值会应用到Activity上.默认值为"fals

Activity,Fragment中menu菜单注意事项

以前一般都是在Activity中添加menu菜单,一般是重写onCreateOptionsMenu和onOptionsItemSelected方法. 现在用fragment用的多了,就在fragment里面添加menu菜单,也是重写了onCreateOptionsMenu和onOptionsItemSelected方法. 但是需要注意的是: 在fragment中使用menu菜单,需要在onCreate()方法里面添加语句 setHasOptionsMenu(true);

在Fragment中OnActivityResult方法中接收Activity中返回的值

在Fragment中OnActivityResult方法中接收Activity中返回的值 在Fragment中OnActivityResult方法中接收Activity中返回的值,有需要的朋友可以参考下. 在开发android中,有些人往往很疑惑,当一个FragmentActivity中有多个碎片的时候,如a,b,c三个碎片, 其中b中进行了操作,跳转到了新的界面D(activity).但是当D操作完后,返回值到碎片b.那么问题就来了,肯定会有人问,b是一个碎片,如何才能接收到D传过来的值呢?