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)这个方法就会执行一次,点一次就执行一次。
这是这两者的很重要的区别。