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)这个方法就会执行一次点一次就执行一次

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

原文地址:https://www.cnblogs.com/Sunnor/p/4799059.html