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

时间:2023-03-10 06:55:02
Activity中Menu相关的几个方法的调用时机

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

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

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